【发布时间】:2012-03-10 07:10:02
【问题描述】:
我一直在想,是什么阻碍了像 JVM 或 PyPy for Haskell 这样的高效虚拟机的开发(除了开发工作之外)?是语言结构吗?我认为更难有效解释的语言(如 Python,非常动态)已经有了不错的 VM。
另外,如果没有什么阻碍这样的实现,STG 是否会成为一个很好的目标“字节码”,因为所有优化都是在 Core 上完成的?
有没有讨论这个话题的文章或博客文章?
编辑:
- 我知道HaLVM,但我认为这不是我的意思。
- 我也知道
runhaskell,但是一点效率都没有。
【问题讨论】:
-
他们不是。JVM 是一个通用的虚拟机,理论上你可以编译任何语言给它。也许不是最好的性能,但它会起作用。
-
1) GHC 做到了 2) 你不需要 JVM 尾调用优化,你可以发出已经优化的代码。
-
当 Haskell 已经编译成相当高效的本机代码时,为什么还要为它创建一个 VM?
-
@yi_H,在没有适当尾调用的情况下将函数式语言编译为语言或 VM 的主要两种方法是(1)作为一个大函数,或(2)使用蹦床。两者都不是 JVM 上的真正选择。一般来说,关闭、重击和分配的成本是其他阻碍因素。尽管大肆宣传,但 JVM 远非通用 VM。
-
@yi_H:记住尾递归也适用于相互递归的函数。在这种情况下,很难将优化转变为迭代循环。
标签: haskell jvm vm-implementation