回答
每个通用语言Turing-complete是一种通用编程语言。
如果任何一种语言的程序可以编译为另一种语言的程序,那么两种语言(或机器)被认为是图灵等价物。一种语言是图灵完备的,如果它是图灵相当于一个图灵机。
有几个早期的努力来形式化计算的概念;一个是图灵机,另一个是拉姆达算法,另一个是一般递归函数类。 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,网络等外部资源的访问,而另一些语言只允许在内存中进行计算,但在任何Turing完成的语言中,都可以添加API或操纵内存的方法允许它访问这些外部资源,所以缺乏对系统资源的访问不是一个根本的限制,只是实施的限制。
作为一个更实际的问题,有几种语言被设计为可移植的,作为编译目标的中间语言。 LLVM IR是一个常用的例子,C--是另一个例子。另外,语言运行时的任何字节码都是这样操作的,JVM是许多语言的编译目标,CLR是另一种语言。最后,许多语言都编译为C语言,因为C编译器已经广泛使用,并且代码比机器代码更具可移植性。
最近,随着网络和JavaScript成为各种浏览器中可用的语言的出现,JavaScript已成为编译的热门目标,无论是用于编译为JavaScript的语言,如CoffeeScript和Dart,还包括最初设计用于编译为机器代码的现有语言,通过像Emscripten这样的项目。认识到这一用法,人们一直在努力指定一个JavaScript子集,并使用更严格的规则(称为asm.js),它为编译提供了更好的目标,同时仍允许相同的代码向后兼容常规JavaScript引擎,不知道任何关于asm.js.
- 1. 是否可以将低级语言转换为高级语言?
- 2. 是否可以使用WIX创建多语言安装程序?
- 3. 是否可以使用三种编程语言编写一个程序?
- 4. 是否可以用高级语言实现编译器?
- 5. 创建编程语言
- 6. 是否可以在表达式语言中创建日期值?
- 7. 以不同编程语言访问的套接字是否可以通信?
- 8. 是否可以创建通用ADT的类型级表示?
- 9. SharpDevelop:您是否可以为非.NET语言创建语言插件
- 10. 是否有高级语言编译为低级语言(如C)的术语?
- 11. 是否可以通过编程创建TShape控件?
- 12. 是否可以创建一个包含普通列和超级列的列族?
- 13. 是否可以创建多语言帮助(.chm)文件?
- 14. 是否有编程语言来创建UML图?
- 15. 用C#创建编程语言
- 16. 是否可以创建一个通用约束方法?
- 17. 是否可以使用另一个进程创建的HWND?
- 18. 什么是可以编译的最高级别的语言?
- 19. 是否可以编写一个创建方法的方法?
- 20. 标准来确定它是否是一个编程语言
- 21. 是否可以创建一个Windows 10 Snackbar应用程序?
- 22. 是否可以使用Erlang和C语言混合编程以高比例使用C语言?
- 23. 可以以编程方式安装Windows Phone语言语言吗?
- 24. 通用编程语言没有堆是可行的吗?
- 25. 是否可以使用语言环境编写成功消息?
- 26. 是否可以使用AWK编写语言解析器?
- 27. 一个R编程语言创建OLAP多维数据集
- 28. 创建编程语言问题
- 29. 如何创建.Net编程语言?
- 30. 编程语言,您可以通过引用数组元素。 (点)
这还不清楚。而且可能以意见为基础,因为没有“高层次”的客观定义。例如LLVM计数? –
@OliverCharlesworth我明确表示,它不能是机器语言。 – KthProg
LLVM不是机器语言,因为没有本机运行它的机器。 –