Stage 1: oftb
and oftcesk
oftb
is an interpreter written in Rust, using a naive interpretation model.
Since it doesn't have tail-call, it's very slow and often overflows the stack on medium-sized programs.
However, it is capable of macro expansion.
oftcesk
is a CESK-semantics-based interpreter, inspired by Writing an interpreter, CESK-style.
It does not contain a language frontend; instead it runs a bytecode produced by oftb
.
Stage 2: oftc-bootstrap
oftc
is an OftLisp-to-LLVM compiler written in OftLisp.
The oftc-bootstrap
backend is used as a surrogate for proper FFI; instead, it outputs LLVM 3.9 IR in textual form.
Stage 3: oftc
Once oftc-bootstrap
is self-hosting, it makes sense to develop more backends.
A std/ffi
-using cretonne or LLVM backend is the first priority.
At that point, the compiler is "finished."