【问题标题】:has JSR-335 special support in JVM? Boost for functional JVM-based languages?JVM 中有 JSR-335 的特殊支持吗?提升基于 JVM 的功能性语言?
【发布时间】:2012-04-23 21:05:42
【问题描述】:

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

编辑: 阅读 Brian Goetz 的this oracle presentation on Java 8,看起来: - 关闭不需要 - 虚拟扩展方法确实需要 特定的 JVM 支持。

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

【问题讨论】:

  • 我不确定我是否会将 Java 8 或 JSR-335 称为“即将推出”的东西。

标签: java scala jvm closures jsr335


【解决方案1】:

我认为扩展方法不能用于实现特征——方法实现不能在它们上调用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 库本身。同样,除非它带来巨大的优势,否则我认为不会在两个版本中都提供库。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你好 evangwong。这不是我所问的答案。我不是在谈论一般的速度比较 scala 与 java。此外,scala 的闭包/隐式转换等的速度不能/不能与 Java 相比,因为 Java 确实/没有可比的特性
    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多