如何在一种语言中同时使用编译器和解释器?

时间:2019-03-02 06:32:56

标签: compiler-construction interpreter

我已经阅读了有关编译器,解释器和使用两者的“事物”的定义的足够解释。我没有发现在一种语言中如何同时使用编译器和解释器。

2 个答案:

答案 0 :(得分:1)

在Java中,源代码首先被编译为字节码,然后由解释器(JVM-Java虚拟机)运行。

字节码是虚拟机的机器码

在Javascript中,有一个运行时(引擎),它可以及时进行编译(JIT)。基本上,在执行时会得到一个源代码,该源代码会立即转换为本地代码,然后执行该代码。在Chrome的引擎中,有两个模块可以进行编译:一个模块可以快速执行代码,但是代码的优化程度不高(点火解释器),另一个模块可以生成高性能的代码,但是编译需要花费更多时间(turbofan编译器)。

为什么要同时使用:

  • 可移植性-当您使用已编译AOT的中间表示形式时,可以获取此字节码并在提供虚拟机的任何体系结构上运行它。您可以将相同的Java字节码推送到Mac,PC或Linux上的客户端。如果他们安装了JVM,则代码将运行。对于C或C ++,您必须为每种体系结构提供不同的程序可执行文件
  • 快速的初始启​​动和良好的执行性能-编译需要时间(并且代码越优化,通常编译所需的时间就越多),但是没有人喜欢等待。最好生成一些不完美的东西(点燃阶段),然后通过将热路径编译为高度优化的机器代码(turbofan阶段)来逐步改进代码。这在今天特别合理,因为我们拥有许多内核的CPU,但是我们无法充分利用它们,因为创建具有许多并行线程的程序很困难(因此一个内核可以执行程序,而另一个内核可以同时优化代码)

答案 1 :(得分:1)


Java是第一种与机器无关的编程语言;它同时使用编译器和解释器。 Java编译器的设计方式是将源代码转换为独立于平台的形式,即字节码。 然后,这些字节码由解释器转换为机器码。这就是编译器和解释器都以一种语言使用的方式。任何具有JVM的系统都将运行这些字节码。

Java program  byte code  interpreted by VM  machine language

摘要:

java编译器将源代码转换为称为字节码的中间语言。该字节码只能在称为JVM的虚拟环境中执行。 Java虚拟机。 JVM是Java字节码的解释器。它将字节码转换为机器语言并逐行执行。

这是编译器和解释器在一种语言中使用的方式。.如果发现有用,您可能会提到