I've completed a first cut at a proof of concept for a direct-threaded interpreter, implementing a amazing language capable of generating any list of the digits 1, 2, and 3. (Just look out, world. Next week: the digit 4!) One version of the interpreter runs on x86, where I could use inline assembly in my C compiler to manipulate the callstack while leaving the majority of the implementation in C: call this version the proof of concept of a proof of concept. The other version runs on my target processor, the ARM, where my compiler doesn't support any sort of inline assembly; there, the entire interpreter core is in assembly, calling back into the C-language pscheme kernel for consing and so forth. This offers a strong motivation to keep the VM small.
In the VM I described a couple of weeks ago, the FRAME and CONT registers can be unified,
CONT being just a couple more fields in the frame.
I was led astray by not originally realizing that even the topmost computation has a continuation,
and that my VM should make that outermost continuation explicit.
Oddly, I realized this immediately upon waking one morning.
posted at: 19:34 | path: | permanent link to this entry