编译语言和解释语言有什么区别?

SIr*_*lot 113 javascript java programming-languages

在阅读了关于这个主题的一些材料之后,我仍然不确定编译语言和解释语言之间的区别是什么.我被告知这是Java和JavaScript之间的差异之一.请有人帮我理解吗?

Nor*_*sey 156

编译语言和解释语言有什么区别?

差异在于语言; 它在实施中.

从我的系统中得到了这个,这是一个答案:

  • 在编译的实现中,原始程序被转换为本机机器指令,其由硬件直接执行.

  • 在解释的实现中,原始程序被翻译成其他东西.另一个名为"解释器"的程序然后检查"别的东西"并执行所要求的任何动作.根据语言及其实现,有各种形式的"别的东西".从更受欢迎到不那么受欢迎,"其他东西"可能是

    • 虚拟机的二进制指令,通常称为字节码,在Lua,Python,Ruby,Smalltalk和许多其他系统中完成(该方法在20世纪70年代由UCSD P系统和UCSD Pascal推广)

    • 原始程序的树状表示,例如抽象语法树,就像许多原型或教育解释器一样

    • 源程序的标记化表示,类似于Tcl

    • 源程序的字符,如MINT和TRAC中所做的那样

使问题复杂化的一件事是可以将(编译)字节码转换为本机机器指令.因此,成功的整合实现可能最终获得编译器.如果编译器在后台动态运行,它通常称为即时编译器或JIT编译器.JIT是为Java,JavaScript,Lua开发的,我敢说其他许多语言.此时,您可以使用混合实现,其中解释了一些代码并编译了一些代码.

  • 先生,我有以下问题1.用哪种语言写成"别的东西"?2.在JavaScript的背景下,从浏览器到浏览器的"其他东西"是多少?3.说,我的脚本在谷歌浏览器和Internet Explorer中运行,它们在两个浏览器中都被解释相同吗? (7认同)

sta*_*ica 55

Java和JavaScript是证明这种差异的一个相当糟糕的例子,因为它们都是解释型语言.Java (已解释)和C(或C++)(已编译)可能是一个更好的示例.

为什么翻阅文本?正如这个答案正确指出的那样,解释/编译是关于语言的具体实现,而不是语言本身.虽然像"C是一种编译语言"这样的陈述通常是正确的,但没有什么可以阻止某人编写C语言解释器.实际上,C语言的解释器确实存在.

基本上,编译的代码可以由计算机的CPU直接执行.也就是说,可执行代码在CPU的"本机"语言(汇编语言)中指定.

但是,解释语言的代码必须在运行时从任何格式转换为CPU机器指令.这种翻译由翻译完成.

把它的另一种方式是,解释语言代码翻译成机器指令一步一步,而正在执行的程序,而编译语言有代码已经被翻译之前执行程序.

  • Java是编译语言或解释语言的一个非常糟糕的例子,因为它基本上都是.如果我要进行比较,我会选择C和Lisp来避免混淆. (12认同)
  • Java被解释了吗?来自维基百科:"Java应用程序通常被编译为字节码(类文件),无论计算机体系结构如何,它都可以在任何Java虚拟机(JVM)上运行." (7认同)
  • @stakx - 实际上Java字节码**通常也由JIT编译器编译为本机代码.获得纯解释器行为的唯一方法是在启动JVM时显式关闭JIT编译器. (7认同)
  • @Personman仍然在技术上被"解释"为JVM正在执行代码,而不是操作系统本身.它真的是语义上的差异,因为可以说现代操作系统的复杂性使得差异在大多数情况下基本上无关紧要.您谈论运行应用程序的操作系统与运行运行代码的应用程序的操作系统之间的区别. (5认同)
  • 我想你的意思是类文件本身是由Java VM解释的.这有点合理,但java源代码确实被编译为Java VM字节码.您可以构建一个物理Java机器,它不需要VM将其解释为另一个架构的机器代码.所以说Java编译似乎更准确.尽管如此,这是区分混乱和任意的方式的一个很好的例子.毕竟,编译的C是由CPU解释的,对吧? (5认同)

小智 14

这是编译器与解释器语言之间的基本区别.

编译语言

  • 将整个程序作为单个输入并将其转换为存储在文件中的目标代码.
  • 生成中间对象代码
  • 例如:C,C++
  • 编译程序运行得更快,因为编译是在执行之前完成的.
  • 内存需求更多是由于对象代码的创建.
  • 编译整个程序后显示错误
  • 源代码---编译器---机器码---输出

口译员语言:

  • 将单个指令作为单个输入并执行指令.
  • 不生成中间对象代码
  • 例如:Perl,Python,Matlab
  • 解释程序运行速度较慢,因为编译和执行同时发生.
  • 内存要求较少.
  • 每条指令都会显示错误.
  • 源代码---解释器---输出


Sal*_*lil 5

通常,编译器读取高级语言计算机代码并将其转换为 p 代码或本机机器代码。解释器直接从 p 代码或解释过的代码(如 Basic 或 Lisp)运行。通常,编译后的代码运行得更快,更紧凑,并且已经发现了所有的语法错误和许多非法引用错误。只有在应用程序尝试解释受影响的代码后,解释代码才会发现此类错误。解释代码通常适用于只使用一次或最多使用几次的简单应用程序,甚至可能用于原型设计。编译后的代码更适合严肃的应用程序。编译器首先接收整个程序,检查错误,编译它然后执行它。而解释器逐行执行此操作,因此需要一行来检查错误,

如果您需要更多信息,只需谷歌搜索“编译器和解释器之间的差异”。

  • 嗯,除了前两个陈述之外,不确定你从哪里得到了一些这样的信息。从技术上讲,这在几代以前的许多解释性语言中都是正确的,但是根据平台和对细节的关注,解释性代码可能与某些活动的编译代码执行接近或与编译代码相同。 (3认同)