【问题标题】:Can these sorts of programs exist in every Turing-complete language?这些程序可以存在于每一种图灵完备的语言中吗?
【发布时间】:2011-02-05 18:17:19
【问题描述】:

在每一种图灵完备语言中,是否有可能创建一个工作

  • 自己的编译器,它首先在用其他语言编写的解释器上运行,然后编译它自己的源代码? (Bootstrapping)

  • 标准兼容 C++ 编译器,输出二进制文件,例如:Windows?

  • 正则表达式解析器和评估器?

  • 魔兽世界克隆? (假设语言获得了必要的 API 绑定,例如 OpenGL 和 WoW 源代码可用)

(这里的一切都是理论上的)

我们以 Brainf*ck 为例。

【问题讨论】:

  • 我目前正在使用 sed 实现 WoW 克隆,我正在寻找一些感兴趣的开发人员
  • 据我所知听起来很有趣(不太了解 sed)如果你切换到 8086 汇编器,我在 :P
  • 我假设您的意思是解释器或执行者,因为编译器是 VonNuemann 架构相关的概念?
  • 嗯,你明白所有“输出”都高度依赖于架构和实现吗?
  • 另外,即使是“API”的概念也不一定像图灵机那样有意义?

标签: language-agnostic turing-complete


【解决方案1】:

图灵完备只表达计算能力,与I/O能力无关!

【讨论】:

  • 典型的 StackOverflow:错误的答案被无意识地投票赞成,唯一正确的答案默默无闻。
【解决方案2】:

不,图灵完备性与 I/O 和硬件无关。 但是,您可以通过使用变量(或“内存磁带”)来假装存在 I/O、硬件系统和图形系统。在 BF 中,您可以使用前 2 个单元格(xy)作为“假装”屏幕分辨率,然后使用另一个 x >y 个单元格表示屏幕上的所有像素,然后下一个单元格 (n) 表示“假装”文件系统大小,然后下一个 n 个单元格表示文件系统内容...

【讨论】:

    【解决方案3】:

    图灵完备真正需要的是你可以做简单的数学运算,有一些变量,并且可以做一个while循环。或任何数量的等效事物。如果你想做真正的程序,你需要更多(特别是系统调用)并且你也必须担心效率(图灵机可能非常慢......)理论上图灵等效系统之间没有区别,但在实践中有。

    如果有人在BF做魔兽客户端,我会非常印象深刻!

    【讨论】:

      【解决方案4】:

      每种图灵完备语言都可以计算相同的函数集。 因此,图灵完备语言可以完成您编写的所有工作,因为这些内容是使用其他图灵完备语言计算的。

      【讨论】:

        【解决方案5】:

        理论上,是的。但一个更有趣的问题是,如果给定某种“深奥”的编程语言,它实际上是否可行。

        【讨论】:

          【解决方案6】:

          在每一种图灵完备语言中,是否有可能创建一个工作...

          如果一种图灵完备的语言可以做到,那么它们都可以。从这个意义上说,它们都同样“强大”。由于您描述的所有内容都已经存在于至少一种图灵完备语言中,因此这些程序中的任何一个都可以用任何其他图灵完备语言编写。

          但是,仅仅因为某事可能并不意味着它容易,甚至可行那是一个非常重要的区别,它是不同编程语言存在的关键。他们并非都同样擅长制作特定类型的软件——如果他们擅长,我们只需要一种语言!

          【讨论】:

          • 我不明白为什么它不可行,如果它是可能的,那不意味着它是可行的吗?你有例子吗?
          • @John +1。问:为什么有多个数据库? A:因为他们都很烂。
          • @LB:可能性不等于可行性。这是一个简单的例子。想象一下图灵完备的语言,其中写下指令“将值 x 分配给符号 y”需要比整个世界更多的内存。这样的语言使得编写图灵完备的程序成为可能,但编写它们并不可行,因为实际上编码你想要的信息是不切实际的。
          • SQL 不是图灵完备的,可能是 PL/SQL 之类的扩展
          • @John:还有潜在的性能问题。它是否算作一个帧速率约为每世纪 15 帧的 WoW 克隆?或者如果你不能和朋友一起去突袭,你会说它不是真正的克隆?
          【解决方案7】:

          可以用一种图灵完备语言实现的任何算法都可以用任何其他语言实现。您的问题更多地与操作系统服务和 API 有关,这些服务和 API 必须通过相关语言提供。

          简而言之,从形式语言的角度来看,以上所有问题的答案都是肯定的。

          【讨论】:

            【解决方案8】:

            是的,当然,所有这些。毕竟,这就是“图灵完备”的含义:它可以计算所有可以计算的东西。

            【讨论】:

            • 我现在找不到支持这一点的参考资料,但 IIRC 是否存在图灵机无法解决的可计算问题是一个悬而未决的问题。我认为这主要是由于对“可计算”的实际含义的模糊定义。
            • @rmeador Turing 精确地发明了他的理想化机器,以便他可以推理什么是可计算的,什么是不可计算的。介绍 TM 概念的论文被称为“On Computable Numbers...”
            • @Neil Butterworth - 但是图灵在可计算性方面的工作确实涉及“挥手”方面,因为它假设任何可计算的东西都可以由图灵机计算,或者等效地,它定义一种可计算的算法,作为图灵机程序存在的算法。 Kleene 和 Church 的工作是等价的,正如 Kleene 所说,这一切都有些模糊和直观。
            • @Daniel:他们教我“Church-Turing Thesis”,它说任何可以合理描述为计算的东西都可以用图灵机或等效形式来表示。到目前为止,还没有人提出反例,但除非我们能找到“可计算”的精确定义,否则无法证明它。
            • @David Thornley - 确切地说,它也被称为“猜想”。它“可计算”的精确定义,尚未受到挑战,但它留下了一种牵强的可能性,即某种有用的算法可计算性形式可能需要图灵机或(等效地) Church lambda 演算。
            猜你喜欢
            • 2011-11-11
            • 2017-01-11
            • 1970-01-01
            • 2012-06-08
            • 2010-10-03
            • 2012-11-29
            • 2011-04-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多