Programming languages 有可能创建一种通用的中间编程语言吗?

Programming languages 有可能创建一种通用的中间编程语言吗?,programming-languages,Programming Languages,我的意思是,有没有一种语言,或者说有没有一种语言可以被设计成所有高级编程语言都可以被编译成这种中间语言 这不包括机器语言。作为通用编程语言的所有通用语言 如果一种语言的任何程序可以编译成另一种语言的程序,那么两种语言(或机器)被认为是图灵等价的。如果一种语言的图灵机等价于图灵机,那么它就是图灵机完备的 早期曾有几次努力将计算的概念形式化;图灵机是一种,lambda演算是另一种,一般递归函数类是第三种。阿隆佐·丘奇和艾伦·图灵证明了所有这三种形式化都是图灵等价的;图灵机的任何程序都可以编译为lam

我的意思是,有没有一种语言,或者说有没有一种语言可以被设计成所有高级编程语言都可以被编译成这种中间语言


这不包括机器语言。

作为通用编程语言的所有通用语言

如果一种语言的任何程序可以编译成另一种语言的程序,那么两种语言(或机器)被认为是图灵等价的。如果一种语言的图灵机等价于图灵机,那么它就是图灵机完备的

早期曾有几次努力将计算的概念形式化;图灵机是一种,lambda演算是另一种,一般递归函数类是第三种。阿隆佐·丘奇和艾伦·图灵证明了所有这三种形式化都是图灵等价的;图灵机的任何程序都可以编译为lambda演算,反之亦然,任何通用递归函数都可以由lambda演算或图灵机实现,反之亦然

假设可以在任何形式系统中表示的任何计算都可以转换为可以在图灵机器上运行的程序;或者等效地,可以用非类型化的lambda演算表示,或者是基于上述等效的一般递归

这仅仅是一个假设,无法正式证明,因为无法正式描述受其约束的计算类别(如果不通过将其定义为可由图灵机器执行的计算类别进行循环推理),但从来没有任何一个计算模型是不可能用图灵机器计算的

因为您可以用几乎任何通用语言编写图灵机的模拟器(或lambda演算的实现),同样,这些语言也可以编译成运行在图灵机上的程序,所以几乎所有通用语言都是图灵完备的

然而,有些语言不是图灵完备的;正则表达式就是一个例子。它们可以被图灵机模拟,但它们不能反过来模拟图灵机

请注意,这些都不能提高效率或访问主机系统资源;仅仅是相同的计算可以被表达,并且它最终将提供相同的答案。有些语言是图灵完备的,其中存在一些问题。一些语言提供对外部资源的访问,如文件系统、I/O、网络等,而另一些语言只允许在内存中进行计算,但在图灵完成的任何语言中,都可以添加一个API或操作内存的方法,允许它访问这些外部资源,因此,缺乏对系统资源的访问不是一个基本限制,只是一个实现限制

作为一个更实际的问题,有几种语言被设计为可移植的,中间语言是编译的目标。这是一个常用的例子,也是另一个。此外,语言运行时的任何字节码都是这样工作的,对于许多语言来说,是编译目标,而对于其他语言来说则是另一个目标。最后,许多语言都编译成C,因为C编译器广泛可用,而且代码比机器代码更易于移植


最近,随着web的出现,JavaScript成为每种web浏览器都可以使用的语言,JavaScript已经成为一种流行的编译目标,既适用于设计为可编译为JavaScript的语言,也适用于设计为可编译为机器代码的现有语言,通过类似的项目。认识到这一用法,人们一直在努力指定JavaScript的一个子集,使用更严格的规则,称为,以使编译成为更好的目标,同时仍然允许相同的代码与不了解asm.js的常规JavaScript引擎向后兼容工作。

这一点尚不清楚。而且可能是基于意见,因为“高层”没有客观的定义。例如,LLVM算数吗?@OliverCharlesworth我说得很清楚,它不可能是机器语言。LLVM不是机器语言,从这个意义上说,没有一台机器可以在本地运行它。@OliverCharlesworth这与所有非机器语言都不是机器语言的意义是一样的。是的,LLVM是一个候选。那么你是说所有图灵完整语言都可以相互编译?@KthProg:任何图灵等价系统都可以模拟任何其他图灵等价系统。@OliverCharlesworth你突然也知道答案了。即使你可能投了反对票,并试图以基于意见的方式结束这个问题。@KthProg:我已经知道答案了。我没有投反对票,但我投了结束票(因为不清楚您试图用机器语言来区分什么…),但鉴于您似乎在说这是您问题的可接受答案,很高兴将其视为已澄清的问题,因此将撤回结束投票@OliverCharlesworth好的谢谢!无论如何,如果一个可以模拟另一个,那么编译似乎是可能的。