Answers:
编译语言和解释语言之间有什么区别?
区别不在于语言。它在执行中。
从我的系统中得到了答案,这是一个答案:
在编译的实现中,原始程序被转换为本机指令,这些指令直接由硬件执行。
在一个解释的实现中,原始程序被翻译成其他东西。另一个程序称为“解释器”,然后检查“其他”并执行需要的任何操作。根据语言及其实现,“其他”的形式多种多样。从较流行到较不流行,“其他”可能是
虚拟机的二进制指令,通常称为字节码,在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机器指令。该翻译由口译员完成。
把它的另一种方式是,解释语言代码翻译成机器指令一步一步的同时,正在执行的程序,而编译语言有代码已经被翻译之前执行程序。
通常,编译器读取高级语言的计算机代码,并将其转换为p代码或本机代码。解释器直接从p代码或诸如Basic或Lisp之类的解释代码运行。通常,编译后的代码运行速度更快,更紧凑,并且已经发现了所有语法错误和许多非法引用错误。解释后的代码仅在应用程序尝试解释受影响的代码后才发现此类错误。解释性代码通常对于仅将使用一次或最多使用两次,甚至可能用于原型制作的简单应用程序也很有用。编译后的代码更适合于严重的应用程序。编译器首先接收整个程序,检查是否有错误,然后编译并执行。解释器逐行执行此操作,因此需要一行,检查是否有错误,
如果您需要更多信息,只需Google以获取“编译器和解释器之间的差异”。
这是一个非常模糊的区别,实际上通常不是语言本身的属性,而是您用来执行该语言代码的程序的属性。
但是,大多数语言主要以一种形式或另一种形式使用,是的,Java本质上总是被编译,而javascript本质上总是被解释。
编译源代码是在其上运行一个程序,该程序会生成一个二进制可执行文件,该文件在运行时具有源代码定义的行为。例如,javac将人类阅读的.java文件编译为机器可读的.class文件。
要解释源代码,请在其上运行一个程序,该程序会立即产生已定义的行为,而不会生成中间文件。例如,当您的网络浏览器加载stackoverflow.com时,它会解释一堆JavaScript(您可以通过查看页面源代码来查看它们),并产生许多这些页面具有的良好效果-例如,投票或小通知者横穿顶部。
解释语言是在运行时根据外壳脚本中的说明执行的,而编译语言是一种被编译(转换为汇编语言,CPU可以理解的语言),然后像在c ++中那样执行的语言。
正如其他人所说,编译和解释是特定于编程语言的实现的。它们不是语言固有的。例如,有C解释器。
但是,我们可以(并且实际上可以)根据最常见的(有时是规范的)实现对编程语言进行分类。例如,我们说C已编译。
首先,我们必须定义无歧义的解释器和编译器:
语言X的解释器是一个程序(或机器,或一般来说,只是某种某种机制),它执行用语言X编写的任何程序p,从而执行效果并评估X规范所规定的结果。
甲编译器从X到ý是一个程序(或一台机器,或只是某种一般机制的),该转换的任何程序p部分语言X成语义等同程序P”在一些语言Ý以这样的方式在解释p '与用于解释ÿ会产生相同的结果,并且具有相同的效果解释p与解释器X。
注意,从程序员的角度来看,CPU是它们各自的本地机器语言的机器解释器。
现在,我们可以根据编程语言最常见的实现方式将编程语言分为三类:
有时,软编译和硬编译语言是指简单编译,因此C#,Java,C,C ++被称为已编译。
在这种分类中,JavaScript曾经是一种解释语言,但是那是很多年前的事。如今,在大多数主要的JavaScript实现中,它都是JIT编译为本地机器语言的,所以我可以说它属于软编译语言。