如何解决Java“虚拟机”与 Python“解释器”的说法?
虚拟机是一个虚拟计算环境,具有一组特定的原子定义明确的指令,这些指令独立于任何特定语言而受到支持,并且通常被认为是其自身的沙箱。VM 类似于特定 cpu 的指令集,并且倾向于在更基本的级别上工作,这些指令(或字节码)的非常基本的构建块独立于下一个。一条指令仅根据虚拟机的当前状态确定性地执行,而不依赖于该时间点指令流中其他地方的信息。
另一方面,解释器更复杂,因为它适合解析某些语法流,这些语法属于特定语言和特定语法,必须在周围标记的上下文中解码。您不能孤立地查看每个字节甚至每一行,并确切地知道下一步该做什么。语言中的标记不能像它们相对于 VM 的指令(字节码)那样孤立。
Java 编译器将 Java 语言转换为字节码流,这与 C 编译器将 C 语言程序转换为汇编代码没有什么不同。另一方面,解释器并没有真正将程序转换为任何定义明确的中间形式,它只是将程序动作作为解释源代码的过程。
VM 和解释器之间差异的另一个测试是您是否认为它与语言无关。我们所知道的 Java VM 并不是真正的 Java 特定的。您可以使用其他语言制作编译器,生成可以在 JVM 上运行的字节码。另一方面,我认为我们不会真正考虑将 Python 以外的其他语言“编译”成 Python 以供 Python 解释器进行解释。
由于解释过程的复杂性,这可能是一个相对缓慢的过程......特别是解析和识别语言标记等,并了解源的上下文以便能够在解释器中承担执行过程。为了帮助加速此类解释语言,我们可以在这里定义更容易直接解释的预解析、预标记源代码的中间形式。这种二进制形式仍然在执行时被解释,它只是从一种人类可读性差得多的形式开始以提高性能。然而,执行该形式的逻辑不是虚拟机,因为这些代码仍然不能孤立地看待——周围令牌的上下文仍然很重要,它们只是现在处于一种不同的计算机效率更高的形式。
解决方法
在 Java 中一直使用“虚拟机”时,似乎很少阅读 Python“虚拟机”。
两者都解释字节码;为什么将一个称为虚拟机而另一个称为解释器?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。