Troff Turing完成了吗?


9

Troff支持使用.de和分支使用宏定义.if(请参见Troff用户手册的第5和6页)。在这两个方面,它非常类似于TeX。但是,我不了解用Troff编写的高度复杂的程序(与TikZ for TeX不同)。Troff Turing完成了吗?

Answers:


12

ESR的Unix编程艺术声称是:

我们将在第18章中更详细地研究troff。就目前而言,足以说明这是一个命令式迷你语言的一个很好的例子,它是一个成熟的解释器(它有条件和递归,但没有循环;它是图灵完备的)。

(“偶然地”相对于m4,被称为“故意图灵完成的。”)


13

是的,troff已完成Turing。它支持任意递归和条件分支,这就足够了。它还具有寄存器和其他各种存储数据的方式,这又为您提供了另一条路径。

图灵完整性并不意味着高度复杂的程序是可行的 -只是它们在某种程度上在某种程度上可以删除是理论上可行的-并且它的缺失也并不意味着它们并非如此,因此troff都不是图灵完全的,也不是图灵完整的。缺少复杂的程序并不能就此提出任何建议。


图灵完整性通常不是对用户有用的属性。这意味着您可以用它模拟图灵机,而不是您想要的,也不是从中获得的输出就像您希望阅读的内容一样。输入或输出可能只是一个数字,甚至是某个东西出现的次数,而不是有用的东西,而最终要模拟的那种机器及其程序通常很难理解。

许多语言和系统顺带图灵完备的,但不能合理地适用于该子集的任何实际的编程(例如,康威的生命游戏或CSS),以及某些语言中真正的编程有用的都没有图灵完备的(例如,阿格达)。真正的决定性特征是您可以

  • 永远走下去
  • 记住尽可能多的数据
  • 选择下一步,如果有的话

通常,那些特性-特别是非终止特性-实际上是不希望有的,可能包括鳟鱼。在理论计算机科学和语言设计之外,尽管图灵的完整性很吸引人,但实际上在当时并不是一个非常有趣的特性。


是的,当然,这本身并不是一件非常有用的事情,但它仍然很有趣-例如,即使mov指令也是图灵完成的。
cutculus

4
@theindigamer- x86mov指令是图灵完成的。(由于寻址方式允许您使用查找表,并且相同的助记符用于加载,存储和立即进行移动注册。)在许多其他具有mov指令的ISA (例如ARM)上,这只是reg-reg移动并不完整。(尽管在ARM上它可以进行移位/旋转。)此外,实际上,您需要jmpmov指令块周围创建一个循环,除非您处于16位模式下,其中指令指针可以在64k代码段中环绕以进行循环。隐式循环。
彼得·科德斯


2
@PeterCordes:啊;在过去,有一些具有内存映射的ALU的MOV体系结构,而IP只是另一个寄存器,因此JMP是另一个MOV。
约书亚

1
@Joshua:有趣的事实:32位ARM确实将PC公开为16个通用整数寄存器之一。 push {r4, lr}/ pop {r4,pc}在需要保存/恢复一个调用保留寄存器并保持堆栈对齐的函数中很常见:它们还保存链接reg并将其弹出回到程序计数器中以返回。(32位ARM的存储/加载多个指令使用位域指示要存储/加载的寄存器。)是的,您可以将PC用作a mov或任何指令的目标。不过,我不知道这在过去很普遍。但是我听说过交通触发的ISA。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.