在阅读了关于这个主题的一些材料之后,我仍然不确定编译语言和解释语言之间的区别是什么。我被告知这是Java和JavaScript之间的差异之一。请有人帮我理解吗?
答案 0 :(得分:152)
编译语言和解释语言有什么区别?
该语言的区别在于 ;它位于实现。
从我的系统中得到了这个,这是一个答案:
在编译实现中,原始程序被转换为本机机器指令,由硬件直接执行。
在解释的实现中,原始程序被翻译成其他内容。另一个名为“解释器”的程序然后检查“别的东西”并执行所要求的任何动作。根据语言及其实现,有各种形式的“别的东西”。从更受欢迎到不受欢迎,“别的东西”可能是
虚拟机的二进制指令,通常称为字节码,如Lua,Python,Ruby,Smalltalk和许多其他系统中所做的那样(该方法在20世纪70年代由UCSD P系统和UCSD Pascal)
原始程序的树状表示,例如抽象语法树,就像为许多原型或教育口译员所做的那样
源程序的标记化表示,类似于Tcl
源程序的字符,如MINT和TRAC中所做的那样
使问题复杂化的一件事是可以将(编译)字节码转换为本机机器指令。因此,成功的整合实现可能最终获得编译器。如果编译器在后台动态运行,它通常称为即时编译器或JIT编译器。 JIT是为Java,JavaScript,Lua开发的,我敢说其他许多语言。那时你可以有一个混合实现,其中一些代码被解释,一些代码被编译。
答案 1 :(得分:53)
Java和JavaScript是展示这种差异 的一个相当糟糕的例子,因为它们都是解释型语言 。 Java (已解释) 和C(或C ++) (已编译) 可能是一个更好的例子。
为什么通过文本?正如this answer正确指出的那样,解释/编译是关于语言的具体实现,而不是语言 per SE 。虽然像“C是一种编译语言”这样的语句通常是真的,但没有什么可以阻止某人编写C语言解释器。实际上,interpreters for C do exist。
基本上,编译的代码可以直接由计算机的CPU执行。也就是说,可执行代码是用CPU的“本机”语言(汇编语言)指定的。
但是,解释语言的代码必须在运行时从任何格式转换为CPU机器指令。翻译由翻译完成。
另一种方式是解释的 语言 代码逐步转换为机器指令而< / em>程序正在执行,而已编译的 语言 代码已在程序执行之前被翻译。
答案 2 :(得分:10)
这是编译器语言与解释器语言的基本区别。
编译器语言
翻译语言:
答案 3 :(得分:4)
通常,编译器会读取更高级别的语言计算机代码,并将其转换为p代码或本机代码。解释器直接从p代码或解释代码(如Basic或Lisp)运行。通常,编译的代码运行得更快,更紧凑,并且已经发现所有语法错误和许多非法引用错误。解释的代码仅在应用程序尝试解释受影响的代码后才发现此类错误。解释代码通常适用于简单的应用程序,这些应用程序只能使用一次或最多使用一次,甚至可能用于原型设计。编译代码更适合严肃的应用程序。编译器首先接受整个程序,检查错误,编译它然后执行它。然而,解释器逐行执行此操作,因此需要一行,检查错误,然后执行它。
如果您需要更多信息,只需谷歌“编译器和口译员之间的区别”。
答案 4 :(得分:2)
这是一个非常模糊的区别,实际上通常不是语言本身的属性,而是用于执行该语言代码的程序。
但是,大多数语言主要以一种形式或另一种形式使用,是的,Java本质上总是被编译,而javascript基本上总是被解释。
编译源代码就是在其上运行一个程序,该程序生成一个二进制可执行文件,该文件在运行时具有源定义的行为。例如,javac将human-readbale .java文件编译为机器可读的.class文件。
要解释源代码,请在其上运行一个程序,立即生成定义的行为,而不生成中间文件。例如,当您的Web浏览器加载stackoverflow.com时,它会解释一堆javascript(您可以通过查看页面源查看)并生成许多这些页面具有的好效果 - 例如,upvoting或小通知程序顶部的酒吧。
答案 5 :(得分:1)
解释语言在运行时根据shell脚本中的指令执行,编译语言是编译语言(更改为汇编语言,CPU可以理解),然后像c ++一样执行。
答案 6 :(得分:0)
正如其他人所说,已编译和已解释特定于编程语言的实现;它们不是该语言固有的。例如,有C解释器。
但是,我们可以(并且实际上可以)根据编程语言的最常见的(有时是规范的)实现对编程语言进行分类。例如,我们说C已编译。
首先,我们必须定义无歧义的解释器和编译器:
语言 X 的解释器是一个程序 (或一台机器,或者一般来说只是某种机制) 该程序执行用语言 X 编写的任何程序 p ,从而执行效果并评估 X 规范所规定的结果。>
从 X 到 Y 的编译器是程序 (或一台机器,或者一般来说只是某种机制) 将任何程序 p 从某种语言 X 转换为 某种语言 Y 的语义上等效的程序 p',其方式是使用 Y p' >将产生与使用 X 解释器解释 p 相同的结果,并具有相同的效果。
请注意,从程序员的角度来看,CPU是它们各自的本地机器语言的机器解释器。
现在,我们可以根据最常见的实现方式将编程语言分为3类:
有时,软编译和硬编译语言是指简单编译的语言,因此C#,Java,C,C ++被称为已编译。
在这种分类中,JavaScript曾经是一种解释语言,但是那是很多年前的事情。如今,在大多数主要的JavaScript实现中,它都是JIT编译为本地机器语言的,所以我可以说它属于软编译语言。