编译语言和解释语言之间有什么区别?
在阅读了有关此主题的一些材料之后,我仍然不确定编译语言和解释语言之间的区别是什么。我被告知这是Java和JavaScript之间的区别之一。有人可以帮我理解它吗?
在阅读了有关此主题的一些材料之后,我仍然不确定编译语言和解释语言之间的区别是什么。我被告知这是Java和JavaScript之间的区别之一。有人可以帮我理解它吗?
编译语言和解释语言之间有什么区别?
区别不在于语言;而在于语言。它在实施中。
从我的系统中得到了它,这里有一个答案:
在编译的实现中,原始程序被转换为本机机器指令,这些指令由硬件直接执行。
在解释型实现中,原始程序被翻译成其他内容。另一个程序称为“解释器”,然后检查“其他内容”并执行所需的任何操作。根据语言及其实现,有各种形式的“其他东西”。从更受欢迎到不那么受欢迎,“其他东西”可能是
虚拟机的二进制指令,通常称为字节码,就像在Lua,Python,Ruby,Smalltalk和许多其他系统中所做的那样(该方法在1970年代由UCSD P-system和UCSD Pascal推广)
原始程序的树状表示形式,例如抽象语法树,就像许多原型或教育解释器所做的那样
源程序的标记化表示形式,类似于 Tcl
源程序的字符,如 MINT 和 TRAC 中所做的那样
使问题复杂化的一件事是,可以将字节码翻译(编译)为本机机器指令。因此,一个成功的集成实现可能最终会获得一个编译器。如果编译器在后台动态运行,则它通常称为实时编译器或 JIT 编译器。JIT已经为Java,JavaScript,Lua和许多其他语言开发了。此时,您可以拥有一个混合实现,其中解释一些代码并编译一些代码。
Java和JavaScript是一个相当糟糕的例子来证明这种差异,因为两者都是解释型语言。Java(解释型)和C(或C++)(编译)可能是一个更好的例子。
为什么使用带划线的文本?正如这个答案正确指出的那样,解释/编译是关于一种语言的具体实现,而不是关于语言本身。虽然像“C是一种编译语言”这样的陈述通常是正确的,但没有什么可以阻止某人编写C语言解释器。事实上,C语言的解释器确实存在。
基本上,编译后的代码可以直接由计算机的CPU执行。也就是说,可执行代码是用 CPU 的“本机”语言(汇编语言)指定的。
但是,解释型语言的代码必须在运行时从任何格式转换为CPU机器指令。此翻译由口译员完成。
另一种说法是,解释型语言是在程序执行时将代码逐步翻译成机器指令,而编译语言在程序执行之前已将代码翻译。