2012-04-11 38 views
2

据说JSR-335即将与Java 8一起推出。它带来了对封闭和虚拟扩展方法的支持。 我想知道在JVM级别上是否有特别的支持? 如果是这样,我们是否可以希望提高基于JVM的函数式语言的速度,这些语言提供闭包和扩展方法类功能(如scala中的特征或含义)?在JVM中有JSR-335特别支持吗?提升基于功能的基于JVM的语言?

编辑: 阅读this oracle presentation on Java 8 Brian Goetz撰写,它会出现: - 关闭不需要 - 虚拟扩展方法确实需要 特别JVM支持。

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

+1

我不确定我会打电话给Java 8或JSR-335,“很快”就会发生。 – 2012-04-11 16:07:52

回答

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

2

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

+0

嗨evangwong。这不是我问的答案。我不是在谈论一般速度比较scala vs java。此外,scala的关闭/隐式转换等速度无法/无法与Java进行比较,因为Java确实/没有可比较的特性 – ib84 2012-04-11 16:40:06