Java“虚拟机”与Python“解释器”的说法?

问题:

阅读Python“虚拟机”似乎很少见,而在Java中使用“虚拟机”。两个解释字节代码,为什么调用一个虚拟机和另一个解释器?

回答:

虚拟机是一种虚拟计算环境,具有独立于任何特定语言的原子明确指定的特定集合,并且通常将其视为沙箱。 VM类似于特定CPU的指令集,并且倾向于以更独立于下一个的这种指令(或字节代码)的非常基本的构建块来工作在更基础的水平。指令仅基于虚拟机的当前状态确定地执行,并且不依赖于在该时间点的指令流中的别处的信息。
另一方面,解释器更加复杂,因为它被定制为解析特定语言的语法流和必须在周围令牌的上下文中解码的特定语法的流。你不能孤立地看每个字节甚至每一行,并且准确地知道接下来要做什么。语言中的令牌不能像隔离虚拟机的指令(字节码)一样被隔离。
Java编译器将Java语言转换为与C编译器将C语言程序转换为汇编代码不同的字节码流。另一方面,解释者并不真正将程序转换为任何明确定义的中间形式,它只是将程序动作作为解释源的过程。
虚拟机和解释器之间的差异的另一个测试是你是否认为它是独立于语言的。我们所知道的Java VM并不是Java特有的。您可以使用其他语言编写一个可以在JVM上运行的字节码的编译器。另一方面,我不认为我们真的会想到将Python之外的其他一些语言编译成Python以解释Python解释器。
由于解释过程的复杂性,这可能是一个相对较慢的过程….具体解析和识别语言令牌等,并且了解源的上下文以能够在解释器内执行执行过程。为了帮助加速这种解释性语言,这是我们可以定义中间形式的预先解析的,预先标记的源代码,更容易直接解释。这种二进制形式仍然在执行时解释,它只是从一个更少的可读形式开始,以提高性能。然而,执行该表单的逻辑不是虚拟机,因为这些代码仍然不能被隔离 – 周围的令牌的上下文仍然重要,它们现在处于不同的计算机有效的形式。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java “Virtual Machine” vs. Python “Interpreter” parlance?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

32 − 24 =