Language agnostic 一种语言可以是图灵完备的,但在其他方面是不完备的吗?

Language agnostic 一种语言可以是图灵完备的,但在其他方面是不完备的吗?,language-agnostic,compiler-construction,programming-languages,language-theory,turing-complete,Language Agnostic,Compiler Construction,Programming Languages,Language Theory,Turing Complete,例如,在编写操作系统时,是否存在无法用图灵完全语言完成的某些事情?是的,您可以使用不允许直接操作硬件的语言。例如,使用BourneShell编写操作系统是很困难的。但这些限制比你想象的要少。操作系统已经用标准的ML、Scheme甚至是XML编写 图灵完备是完备的最一般形式定义。某些应用程序需要一些语言特性,但这些特性不符合正式定义 例如,图形功能、生成后台进程的能力、保持状态的能力以及连接到网络的能力都是有用的特性,但与语言的图灵完整性无关。所以Google App Engine上的Python

例如,在编写操作系统时,是否存在无法用图灵完全语言完成的某些事情?

是的,您可以使用不允许直接操作硬件的语言。例如,使用BourneShell编写操作系统是很困难的。但这些限制比你想象的要少。操作系统已经用标准的ML、Scheme甚至是XML编写

图灵完备是完备的最一般形式定义。某些应用程序需要一些语言特性,但这些特性不符合正式定义


例如,图形功能、生成后台进程的能力、保持状态的能力以及连接到网络的能力都是有用的特性,但与语言的图灵完整性无关。所以Google App Engine上的Python或运行在沙箱中的Java小程序仍然是图灵完成的


您会注意到,在许多情况下,这些类型的功能都是由库提供的,而不是由核心语言提供的。

否。或者至少如果您发现了一种与

然而,有些语言是图灵完备的,但在这些语言中,编写某些程序是一件非常痛苦的事情,例如,FORTRAN中的字符串处理、COBOL中的数值编程、sed中的整数算术,以及x86汇编程序中的几乎所有程序


当然还有。如果你说的是语用学,那么当然。。。你可以想象一种没有读写文件能力的编程语言(例如,一种可以计算任何整数函数的语言,但仅此而已)仅仅因为一种语言不能操作我的烤面包机并不意味着它不是图灵完整的,但它确实意味着它不能做一些事情,所以我不确定这种区别有多“重要”或有用。

语言可以或不能做一些事情,比如子例程、递归、自定义数据类型、循环、定义类、goto、,等等。一套这样的语言特征使它完整与否。例如,若并没有循环、GOTO和子例程,那个么语言是不完整的——你们不能执行任何循环操作。语言完整性是一个非常理论化和科学化的问题。例如,即使您的语言不允许递归调用函数,但允许函数指针,也证明了这一点—您可以模拟递归,即使用y-combinator

像处理文件和硬件这样的东西通常不是语言的一部分。要完成任何编程任务,您需要的不仅仅是语言。您需要您的程序工作的环境。在x86AS语言中,指令“int”只有一个参数,但在执行“int21h”时,由操作系统执行某些操作

语言只是需要某种与环境沟通的方式,并且是完整的——然后取决于环境来处理它。在x86 asm中写入“mov ax,bx”是有效的,但执行此操作取决于您的CPU

在其他方面是不完整的-很简单,只需定义您自己的完整性版本。i、 我讨厌在没有基于类的OOP的情况下工作,所以让我们定义一下,如果语言没有支持基于类的OOP的语言特性,那么该语言就不是Feldman完整的。好吧,那么,C和Javascript不是F完整的。您仍然可以用这些语言做任何事情,甚至在某种程度上模拟基于类的OOP

关于操作系统,您仍然需要运行指令的处理器和将语言转换为CPU指令的编译器。我可以想象编译器将任何东西翻译成机器代码。下面是有效的JS代码

for(var i=0;i<10;i++){
 mov("ax",i);
 int(0x21);
}
for(var i=0;i根据上下文,“用一种语言完成某件事”对不同的人意味着不同的事情。图灵就是其中之一,他非常准确地定义了他所说的“完成”的含义

如果一种语言(或一台理论机器)是图灵完全的,就没有它不能做的图灵计算。这并不意味着该语言是万能的,只是它擅长求和。有许多“事情”不是图灵计算,因此图灵完全计算机可能无法做

“成为一个操作系统”不是图灵计算。要成为一个操作系统,你需要做的不仅仅是计算。你还需要操作硬件

如果有一种图灵完整语言,再加上一组用于执行您需要的所有硬件操作的操作,包括适当的输入和时间概念,您可以编写一个操作系统。或者我应该说,编写一个操作系统是可能的。您个人能否做到这一点取决于该语言的易用性和物理limi图灵定义忽略的变量,例如生成的程序是否实际适合并在您希望它运行的设备内存中执行,以及是否在实际时间内运行

忽略实际限制-是的,您可以用任何图灵完整语言编写操作系统,前提是该语言也有足够的操作来驱动硬件。“库调用”,如果你想采取实用的CS方法来区分语言和库。图灵没有这样的区别,因为他的计算模型没有“调用”的概念不管怎样。你还需要解决引导问题——要么你的硬件必须直接运行你正在编写的语言,要么你需要一个编译器转换成硬件正在运行的语言,要么你需要一个用硬件运行的语言编写的解释器。同样,图灵忽略了这一切,因为他的计算模型使用了abstract硬件,而编写操作系统完全是关于硬件的

在英语(而不是compscisake)中,人们常说一种语言“缺乏某些特征”,因此与另一种具有这些特征的语言相比,它可能是“不完整的”-