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

How compiler and interpreter both are used in one language?

我已经阅读了足够多的关于编译器、解释器和使用这两者的定义的解释 "things"。我没有找到如何在一种语言中使用编译器和解释器。

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

字节码是虚拟机的机器码

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

为什么要同时使用:

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

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

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

总结:

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

这就是编译器和解释器在一种语言中的使用方式..如果觉得有用,您可以提及