为什么 invokedynamic 不是 Groovy 中的默认值?

Why isn't invokedynamic the default in Groovy?

Groovy 早在 2012 年就在 2.0 版中添加了 --indy 选项。当时它不是默认设置,因为 invoke dynamic 需要 Java 7,并且当时很多人用Java6.

现在即使即将推出的 Groovy 3.0 仍然需要 --indy 选项才能强制使用 invoke dynamic。尽管 Groovy 3.0 需要 Java 8 或更高版本。

默认的非独立编译和默认的 运行-time 库是非独立的是否有任何技术优势?我原以为现在甚至不需要非独立选项。

默认情况下 --indy 在 Groovy 3.0(目前处于 alpha 阶段)的路线图上。该团队希望获得有关新解析器的反馈,因此没有等到所有功能都可用就发布了 alpha 版本。

Groovy3.0 编译器可能会为一两个版本保留某种非 Indy 选项,以帮助想要重新编译旧库并生成类似字节码的人们。

目前,在生成非印地字节码时,有一些原始处理优化正在发挥作用。非常早期的基准测试(现在在相当老的 JVM 上)显示出一些性能下降,因为 indy 字节码没有那些相同的优化。同样在 3.0 的路线图上是重新审视这些特定情况下的性能,以便在仍然需要时考虑可能的优化。

一个或两个版本是否需要一些非印地罐子的确切细节取决于其他一些平行的变化,以删除一些遗留的 类 印地情况下并不真正需要但会以 Groovy 到 运行 编写的所有现有库都需要。最终确定后,将在文档和发行说明中对此进行详细说明。

[1]中有更多详细信息。

[1] http://groovy.markmail.org/thread/yxeflplf5sr2wfqp