Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSR-335在JVM中有特殊支持吗?基于JVM的函数式语言的Boost?_Java_Scala_Jvm_Closures_Jsr335 - Fatal编程技术网

Java JSR-335在JVM中有特殊支持吗?基于JVM的函数式语言的Boost?

Java JSR-335在JVM中有特殊支持吗?基于JVM的函数式语言的Boost?,java,scala,jvm,closures,jsr335,Java,Scala,Jvm,Closures,Jsr335,据说JSR-335将很快与Java8一起推出。它带来了对闭包和虚拟扩展方法的支持。 我想知道在JVM级别上是否有对此的特定支持? 如果是这样的话,我们能否希望基于JVM的函数式语言能够提供闭包和扩展方法,比如特性(比如scala中的traits或implicits) 编辑: 在Brian Goetz看来: -闭包不需要 -虚拟扩展方法确实需要 特定的JVM支持 这是否意味着在scala中,一些隐式和特性可以以更有效的方式重新实现?我认为scala的速度已经非常接近Java了。很明显,动态类型的j

据说JSR-335将很快与Java8一起推出。它带来了对闭包和虚拟扩展方法的支持。 我想知道在JVM级别上是否有对此的特定支持? 如果是这样的话,我们能否希望基于JVM的函数式语言能够提供闭包和扩展方法,比如特性(比如scala中的traits或implicits)

编辑: 在Brian Goetz看来: -闭包不需要 -虚拟扩展方法确实需要 特定的JVM支持


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

我认为scala的速度已经非常接近Java了。很明显,动态类型的jvm语言速度很慢(比如Groovy)。实际上,JDK 7推出了新特性invokedynamic,以改进这些动态jvm语言:

我认为扩展方法不能用于实现trait——方法实现不能对它们调用
super
(好吧,我可能错了),覆盖语义也会有所不同。此外,它将不涉及领域,只涉及方法

JVM无法帮助隐式操作,因为它们没有固有的问题。它们是作为普通参数传递的普通实例。查找它们会使编译器速度变慢,但JVM也帮不上忙

在Scala中,我看不到这些特性有任何帮助,但实际上这几乎没有实际意义。Scala仍然使用JVM1.5类文件生成JVM1.5字节码。您可以打开JVM1.6字节码,这没有什么区别。在Scala 2.10中,1.6类文件将在实验基础上启用

原因很简单:Java1.7使用1.5字节码运行1.5类文件,但不是相反。仍然有很多人在运行旧版本的Java,这不太可能改变


因此,我没有在雷达上看到任何Java1.8特性,除非它们带来巨大的优势。而且,即使这样,它们也很可能适用于使用Scala编译的代码,但不适用于Scala库本身。类似地,除非它带来巨大的优势,否则我看不到两个版本都提供库。

我不确定我会称Java 8或JSR-335为“很快”就会出现的东西。嗨,evangwong。这不是对我所问问题的回答。我不是说scala和java之间的一般速度比较。此外,scala的闭包/隐式转换等的速度无法与Java相比,因为Java没有类似的特性