Hacker News new | ask | show | jobs
by sacado2 2665 days ago
But now you can choose your own programming language. The JVM is very Java centric, for obvious reasons.
3 comments

Obviously its purpose was to support Java, but a number of languages - most prominently Scala, Kotlin, Clojure, Groovy and Ruby - run on the JVM. With perhaps the exception of Kotlin, these are not especially Java-like.

There is an interesting degree of independence. A lot of Java semantics is not baked into the JVM, and in the case of invokedynamic there was for a time a significant JVM feature that java didn't use.

The JVM is a pretty decent target for languages with garbage collection, objects (of some form), and methods / functions. Those facilities are useful for most languages these days, and provide a large degree of interoperability. I don't have to really thing about ruby calling java and back again, no calling conventions or issues with garbage.

It will be interesting to see whether WASM will support those kinds of features.

Names matter, though. For as long as the JVM has been called the "JVM" it has been associated with the Java language.

Using the Java language on other VMs confuses people in exactly the same way that using the Java Virtual Machine for other languages confuses people.

The outcome might have been different had they called it something like HLVM instead of JVM.

Taking this further, wouldn't this imply that WebAssembly is only for the Web?
JVM is too high-level, is the problem. You're still tied to its memory model, its object model, its type system etc.

It's much better to build this in layers - a standardized lowest layer that's something like WASM, then a standardized object model on top of that etc. That way, you can have a single stack supporting a broad variety of languages, with degree of interop compatibility dictated by how much in common they have.

You mean, like with TruffleRuby and JRuby, and TrufflePython and Jython, which both already run faster on the JVM than their "native" implementations of Ruby and Python do otherwise?
Just like the CLR and LLVM.
I've never been very fond of CLR outside of Windows platforms.

As for LLVM, sandboxing has never been a core feature (AFAIK).

It was called PNaCl.

WebAssembly only exists because Mozilla went with asm.js instead.