My title does not clearly indicate what this story is about, which is often the hook of a headline, to leave readers guessing.
I’ll tell you now then: I’m thinking of the great Virtual Machines, the VMs, that changed the face of programming in the 1990s, and continue to exert their influence to this day.
Perhaps “influence” is the wrong word, as these deep and heavy gravity wells warp the space of what’s possible, giving new languages a foothold in some cases. They’re not just influential; they’re foundational.
If you’re a language designer, you’re free to “target” a VM, meaning you’ll parse the source code of your language and turn it into more lines in something simpler, like compiling.
Python, Java and C# all do this; they compile to bytecodes that run on a VM.
Python has its own VM, written in C.
It also targets both the Java VM (Jython) and .NET (dot NET) as IronPython (discontinued). Ruby has its own VMs.
Scala and Clojure target the JVM, along with some other languages you might not have heard of.
Visual Basic targets .NET, as does F#.
Ruby actually comes with many VMs, starting with MRI, the defacto spec for the Ruby language, moving on to YARV with Ruby 1.9, but now back to MRI with 2.6.
I’m learning the Ruby story as I write this. I’ve played with Ruby, as well as C#, but don’t know either well.
.NET and the JVM seem to be the most popular VM targets for new languages. Rubinius doesn’t seem to be going anywhere at the time of this writing.
I don’t know of any language other than Python or Ruby targeting the Python or Ruby VMs. But I’m not the most knowledgeable source on these matters.
Some VMs are language specific. Others are targeted by multiple languages.
Perl is a whole can of worms in its own right, with Perl 5 and Perl 6 branches, both with their own VMs. The latest and greatest way to run Perl 6 is to compile with Rakudo to the MoarVM.
A point of terminology we should clear up, is Virtual Machine also stands for a layer under an operating system, whereas the VMs I’m talking about sit atop the OS to support specific bytecode languages.
VirtualBox and VMware and VMs of the type I’m not talking about.
If you run Windows or Linux in a VirtualBox, you will still need a Ruby VM or Perl VM as well.
The .NET VM is typically found on top Windows, as the Microsoft flagship VM, but is also in the form of Mono (pronounced “moe know” for monkey, not “mah no” the disease) on Linux and Mac.
The JVM runs on Windows, Mac and Linux.
Ruby has a few different VMs depending on platform as well. JRuby targets the JVM and is one of the most powerful and successful. The reference VM is still MRI.
IronPython and IronRuby were design to run on dot NET, however these projects both died over a decade ago.