Troff支持使用.de
和分支使用宏定义.if
(请参见Troff用户手册的第5和6页)。在这两个方面,它非常类似于TeX。但是,我不了解用Troff编写的高度复杂的程序(与TikZ for TeX不同)。Troff Turing完成了吗?
Troff支持使用.de
和分支使用宏定义.if
(请参见Troff用户手册的第5和6页)。在这两个方面,它非常类似于TeX。但是,我不了解用Troff编写的高度复杂的程序(与TikZ for TeX不同)。Troff Turing完成了吗?
Answers:
是的,troff已完成Turing。它支持任意递归和条件分支,这就足够了。它还具有寄存器和其他各种存储数据的方式,这又为您提供了另一条路径。
图灵完整性并不意味着高度复杂的程序是可行的 -只是它们在某种程度上在某种程度上可以删除是理论上可行的-并且它的缺失也并不意味着它们并非如此,因此troff都不是图灵完全的,也不是图灵完整的。缺少复杂的程序并不能就此提出任何建议。
图灵完整性通常不是对用户有用的属性。这意味着您可以用它来模拟图灵机,而不是您想要的,也不是从中获得的输出就像您希望阅读的内容一样。输入或输出可能只是一个数字,甚至是某个东西出现的次数,而不是有用的东西,而最终要模拟的那种机器及其程序通常很难理解。
许多语言和系统顺带图灵完备的,但不能合理地适用于该子集的任何实际的编程(例如,康威的生命游戏或CSS),以及某些语言中是真正的编程有用的都没有图灵完备的(例如,阿格达)。真正的决定性特征是您可以
通常,那些特性-特别是非终止特性-实际上是不希望有的,可能包括鳟鱼。在理论计算机科学和语言设计之外,尽管图灵的完整性很吸引人,但实际上在当时并不是一个非常有趣的特性。
mov
指令是图灵完成的。(由于寻址方式允许您使用查找表,并且相同的助记符用于加载,存储和立即进行移动注册。)在许多其他具有mov
指令的ISA (例如ARM)上,这只是reg-reg移动并不完整。(尽管在ARM上它可以进行移位/旋转。)此外,实际上,您需要jmp
在mov
指令块周围创建一个循环,除非您处于16位模式下,其中指令指针可以在64k代码段中环绕以进行循环。隐式循环。
push {r4, lr}
/ pop {r4,pc}
在需要保存/恢复一个调用保留寄存器并保持堆栈对齐的函数中很常见:它们还保存链接reg并将其弹出回到程序计数器中以返回。(32位ARM的存储/加载多个指令使用位域指示要存储/加载的寄存器。)是的,您可以将PC用作a mov
或任何指令的目标。不过,我不知道这在过去很普遍。但是我听说过交通触发的ISA。