govm is a semi-statically typed bytecode VM written in Go. It utilises Go's garbage collector rather than implementing its own, simplifying the implementation and reducing the size of the library when linking to Go programs.
govm contains a number of different packages with different purposes. Here is a summary of how the source code is layed out:
bytecode/
A package for reading and writing bytecodecodegen/
A package for generating GVB codedoc/
Documentation of the VM's internalsdoc/bytecode.md
Documentation of GVB, govm's bytecode representationdoc/instructions.md
Documentation of the VM's instruction set
examples/
Example programs written in GVA, govm's assembly-like IRgvas/
The govm assembler. Converts from GVA to GVBgvi/
A CLI for the VM. Allows running GVB files from the command lineopcode/
A package containing constants for each opcode bytestdlib/
The standard librarytypes/
Types used in many places throughout the project./vm.go
The core VM package. Interprets GVB./*_test.go
Tests for the VM