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