This is the fourth SITREP for my ongoing Make-a-Lisp project - a multi-step process that involves implementing
JKL: a Lisp interpreter capable, in theory, of self-hosting. Prior posts include Background,
Steps 0-4 and Steps 5-8.
Step 9 is the penultimate step, and adds exception handling and two new core functions:
apply. It’s good to be back on track after the painfully slow progress of Step 8.
The source code is on Github.
JKL REPL handles errors (such as a call to an undefined function) that occur during reading or evaluation using a C#
try...throw...catch... mechanism. Without such a mechanism, errors would potentially crash
JKL. Step 9 makes a similar mechanism available to hosted Lisp code, so that user-defined functions can themselves raise errors without stopping the overall program and dropping back to the underlying
JKL REPL. Error handling was very quick to implement (two evenings), given that the
JKL mechanisms are really just wrappers around the underlying C# equivalents. Pleasingly, the approach I used integrated cleanly with the TCO loop inside
EVAL (from step 5).
map were also both very quick (an hour or so for coding and running tests) with no significant problems to overcome. I initially used
EVAL internally to each to apply the function, but then realised that the
Apply method associated with
JKL functions is there for precisely this reason, so redid them both properly.
At this point, I’m almost ready for the last step, which is different from all the prior steps - as will be described in the next post in this series.