If you want to look at the JIT overhead, for the benchmark stone and Richards, multiply the first number by ten and subtract the second number. And you can do it in your head, CPython is the fastest if you only going to launch the interpreter and run the program once.
The sorting benchmark is more interesting. One could estimate where the breakeven point is, if considering the sorting scaling to be exactly n*log(n). Though the timings could be considerably different once everything fits in L2 or L1 cache.
Today a big contender for a VM to rule them all is WebAssembly, even though the primary motivation at the start was a web language, the design of the intermediate language (.wasm) is explendid, it hits the sweet spot of a LISP language with static types and low level coding
It is an extremely poor fit for dynamic languages. Maybe in a few years, once it has some better tooling for things like JIT. At present you might be better off compiling to JS - dynamic dispatch in WASM has some fixed overhead and dynamically generating code has severe limitations, while in JS there's no special overhead for dynamic dispatch and you can freely create as much code as you want at runtime and still benefit from JIT optimizations including inlining.
> can still be JITimed and get close to native performance
Has anyone achieved this yet? I haven't seen any results myself but I haven't been looking carefully.
Also wouldn't you have to build that JIT yourself and all the primitives you need to implement a dynamic language like the caches and deoptimisation? Seems like it's not really providing the needed tools and you'd have to build a lot of basics on top of it.
Wasm is just the spec, browsers and wasm vm implementations that will implement the JIT evaluator, and yes JIT is already being implemented in some vendors, of course nothing final yet.
Wasm is not mature like the other big VMs yet, but it is still a big contender
> browsers and wasm vm implementations that will implement the JIT evaluator
I'm not sure this is the case - I think it's down to the Wasm application to implement any JIT - so it's not doing much of the work of a traditional VM - you have to build all that yourself from the ground up.
> and yes JIT is already being implemented in some vendors
I've not seen any examples - can you reference once?
You said 'of course' it's suitable for dynamic languages... but there's no evidence of this anywhere yet and many other people with experience disagree.
Ah my bad, I think I misunderstood your comment. I was reaffirming this:
> wasm can still be JITimed and get close to native performance
I’m also not super familiar with this subject, so I unfortunately don’t understand the distinction you’re making between source and target.
> Seems like it's not really providing the needed tools and you'd have to build a lot of basics on top of it
My understanding is that this is accurate, and folks like the Bytecode Alliance[0] are working on building that ecosystem of tools on top of WASM, and I see wasmtime as being one of those tools.
If it ever moves beyond the MVP and the tooling moves beyond installing a klundge of clang, Python, nodejs and Java tools and hope for the best when juggling them.