据说 JSR-335 很快就会与 Java 8 一起发布。它带来了对闭包和虚拟扩展方法的支持。 我想知道 JVM 级别是否对此有任何特殊支持? 如果是这样,我们是否可以希望基于 JVM 的函数式语言能够提供闭包和类似扩展方法的功能(例如 scala 中的特征或隐式),从而提高速度?
编辑: 阅读this oracle presentation on Java 8作者:Brian Goetz,看来: - 不需要关闭 - 虚拟扩展方法确实需要 特定的 JVM 支持。
这是否意味着在 scala 中,一些隐式和特征可以以更有效的方式重新实现?
最佳答案
我不认为扩展方法可用于实现特征 - 方法实现不能在它们上调用 super
(据我所知 - 我可能是错的),并且覆盖语义将有所不同。此外,它不会涵盖字段,而仅涵盖方法。
JVM 无法做任何事情来帮助处理隐式,因为它们没有固有的问题。它们是作为普通参数传递的普通实例。查找它们会使编译器变慢,但 JVM 也无能为力。
我认为这些功能对 Scala 没有任何帮助,但这实际上几乎毫无意义。 Scala 仍然使用 JVM 1.5 类文件生成 JVM 1.5 字节码。您可以打开 JVM 1.6 字节码,这几乎没有什么区别。在 Scala 2.10 中,将在实验的基础上启用 1.6 类文件。
原因非常简单:Java 1.7 运行 1.5 个类文件和 1.5 个字节码,但反之则不然。仍然有很多人运行旧版本的 Java,这一点不太可能改变。
所以我没有看到任何 Java 1.8 的特性,除非它们带来了巨大的优势。而且,即便如此,它们很可能可用于使用 Scala 编译的代码,但不适用于 Scala 库本身。同样,除非它带来巨大的优势,否则我认为两个版本都不会提供库。
关于java - JVM 中有 JSR-335 特殊支持吗?提升基于 JVM 的函数式语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107987/