Do you really think the engineering in the JVM is that bad? I can't think of many VMs that have the technical capabilities that HotSpot or Graal do. The CLR doesn't even do basic speculative optimisations. Maybe Azul Zing or J9 are comparable in terms of the advanced techniques they use, but would you really put the Oracle JVM that far behind? I'm not sure there's any sound technical basis for that.
It's more that a lot of the work people admire was done before or close to the acquisition date and therefore probably should be credited to Sun.
That said, I'm not sure why things like speculative execution in the JVM context get such play as dark magic when it seems like the JVM and CLR are pretty neck-and-neck in terms of deliverable performance when we get down to the level where we're not affected by larger architectural differences.
There are a lot of different ways to get high performance code from a VM environment. But to hear many people tell it the JVM is the only competent one. I'm just not sure the evidence bears that out.
Evidence: JRuby, Clojure, Groovy are dynamic languages that have been successful on the JVM and that simply can't have the same performance on the CLR for obvious reasons. Microsoft tried investing in IronPython and IronRuby but failed. Furthermore a language like Scala can have a type-system that diverges from that of Java (e.g. higher kinded types) without taking a hit in performance.
It's not dark magic, it's just good engineering. And the evidence is there in plain sight.
Microsoft didn't fail at IronPython and IronRuby for technical or perf reasons, they owned the projects and essentially withdrew funding, presumably this delayed all the dlr work too dynamic invoke etc.. rosyln changes etc.., it was a disappointement at the time to me 2010? and essentially allowed the JVM to pull ahead in community adoption of other languages. Where MS is now this decision to withdraw from iron* looks insane, but the attitude to open source and community was different then. Time has pasted. Happy clojure developer on JVM today
I'm not sure I believe what you're saying is true. I'm a full time Clojure dev and let me tell you, if I give a damn about performance I avoid a lot of the cool parts of the language.
And it gets even more severe with Scala.
As Ruby should demonstrate, languages succeed because the community wants them. Not because they have specific performance characteristics.
Ditto with Apache Groovy, which started off as a dynamically typed language to complement Java. The original use case for Groovy was to use it when performance doesn't matter (e.g. scripting, testing, glue code) and Java (or some other statically typed language) when it does.
Unfortunately VMware wasted a lot of resources trying to redefine Groovy as a performant language which could replace Java's use case, or even run on Android (believe it or not).
Hi sorry for off topic question. But how do u feel about clojure ? I am a python developer and really interested in clojure. Do u think it's worthwhile learning ?
Actually the JVM support for dynamic languages (invokedynamic) was only added after .NET, thanks to IronPython project, created the DLR first as a side project, then eventually released it as part of .NET 4.0.
I imagine only those of us that work regularly with both platforms get it right, when each got what, and even then it is easy to lose track.