It seems to be easier to write a compiler that supports multiple languages than a VM.
The vast majority of VMs target a single language. Sometimes PLs are written to target an existing VM (e.g. Clojure), but it's rare to take an existing PL and build a production implementation.
miniblog.
Related Posts
TIL Rust has an ambiguity `if Foo {}` -- is `Foo` a value of type bool, or a struct?
Rust solves this by defining a grammar production 'any expression except struct literals' and using it in this position.
Integration tests are inherently scary. You want to make them as similar as possible to your production environment, which massively increases the risk that one day they will talk to production directly.
JITs are blackboxes that can make it hard to reason about performance in production: