43 lines
1.6 KiB
Org Mode
43 lines
1.6 KiB
Org Mode
-*-mode:org-*-
|
|
* Booting from LISP-1.5 into Mes
|
|
|
|
Mes started out experimenting with booting from a hex-coded minimal
|
|
LISP-1.5 (prototype in mes.c), into an intepreted full-flegded Scheme.
|
|
|
|
When EOF is read, the LISP-1.5 machine calls loop2 from loop2.mes,
|
|
which reads the rest of stdin and takes over control. The functions
|
|
readenv, eval and apply-env in mes.mes introduced define, define-macro
|
|
quasiquote and macro expansion.
|
|
|
|
While this works, it's amazingly slow. We implemented a full reader
|
|
in mes.c, which makes running mes:apply-env mes:eval somewhat
|
|
bearable, still over 1000x slower than running mes.c.
|
|
|
|
Bootstrapping has been removed and mes.c implements enough of R3RS to
|
|
run a macro-based define-syntax and syntax-rules.
|
|
|
|
loop.mes and mes.mes are unused and lagging behind. Probably it's not
|
|
worth considering this route without a VM. GNU Epsilon is taking the
|
|
more usual VM-route to provide multiple personas. While that sounds
|
|
very cool, Lisp/Scheme, bootstrapping and trusted binaries are
|
|
probably not in scope as there is no mention of such things; only ML
|
|
is mentioned while Guile is used for bootstrapping.
|
|
|
|
mes.c is ~1200 lines which seems much too big to start translating it
|
|
to assembly/hex.
|
|
|
|
* Garbage collection
|
|
Mes is using malloc without freeing anything, memory is patient these
|
|
days :-)
|
|
|
|
* The [GuixSD] boostrap binaries
|
|
** Run a C parser on Mes
|
|
*** Run simple PEG on Guile
|
|
*** Run simple PEG on Mes
|
|
*** Find/port a PEG C and parse minimal C program
|
|
*** Generate an executable from this C-AST
|
|
*** Find a tiny C compiler that can compile gcc
|
|
** Run lalr on Mes
|
|
*** Get paren.scm test running
|
|
*** Translate cgram.y into lalr, generate AST
|