据我所知,CSS不是图灵完备的。但是我对CSS的知识非常有限。

CSS图灵完备吗? 现有的草案或委员会是否考虑了可能实现图灵完整性的语言特性(如果现在还没有的话)?


当前回答

图灵完备性不仅仅是关于“定义函数”或“有if /循环/等等”。例如,Haskell没有“loop”,lambda-calculus没有“if”,等等……

例如,这个网站:http://experthuman.com/programming-with-nothing。作者使用Ruby创建了一个只有闭包的“FizzBuzz”程序(没有字符串、数字或任何类似的东西)…

有这样的例子,人们在Scala上只使用类型系统来计算一些算术函数

所以,是的,在我看来,CSS3+HTML是turing-complete(即使你不能准确地做任何真正的计算而不变得疯狂)

其他回答

CSS不是一种编程语言,所以图灵完备性的问题是没有意义的。如果编程扩展被添加到CSS中,比如在IE6中,那么新的合成是完全不同的事情。

CSS仅仅是对样式的描述;它没有任何逻辑,它的结构是扁平的。

根据这篇文章,它不是。这篇文章还认为,把它变成一个不是个好主意。

引用其中一条评论:

所以,我不相信CSS是 图灵完成。没有 中定义函数的能力 CSS。为了让一个系统 图灵完备必须是可能的 编写解释器:一个函数 它解释了表达式 指示要执行的程序。CSS没有 可以直接访问的变量 对用户;所以你甚至不能建模 的结构 用CSS解释的程序。

图灵完备性不仅仅是关于“定义函数”或“有if /循环/等等”。例如,Haskell没有“loop”,lambda-calculus没有“if”,等等……

例如,这个网站:http://experthuman.com/programming-with-nothing。作者使用Ruby创建了一个只有闭包的“FizzBuzz”程序(没有字符串、数字或任何类似的东西)…

有这样的例子,人们在Scala上只使用类型系统来计算一些算术函数

所以,是的,在我看来,CSS3+HTML是turing-complete(即使你不能准确地做任何真正的计算而不变得疯狂)

这里的基本问题是,任何用HTML+CSS编写的机器都不能计算无限多的步骤(即不可能有“真正的”递归),除非代码无限长。如果n是有限的,那么机器能在n步或更短的时间内达到构型H的问题总是可以回答的。

这个答案是不准确的,因为它混合了UTM的描述和UTM本身(通用图灵机)。

我们有很好的答案,但从不同的角度来看,它并没有直接显示出当前顶级答案的缺陷。


首先,我们同意人类可以作为UTM工作。这意味着如果我们这样做

CSS + Human == UTM

那么CSS部分是无用的,因为所有的工作都可以由人来做UTM部分。点击行为可以是UTM,因为你不是随机点击,而是只在特定的地方点击。

代替CSS,我可以使用下面的文本(规则110):

000 -> 0
001 -> 1
010 -> 1
011 -> 1
100 -> 0
101 -> 1
110 -> 1
111 -> 0

指导我的行动,结果将是一样的。这是说这个文本UTM?不,这只是其他UTM(人或计算机)可以读取和运行的输入(描述)。单击就足以运行任何UTM。


CSS缺乏的关键部分是能够以任意方式改变自己的状态,如果CSS可以生成点击,那么它将是UTM。争论你的点击是“曲柄”的CSS是不准确的,因为真正的“曲柄”的CSS是布局引擎运行它,它应该足以证明CSS是UTM。