2

据说 JSR-335 很快就会与 Java 8 一起出现。它带来了对闭包和虚拟扩展方法的支持。我想知道在 JVM 级别上是否对此有任何特别的支持?如果是这样,我们是否希望在基于 JVM 的函数式语言中提高速度,这些函数式语言提供闭包和类似扩展方法的特性(例如 scala 中的特征或隐式)?

编辑:阅读Brian Goetz关于 Java 8 的 Oracle 演示文稿,看起来: - 不需要闭包 - 虚拟扩展方法确实需要特定的 JVM 支持。

这是否意味着在 scala 中,一些隐含和特征可以以更有效的方式重新实现?

4

2 回答 2

3

我认为扩展方法不能用于实现特征——方法实现不能调用super它们(afaik——我可能错了),并且覆盖语义会有所不同。此外,它不会涵盖领域,仅涵盖方法。

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 库本身。同样,除非它带来巨大的优势,否则我看不到两个版本都提供库。

于 2012-04-11T17:39:54.023 回答
2

我认为 Scala 的速度已经非常接近 Java。它是动态类型的 jvm 语言很慢(例如 Groovy)。实际上 JDK 7 推出了新功能 invokedynamic 以改进那些动态 jvm 语言:http: //java.sun.com/developer/technicalArticles/DynTypeLang/

于 2012-04-11T14:36:32.793 回答