Saturday, November 12, 2005
Register-based Virtual Machines
I agree that EM-1 and JVM do differ in many ways, but they are unusual in that both are register-free stack machines, an oddity these days.
I've always regarded register-free stack VM's as being the norm - you certainly don't need to look around too far to find them. Here's a short list (by no means exhaustive) off the top of my head:
- Java virtual machine
- Microsoft .NET CLR (based on ECMA 335)
- ACK's EM virtual machine
- UCSD p-code, commonly used in Pascal implementations
- Core of the Python interpreter
- Forth (more correctly, a dual stack machine)
- Smalltalk, and Squeak
Finding a list of register-based VM's required more work, but I quickly dug-up:
There are also a couple of papers (related authors) on the topic:I'm not yet convinced that stack-based VM's are an oddity! Certainly, RISC architectures with large register sets have transformed computing hardware, but within the software world there still appears to be a bias toward stack-based machines. Is this a consequence of van der Poel's dictum that a machine should have 0, 1, or an infinite number of any feature? This last quote is from Andy Tanenbaum (and co-authors) in Description of a Machine Architecture for use with Block Structured Languages, which is the definition of the EM virtual machine - and now I find myself bottoming out of this memes recursion :-)