"The VM code is about 2K lines long, the multipass compiler code is about 3K lines and the shared code is about 2K lines long."<p>I was surprised by these numbers so I checked, and this is highly misleading (or very much out of date). The parser alone (<a href="https://github.com/marcobambini/gravity/blob/master/src/compiler/gravity_parser.c" rel="nofollow">https://github.com/marcobambini/gravity/blob/master/src/comp...</a>) is over 2K lines, and with the lexer and the AST definitions the <i>frontend</i> of the compiler is already comfortably above 3K lines. Also, the VM (<a href="https://github.com/marcobambini/gravity/blob/master/src/runtime/gravity_vm.c" rel="nofollow">https://github.com/marcobambini/gravity/blob/master/src/runt...</a>) is about 2K lines, but then there is another 3K lines in another "runtime" file (<a href="https://github.com/marcobambini/gravity/blob/master/src/runtime/gravity_core.c" rel="nofollow">https://github.com/marcobambini/gravity/blob/master/src/runt...</a>).<p>Still, it's not a huge project, and it might be interesting as a point of study for people interested in compilers (to bytecode) or bytecode interpreters. The input syntax looks pretty as well.<p>Interestingly, <a href="https://github.com/marcobambini/gravity/blob/master/src/runtime/gravity_vm.c" rel="nofollow">https://github.com/marcobambini/gravity/blob/master/src/runt...</a> also serves as a nice illustration of the fact that if tabs are allowed in source code, people will <i>mix</i> them with spaces, resulting in code that looks bad unless you have the exact same tab width preferences as the author.