编译和解释语言有什么区别?
在阅读了关于这个主题的一些资料之后,我仍然不确定编译语言和解释语言之间的区别是什么。 我被告知这是Java和JavaScript之间的区别之一。 请有人帮助我理解它吗?
编译和解释语言有什么区别?
区别不在于语言; 它正在执行中 。
已经从我的系统中得到了这个答案:
-
在编译的实现中,原始程序被翻译成本机机器指令,由硬件直接执行。
-
在一个解释实现中,原始程序被翻译成别的东西。 另一个称为“解释者”的程序则检查“别的东西”并执行所要求的任何操作。 根据语言及其实施情况,有各种forms的“其他”。 从更受欢迎到不太受欢迎,可能是“别的东西”
-
虚拟机的二进制指令通常称为字节码 ,就像在Lua,Python,Ruby,Smalltalk和许多其他系统中完成的那样(该方法在20世纪70年代由UCSD P系统和UCSD Pascal推广)
-
原始程序的树形表示,例如抽象语法树,就像许多原型或教育解释器所做的那样
-
源程序的标记化表示,类似于Tcl
-
源程序的特征,如在MINT和TRAC中所做的
-
使问题复杂化的一个原因是可以将字节码翻译(编译)为本地机器指令 。 因此,一个成功的解释实现可能最终会获得一个编译器。 如果编译器在后台dynamic运行,则通常称为即时编译器或JIT编译器。 JIT是为Java,JavaScript,Lua和我敢说许多其他语言而开发的。 在这一点上,你可以有一个混合实现,其中一些代码被解释,一些代码被编译。
Java和JavaScript是一个相当糟糕的例子来certificate这种差异,因为两者都是解释型语言 。 Java (解释)和C(或C ++) (编译)可能是一个更好的例子。
为什么直通文本? 正如这个答案正确指出的那样,解释/编译是关于语言的具体实现,而不是语言本身 。 虽然像“C是一种编译语言”这样的陈述通常是正确的,但是没有什么能阻止某人编写C语言解释器。 事实上, C的解释器确实存在 。
基本上,编译的代码可以由计算机的CPU直接执行。 也就是说,可执行代码是用CPU的“本地”语言( 汇编语言 )指定的。
但是解释型语言的代码必须在运行时从任何格式转换为CPU机器指令。 这个翻译是由翻译完成的。
另一种说法是,解释型语言是在程序执行时将代码逐步转换为机器指令,而编译语言的代码已经在程序执行前被翻译过 。
通常,编译器会读取更高级别的语言计算机代码,并将其转换为p代码或本地机器代码。 解释器直接从p代码或解释代码(如Basic或Lisp)运行。 通常情况下,代码运行得更快,更紧凑,已经发现了所有的语法错误和许多非法引用错误。 解释的代码只会在应用程序试图解释受影响的代码后发现这样的错误。 解释的代码通常适用于只能使用一次或最多几次的简单应用程序,甚至可能用于原型devise。 编译代码对于严重的应用程序更好。 编译器首先接收整个程序,检查错误,编译并执行它。 而解释器一行一行地执行,所以只需要一行,检查错误并执行。
如果你需要更多的信息只是谷歌“编译器和解释器之间的区别”
这是一个非常模糊的区别,实际上通常不是一种语言本身的属性,而是您用来以该语言执行代码的程序。
然而,大多数语言主要以一种forms或其他forms使用,是的,Java本质上总是被编译的,而javascript本质上总是被解释的。
编译源代码是在其上运行一个程序,该程序生成一个二进制可执行文件,该文件在运行时具有源定义的行为。 例如,javac将人类readbale .java文件编译成机器可读的.class文件。
解释源代码是运行一个程序,它立即产生定义的行为,而不产生中介文件。 例如,当你的web浏览器加载stackoverflow.com时,它会解释一堆javascript(你可以通过查看页面源代码来查看),并产生很多这些页面的好效果,比如upvoting或者小通知横跨顶部的酒吧。
解释的语言是在运行时根据shell脚本中的指令执行的,编译语言是编译后的语言(改成汇编语言,CPU可以理解),然后像c ++一样执行。