2

虽然看起来不会将尾调用优化作为一种​​常见的优化技术添加,尤其是在 Sun 被收购之后,但从技术上讲,让运行在 VM 上的语言决定它们的编译器是否tailcall在字节码?

例如。Java、Groovy 可以决定不使用该指令,而 Scala 或 Clojure 等更多功能语言可以发出它,HotSpot VM 只会优化标有tailcall?

4

1 回答 1

4

是的,这在技术上是可行的——事实上,Arnold Schwaighofer 为OpenJDK提供了一个实验性补丁,它可以做到这一点,尽管应用补丁和构建并不容易,因为它目前没有保持最新状态。

显式尾部调用指令比 JVM 对尾部位置函数调用的透明优化具有优势,因为 JVM 可以验证您指定为尾部调用的内容确实是看到约翰罗斯的这篇尾部调用博客文章以了解一些可以完成的验证。

我认为 JVM 的未来不是 Java,我希望有时间和才华的人推动 JVM 的尾声。

于 2011-02-25T22:31:33.560 回答