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