【问题标题】:How compiler and interpreter both are used in one language?编译器和解释器如何在一种语言中使用?
【发布时间】:2019-03-02 06:32:55
【问题描述】:

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

【问题讨论】:

  • 你说的是哪种语言?
  • 它可以是任何语言。
  • 你读过JIT吗?
  • 解释器通常执行编译后的 p 代码,而不是源代码。

标签: compiler-construction interpreter


【解决方案1】:

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

字节码是虚拟机的机器码

在 Javascript 中,有一个运行时(引擎)可以进行即时编译 (JIT)。基本上,在执行时它会给出一个源代码,它会立即将其转换为本机代码,然后执行代码。在 Chrome 的引擎中,有两个模块进行编译:一个可以快速执行代码,但代码没有经过太多优化(点火解释器),另一个生成高性能代码但编译需要更多时间(涡轮风扇编译器)。

为什么同时使用:

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

【讨论】:

    【解决方案2】:

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

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

    总结:

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

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

    【讨论】:

    • Java 不是第一个与机器无关的编程语言。 Python 也是独立于平台的,它是在 Java 之前发布的。 LISP 和 FORTRAN 等其他语言是最早的独立于平台的语言之一。请更正你的答案
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2021-01-15
    • 2011-03-01
    • 1970-01-01
    • 2011-03-16
    • 2016-11-24
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多