![]() |
1
351
你可以编码 Rule 110 在css3中,只要考虑一个适当的附带html文件 和用户交互 成为css“执行”的一部分。一 pretty good implementation 提供了另一个实现:
|
![]() |
2
80
图灵完备性的一个方面是 它的 halting problem 是不可判定的 . 这意味着没有 一般的 用于确定css程序是否将永远完成运行或循环的算法。 但是我们可以为css导出这样的算法!这里是:
就是这样。因为我们刚刚展示了停止问题对于css是可判定的,所以 CSS是 不 图灵完备性 . (其他人提到了IE6,它允许在CSS中嵌入任意的JavaScript表达式;这显然会增加图灵的完整性。但这项功能是非标准的,没有一个头脑正常的人会使用它。) 丹尼尔·瓦格纳提出了一个我在原始答案中漏掉的观点。他注意到当我 动画 ,样式引擎的其他部分,如 选择器匹配 或 布局 也会导致图灵完备性。虽然很难对这些问题进行正式的论证,但我将试图概述为什么图灵完备性仍然不太可能发生。 首先:图灵完全语言有 将数据反馈回自身 ,无论是通过递归还是循环。但是css语言的设计对这种反馈是不友好的:
这应该足以让你相信 选择器匹配本身不能是图灵完整的 . 但是布局呢? 现代的css布局算法非常复杂,具有如下特点 Flexbox 和 Grid 把水弄脏了。但是,即使可以用布局触发无限循环,也很难利用它来执行有用的计算。这是因为css选择器只检查dom的内部结构,而不检查这些元素在屏幕上的布局。所以 任何使用布局系统的图灵完整性证明都必须依赖于单独的布局 . 最后,这也许是最重要的原因。 浏览器供应商有兴趣保留css 不 图灵完备性 . 通过限制语言,供应商允许 clever optimizations 这使得网络对每个人来说都更快。此外,谷歌还致力于 a whole server farm 搜索chrome中的漏洞。如果有一种使用css编写无限循环的方法,那么他们可能已经找到了 |
![]() |
3
28
As per this article, it's not . 文章还认为,让它成为一个不好的主意。 引用其中一条评论:
|
![]() |
4
5
图灵完备性不仅仅是关于“定义函数”或“拥有ifs/loops/etc”。例如,haskell没有“loop”,lambda微积分没有“ifs”,等等…… 例如,此网站: http://experthuman.com/programming-with-nothing . 作者使用ruby创建了一个只有闭包的“fizzbuzz”程序(没有字符串、数字或类似的东西)。 当人们在scala上只使用类型系统计算一些算术函数时,有一些例子。 所以,是的,在我看来,css3+html是图灵完成的(即使你不能完全用它来做任何真正的计算而不会变得疯狂) |
![]() |
5
3
这里的基本问题是,任何用html+css编写的机器都不能计算无限多个步骤(即不能有“真正的”递归),除非代码无限长。问题是这台机器能否达到配置
|
![]() |
6
1
This 答案不准确,因为它混合了utm和utm本身(通用图灵机)的描述。 我们有 good answer 但从不同的角度来看,它并没有直接显示出当前热门答案的缺陷。 首先,我们可以同意人类可以作为UTM工作。这意味着如果我们这样做
然后
我可以用这个文本代替css( Rule 110 ):
指导我的行动和结果是一样的。这意味着这个文本是utm?不,这是其他UTM(人或计算机)只能读取和运行的输入(描述)。点击就足以运行任何utm。 css缺少的关键部分是能够以任意方式改变自己的状态,如果css可以生成点击,那么它就是utm。关于你的点击是css的“crank”的说法并不准确,因为css真正的“crank”是运行它的布局引擎,它应该足以证明css是utm。 |
![]() |
7
-25
css不是一种编程语言,因此图灵完整性问题是一个毫无意义的问题。如果像ie6那样将编程扩展添加到css中,那么新的合成就完全不同了。 css仅仅是对样式的描述;它没有任何逻辑,而且它的结构是扁平的。 |