Yep, in a way the jvm is doing the one thing that native platforms haven't. That is provide a universal (in java land at least) interface in java bytecode to languages running within the jvm.
Think about the ffi annoyances with c->c++->other-lang, its so simple in jruby to use clojure libraries, or rhino for some other stuff, or vice-versa, or whatever.
And I'm not a java fanboy, but that fundamental aspect of the jvm as a platform is crazy cool.
The same is true of Mono/.NET as well; in fact the CLR was designed for this and has features the JVM lacks, such as parametric types, invokedynamic, tail calls, etc.
If you're into functional programming the CLR is the runtime to beat.
I think MS missed a beat here, if they had pushed for the .Net CLR to be a first class and equal citizen on OS X , iOS and Linux they would probably be in a much more relevant position in the future.
Not the mono runtime; the fact that there are two runtimes.
The official MS one, and the Mono one, and although they're kind of compatible, in that your C# can be compiled to run on either of them (mostly, sometimes, if you haven't done anything fancy, if you're not using MVC, if you're not using a UI layer that isn't portable, if the version of mono you're using from A is the same as from B ( >_> unity...) ), this is FAR away from the java JVM, where you can ship an application that just runs on all the platforms.
Don't get me wrong, you can do that with C# too... if you use Mono only, and flip off the official M$oft .Net runtime.
...but the mono runtime is behind the curve, always playing catchup to the 'official' runtime, supporting a subset of the features, and everywhere runs different versions of the mono runtime. It's a mess.
You've got to admit, the JVM is 100% superior in this regard.
It uses GTK#. What do you expect, WPF is a Microsoft licensed tech, you can't blame Xamarin for not stealing it. A GUI written to GTK# is portable to ios, Android, OSX, Windows, and Linux, and a bunch more marginally obscure targets. Every platform under the sun.
Scala provides tail call optimization and invoke dynamic has been in the JVM for years (since JDK7). The JVM is also considerably faster than the CLR and unlike Mono is heavily used in industry.
Why would MS make .NET really cross plateform ? MS is here to sell Windows and Windows Software, nothing more. Mono is an unofficial hack and can be shut down anytime by Microsoft , i would not bet my career on that stuff.
Think about the ffi annoyances with c->c++->other-lang, its so simple in jruby to use clojure libraries, or rhino for some other stuff, or vice-versa, or whatever.
And I'm not a java fanboy, but that fundamental aspect of the jvm as a platform is crazy cool.