代码之家  ›  专栏  ›  技术社区  ›  DodgyCodeException

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

  •  1
  • DodgyCodeException  · 技术社区  · 7 年前

    Groovy添加了 --indy 2012年2.0版中的选项。这不是当时的默认值,因为 invoke dynamic 需要Java 7,当时很多人都使用Java 6。

    现在,即使即将推出的Groovy 3.0也需要 --印第 选项以强制使用 动态调用 。尽管Groovy 3.0需要Java 8或更高版本,但这是事实。

    默认的非indy编译和默认的非indy运行时库在技术上有什么优势吗?我原以为现在甚至没有必要有一个非印第岛的选择。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Paul King    7 年前

    拥有 --indy 默认情况下,这是Groovy 3.0的路线图(目前为alpha)。该团队希望得到有关新解析器的反馈,因此在发布alpha版本之前,没有等到所有功能都可用。

    Groovy 3.0编译器可能会在一两个版本中保留某种非indy选项,以帮助希望重新编译旧库并生成类似字节码的人。

    目前,在生成非indy字节码时,存在一些原始处理优化。非常早期的基准测试(现在在非常旧的JVM上)显示了一些性能退化,因为indy字节码没有这些优化。3.0的路线图上还包括重新审视这些特定情况下的性能,以期在仍然需要的情况下考虑可能的优化。

    一个版本或两个版本是否需要一些非indy JAR的确切细节取决于其他一些并行更改,以删除indy案例并不真正需要的一些遗留类,但所有使用Groovy编写的现有库都需要这些遗留类才能运行。一旦最终确定,将在文档和发行说明中详细说明。

    [1]中有更多细节。

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