作为关于这个问题的评论中讨论的一个分支。我想问一下副作用和深奥功能之间的关系。具体来说:
1)你可以使用 ook/brainfuck 访问 gpu(并导致图形副作用)吗?
2)你可以使用空格进行系统调用吗?
3)本质上归结为,您可以使用任何图灵完整语言引起所有常见的副作用吗?
4)额外问题:如果可能的话,你能提供一个工作示例/代码的链接吗?
作为关于这个问题的评论中讨论的一个分支。我想问一下副作用和深奥功能之间的关系。具体来说:
1)你可以使用 ook/brainfuck 访问 gpu(并导致图形副作用)吗?
2)你可以使用空格进行系统调用吗?
3)本质上归结为,您可以使用任何图灵完整语言引起所有常见的副作用吗?
4)额外问题:如果可能的话,你能提供一个工作示例/代码的链接吗?
bmargulies 的评论是关于一般问题的。图灵完备在技术上意味着该语言可用于模拟单磁带图灵机。实际上,这意味着您可以在图灵完备的语言 Y 上模拟图灵完备的语言 X 上的任何计算。但是,您所说的所有东西都不是计算——它们是系统接口。要在特定系统中做特定的事情,你需要有一个接口。这些语言不提供通用接口;它们提供了一些系统调用,我们将在下面看到。
让我们用一个弱类比。考虑航天飞机。航天飞机上的每一个计算都可以用你的 iPhone 完成(也许不是及时);但要真正发射火箭和断开助推器,需要一个特殊用途的系统。你可以为 iPhone 编写一个应用程序,它的输出是给宇航员的指令,比如“发射右舷火箭 10 秒!” 并以这种方式飞行航天飞机。但是你不能只把你的 iPhone 插到航天飞机的码头上。
因此,正如您所料,您所有问题的答案分别是:
whitespace 是一种解释型语言,除了向控制台读写字符外,该语言不提供任何系统集成。(它也不会产生传统的汇编代码,您可以根据该原始问题轻松地将其集成到 C 程序中。您需要使用系统调用从 C 程序运行解释器并将输出返回到您的进程。非常高度效率!)语言和解释器是开源的,因此从技术上讲,您可以修改语言以通过解释器支持通用操作系统调用。
Brainfuck 实际上可以编译,所以理论上你可以更容易地将它包含在其他程序中,如果你觉得很有趣的话。和空格一样,它只支持读写字符。修改 Brainfuck 以支持完整的系统调用会很有趣(也许值得一篇论文)。
这是编译器的源代码。有它:
希望有帮助!
您总是可以编写一个包装器,将 ook / brainfuck / whitespace / etc. 程序的输出解释为访问 gpu / 进行系统调用 / 煮咖啡 / 其他任何命令的命令。
但是不,没有内置机制可以在brainfuck中做任何这些事情,我不相信你提到的任何其他语言也有。“图灵完备”只是意味着该语言在理论上可以计算任何普通计算机可以计算的东西。这并不意味着该语言必须提供一种机制来执行计算机也可能执行的任何非计算操作,例如绘制图形、播放声音,或者实际上是煮咖啡。