gpt4 book ai didi

programming-languages - 是否有可能创建一种通用的中间编程语言?

转载 作者:行者123 更新时间:2023-12-04 02:20:42 26 4
gpt4 key购买 nike

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

这不包括机器语言。

最佳答案

所有通用语言即 Turing-complete是一种通用编程语言。

如果两种语言(或机器)的任何程序都可以编译成另一种的程序,则两种语言(或机器)被认为是图灵等价的。如果一种语言与图灵机是图灵等价的,则该语言是图灵完备的。

为了形式化计算的概念,有一些早期的努力;图灵机是其中之一,lambda 演算是另一个,一般递归函数类是第三个。 Alonzo Church 和 Alan Turing 证明了所有这三种形式化都是图灵等价的;图灵机的任何程序都可以编译为 lambda 演算,反之亦然,因为任何一般递归函数都可以由 lambda 演算或图灵机实现,反之亦然。

Church-Turing thesis假设可以在任何形式系统中表达的任何计算都可以转换为可以在图灵机上运行的程序;或等效地,可以在无类型 lambda 演算中表示,或者是一般递归的,基于上述等价性。

这只是一个假设,无法正式证明,因为没有办法正式描述受其影响的计算类别(没有循环推理,将它们定义为图灵可以执行的计算类别机),但从未提出过任何无法使用图灵机计算的计算模型。

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

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

请注意,这些都没有解决效率或对主机系统资源的访问问题;只是可以表达相同的计算,并且它最终会提供相同的答案。有一些图灵完备的语言存在一些问题 cannot be computed at the same asymptotic efficiency as in other languages .有些语言提供对外部资源的访问,如文件系统、I/O、网络等,而其他语言只允许在内存中进行计算,但在任何图灵完备的语言中,都可以添加 API 或操作内存的方法这允许它访问那些外部资源,因此无法访问系统资源不是根本限制,只是实现的限制。

作为一个更实际的问题,有几种语言被设计为可移植的中间语言,它们是编译的目标。 LLVM IR是一个常用的例子,C--是另一个。此外,语言运行时的任何字节码都以这种方式运行,JVM是多种语言的编译目标,CLR是另一个。最后,许多语言都编译为 C,因为 C 编译器广泛可用,而且代码比机器代码更可移植。

最近,随着 Web 的出现和 JavaScript 成为一种可在每个 Web 浏览器中使用的语言,JavaScript 已成为编译的流行目标,对于旨在编译为 JavaScript 的语言,如 CoffeeScriptDart ,还有最初设计为通过 Emscripten 等项目编译为机器代码的现有语言。 .认识到这种用法,人们努力指定 JavaScript 的一个子集,具有更严格的规则,称为 asm.js ,这为编译提供了更好的目标,同时仍然允许相同的代码与对 asm.js 一无所知的常规 JavaScript 引擎向后兼容地工作。

关于programming-languages - 是否有可能创建一种通用的中间编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30141184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com