【问题标题】:Why would a Scripting language be made 'purposefully Turing non-complete'? [closed]为什么要使脚本语言“故意图灵不完整”? [关闭]
【发布时间】:2015-02-03 00:00:23
【问题描述】:

所以,我在他们的官方文档中阅读了有关比特币脚本的内容,发现这一行:“脚本很简单,基于堆栈,并且从左到右处理。它是故意不是图灵完备的,没有循环。“我试图努力推理,但不明白为什么有人会制造一种语言“故意非图灵完备” .这是什么原因?如果一种语言成为图灵完备的会发生什么? 进一步扩展,“with no loops”是否与非图灵完备的脚本有关?

【问题讨论】:

  • 投反对票的人,请告诉我投反对票的原因。
  • 您可能被否决了,因为您的问题对于 Stack Overflow 而言可能过于宽泛,或者主要基于意见,根据官方指南,这将使其偏离主题。 Stack Overflow 上最好的问题是提出一个问题并有一个或少数几个客观正确答案的问题。

标签: scripting programming-languages bitcoin turing-machines turing-complete


【解决方案1】:

可能的原因:

  • 安全性:如果没有循环程序将始终终止。用户不能挂断解释器。如果,此外还有脚本大小的限制,你可以有相当严格的时间限制。没有循环的语言的另一个例子是谷歌查询。如果谷歌允许循环,用户将能够杀死他们的服务器
  • 简单:没有循环使非程序员更容易阅读和编写语言
  • 不需要:如果没有业务需要,那何必呢?

【讨论】:

  • 我想知道是否仍然有可能溢出这个脚本解释器的堆栈;-)
【解决方案2】:

主要原因是比特币脚本在处理/验证交易时由所有矿工执行,我们不希望它们陷入无限循环。 另一个原因是,根据 Mike Hearn 的message,比特币脚本是 Satoshi 的事后想法,试图将他想到的几种交易类型结合起来。这也许可以解释这样一个事实,即它设计得不是很好,表达能力也很差。

Ethereum 有一种不同的方法,它允许任意循环,但让用户为执行步骤付费。

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2020-07-17
    • 2011-04-07
    • 2014-06-30
    • 2011-03-12
    • 2016-02-23
    • 2012-03-14
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多