Interactive Bootstraps
Kovacsics Robert
One of the things that helps1 my depression is having interesting projects to do. A long running one for me is bootstrapping a high level language with the maximum interactivity, rather than with some opaque binary blob.
The original inspiration came from the GNU Mes (Maxwell’s Equations for Software), but there are numerous other sources of inspiration, some I have probably forgotten.
Initially I started with a small stack based VM which uses printable ASCII characters as instructions, so could be typed, but quickly came across JONESFORTH, which at the same time is both a nice introduction to assembly programming, and an introduction to Forth, a language only slightly less minimal than my stack based printable ASCII interpreter, but is much more powerful.
But Forth is not very easy to understand, so I went down the literate programming route to try and help that, with the aim of writing something like a series of blog posts, or maybe even a book. My original try was using Emacs’ Org Mode for the tangling (converting a literate program to executable code) and weaving (converting a literate program to a document).
During my work at Carallon, we use Gerrit, which has a much bigger focus on telling a story with commits. This, as well as the Little LISPer/Little Schemer books, and Xe Iaso’s blog made me re-think the whole idea as a code-review formatted into a book. I have some very initial drafts, see in particular this page.
To do the formatting, and editing, I decided on forking git-appraise, because that has the review inside the git repo (using git-notes), which makes it more easily editable and publishable than something which uses a database (turns out Gerrit also uses git-notes). It is enough to get started with, but I might end up revisiting it, and changing it further
Something that is definitely missing, is syntax highlighting, though I don’t miss it so much. Perhaps this is inspired by my prior use of the Acme editor from Plan 9.
Or at least distracts me from it, and enables time to pass. ↩︎