java - JVM 中有 JSR-335 特殊支持吗?提升基于 JVM 的函数式语言?

标签 java scala jvm closures jsr335

据说 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/

相关文章:

java.lang.UnsatisfiedLinkError 即使设置了 LD_LIBRARY_PATH 和 -Djava.library.path

scala - 防止 Play 模板引擎转义 JavaScript 引号

scala - 如何使用 Spark/scala 解析 YAML

garbage-collection - Oracle或OpenJDK中GC的集合类型是精确的还是保守的?

java - RequestMapping 和源路径

Java CXF WS 客户端 - gZip HTTP REQUEST HEADER 被忽略

java - JVM YoungGen 0%, Perm Gen 99%, OldGen Full

java - Akka 中的集群

jvm - Java java.lang.Integer类中的代码注释 'HD, Figure'是什么意思?

java - 如何用 Java 编写正确的微基准测试?