Question

JSR-335 is said to come soon along with Java 8. It brings i.e. support for closures and virtual extension methods. I wonder if there is any particular support for this on the JVM level? If so, can we hope for speed improvements in JVM-based functional languages that provide closures and extension-methods-like features (such as traits or implicits in scala)?

Edit: reading this oracle presentation on Java 8 by Brian Goetz, it would appear that: - closures don't require - virtual extension methods do require particular JVM-support.

Could this mean that in scala, some of the implicits, and traits could be reimplemented in a more efficiently way?

Was it helpful?

Solution

I don't think extension methods can be used to implement traits -- a method implementation can't call super on them (afaik -- I might be wrong), and the override semantics would be different. Furthermore, it would not cover fields, just methods.

There isn't anything JVM can do to help with implicits, because there's no inherent problem with them. They are normal instances passed as normal parameters. Looking them up makes the compiler slow, but JVM can't help with that either.

I don't see any of these features helping with anything in Scala, but that's almost moot, actually. Scala still generates JVM 1.5 bytecode with JVM 1.5 classfiles. You can turn on JVM 1.6 bytecode, which makes little difference. With Scala 2.10, 1.6 classfiles will be enabled on an experimental basis.

The reason for that is pretty simple: Java 1.7 runs 1.5 classfiles with 1.5 bytecode, but not the other way around. There's still a lot of people running older versions of Java, and that is unlikely to change.

So I don't see any Java 1.8 features in the radar, unless they bring a huge advantage. And, even then, they'll most likely be available for code compiled with Scala, but not on the Scala library itself. Likewise, unless it brings a huge advantage, I don't see libraries being made available in both versions.

OTHER TIPS

I think the speed of Scala is very close to Java already. It is the dynamic typed jvm languages are slow (such as Groovy). And actually JDK 7 came out with the new feature invokedynamic for the purpose of improve those dynamic jvm language: http://java.sun.com/developer/technicalArticles/DynTypeLang/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top