副作用和深奥的语言

时间:2012-12-25 16:12:13

标签: side-effects esoteric-languages

作为comments on this question中讨论的结果。我想问一下副作用和深奥功能之间的关系。 specifficaly:

1)您是否可以使用ook / brainfuck访问gpu(并导致图形副作用)?

2)你能用空格进行系统调用吗?

3)基本上归结为,你能用任何图灵完整的语言引起所有常见的副作用吗?

4)红利问题:如果有可能,你能提供一个工作示例/代码的链接吗?

2 个答案:

答案 0 :(得分:6)

bmargulies的评论是关于一般性问题的。 Turing-complete在技术上意味着该语言可用于模拟单拍图灵机。实际上,这意味着您可以在图灵完备语言Y上模拟图灵完备语言X的任何计算。但是,您所谈论的所有事情都不是计算 - 它们是系统接口。要在特定系统中执行特定操作,您需要具有接口。这些语言不提供通用接口;它们提供了一些系统调用,我们将在下面看到。

让我们用一个弱的比喻。考虑一下航天飞机。航天飞机的每次计算都可以用你的iPhone完成(也许不及时);但它需要一个特殊用途的系统来实际发射火箭并​​断开助推器。您可以为iPhone编写一个应用程序,其输出是宇航员的指示,例如“Fire starboard rocket 10秒!”然后乘坐那个航天飞机。但你不能只是将你的iPhone插入航天飞机的码头。

所以,正如您所料,所有问题的答案分别为:

  1. “不。但你可以,如果你想破解它。”
  2. “不。但你可以,如果你想破解它。”
  3. “不。但你可以,如果你想破解它们。”
  4. “去破解它!”
  5. 空格是一种解释型语言,除了向控制台读取和写入字符外,该语言不提供任何系统集成。 (它也不会生成传统的汇编代码,您可以根据原始问题将其集成到C程序中。您需要使用系统调用从C程序运行解释器并将输出返回到您的进程。效率!)语言和解释器是开源的,因此从技术上讲,您可以通过解释器修改语言以支持通用OS调用。

    Brainfuck实际上是编译的,所以从理论上讲,如果你感觉很好,你可以更容易地把它包含在其他程序中。像空格一样,它只支持读写字符。修改Brainfuck以支持完整的系统调用将是有趣的(也许值得一篇论文)。

    这是编译器的源代码。有它:

    希望有所帮助!

答案 1 :(得分:1)

你总是可以编写一个包装器来解释ook / brainfuck / whitespace / etc.程序的输出,作为访问gpu / make系统调用/ brew咖啡/其他的命令。

但不是,没有内置机制来做脑筋中的任何这些事情,我不相信你提到的任何其他语言都有。 “图灵完备”只是意味着语言理论上可以计算普通计算机可以计算的任何东西。这并不意味着语言必然提供了一种机制来完成计算机可能具有的任何非计算性事物,例如绘制图形,播放声音或者实际上是在冲泡咖啡。