Update documentation, remove old bug files, move bugs into bugs/.
[mes.git] / HACKING
1 -*-mode:org-*-
2 * Booting from LISP-1.5 into Mes
3
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.
6
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.
11
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.
15
16 Bootstrapping has been removed and mes.c implements enough of R3RS to
17 run a macro-based define-syntax and syntax-rules.
18
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.
25
26 mes.c is ~1200 lines which seems much too big to start translating it
27 to assembly/hex.
28
29 * Garbage collection
30 Mes is using malloc without freeing anything, memory is patient these
31 days :-)
32
33 * The [GuixSD] boostrap binaries
34 ** Run a C parser on Mes
35 *** Find/port a PEG C and parse minimal C program
36 *** Generate an executable from this C-AST
37 *** Find a tiny C compiler that can compile gcc