intro
The goal of liblg is to create a reasonably fast, minimal stack-based VM in C. It implements just enough functionality to do recursive Fibonacci (with tail call optimization) and comes equipped with a custom assembler. The general idea is that it's very useful to have access to extensible core stack vm functionality in library form, for implementing custom DSLs on top etc.
setup
liblg requires a C compiler and CMake to build.
$ git clone https://github.com/codr7/liblg.git
$ cd liblg
$ mkdir build
$ cd build
$ cmake ..
$ make fibrec
$ ./fibrec
193128us
design
The core loop uses computed goto, which means that new instructions must be added in identical order here and here.
Fundamental types are global (as in not tied to a specific VM instance), new types may be added here and initialized here.
Values are represented as tagged unions.
assembler
liblg comes equipped with a custom assembler syntax that provides a transparent interface to it's functionality.
benchmarks
The VM is currently around 40% faster than Python3 and 14 times as slow as Go, ideas on how to make it run significantly faster without making a mess are most welcome.
$ cd bench
$ python3 fibrec.py
353813us
$ go run fibrec.go
14170us