For a while at the beginning of this last summer I was working on the Nabla Virtual Machine. Working on Nabla got me thinking about virtual machines and language creation, and while development on Nabla ceased when I decided to move I didn't stop thinking about how it could be improved. Some of the biggest issues I had with Nabla weren't in the use of the ASM directly, but in how the weird byte code made generating ASM from a high level language difficult. Instead of attempting to rework Nabla and make it easier I decided to do something more extreme. I decided I would build a new system from the ground up using Rust.
Why Rust? Primarily because I've adopted it as my favorite language. The way the syntax works pleases me. The fact that you can directly encode / decode endianess from primitive types is fantastic. The list can go on, but to be brief I will stop there.
So what does this mean? It means I got to pick a different Greek letter and tack "VM" on it. I like this method of naming things because I'm not very creative when it comes to naming things. A week ago (give or take) I decided to do just that. Since then I've been clacking away on the Lambda Virtual Machine (ΛVM) and now have something that I'm already pretty proud of. Changing languages to Rust made development at least 5x faster, and changing to a more conventional byte code made things go a lot smoother in testing and development.
The development of the ΛVM is still heavily underway but I will attempt to briefly describe the differences between Nabla and Lambda here:
- Lambda will not have individual stacks per-function, not will it use a stack for a global memory.
- Lambda stacks are simple push-pop and intended for short-term use.
- Instructions and code will not be separated and unable to be self referencing.