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