【发布时间】:2012-06-09 05:52:10
【问题描述】:
作为一个辅助项目的背景,我一直在阅读有关不同虚拟机设计的文章,当然 JVM 受到的关注最多。我还研究了 BEAM (Erlang)、GHC 的 RTS(一种但不完全是 VM)和一些 JavaScript 实现。 Python 也有一个字节码解释器,我知道它存在,但没有读过太多。
我没有找到很好的解释为什么要为特定语言选择特定的虚拟机设计。我对适合并发和/或动态(Ruby、JavaScript、Lisp)语言的设计选择特别感兴趣。
编辑:为了回应要求具体的评论,这里有一个例子。 JVM 使用堆栈机而不是寄存器机,这在 Java 刚被引入时引起了很大争议。事实证明,设计 JVM 的工程师这样做是为了平台可移植性,将堆栈机器转换回寄存器机器比克服虚拟寄存器过多或过少的阻抗不匹配更容易和更有效。
这是另一个示例:对于 Haskell,要查看的论文是 Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine。这与我所知道的任何其他类型的 VM 都非常不同。事实上,GHC(Haskell 的首要实现)不会实时运行,而是用作编译的中间步骤。 Peyton-Jones 列出了至少 8 个其他无法运行的虚拟机。我想了解为什么有些虚拟机成功而其他虚拟机失败。
【问题讨论】:
-
这个话题有点太宽泛了。你能给出你最感兴趣的设计的一些特定方面吗?或任何其他示例。无论如何都要向我 +1,因为这可能会产生一些有趣的答案。
-
Dalvik JVM 使用基于寄存器的架构 - en.wikipedia.org/wiki/Dalvik_(software)
-
您应该查看 Parrot parrot.org 的文档,该文档最初是为 Perl 设计的,但后来被用于其他几种语言。该文档讨论了动态类型语言与 Java 等更多静态语言的 VM 功能。
-
SpacedMonkey - Dakvik 不是 JVM,JVM
.class文件不会在其上运行。 JVM 的字节码在放到 Android 设备上之前会被翻译成 Dalvik 字节码。 -
这不是更适合程序员吗?
标签: jvm language-design vm-implementation