1 Subject: Mes 0.12 released
3 I am pleased to announce the release of Mes 0.12, representing 120
4 commits over 20 weeks. MesCC is prototyped running on Guile and can
5 now run on Mes. Performance of Mes running MesCC has been improved by
6 a factor of 100; mes.c (~3000 LOC) now compiles in ~4min. Many fixes
7 and enhancements make that now also TinyCC parses (~1.5h) and compiles
8 (~20min) with Mes+MesCC (Guile+MesCC takes ~2min).
10 Special thanks go to Ricardo Wurmus for sharing the recursive macro
11 expand perspective and starting work on that, to Han-Wen Nienhuys for
12 his sharp `Ah, so you skipped SICP chapter 3' remark and to rain1 for
13 their continuous help on #bootstrapping and their `let's only expand
14 global variables' insight.
18 Mes[0] aims to create full source bootstrapping for GuixSD[1] as
19 part of the bootstrappable builds[2] project.
21 It currently consists of a mutual self-hosting [close to Guile-]
22 Scheme interpreter prototype in C and a Nyacc-based C compiler in
23 [Guile] Scheme. This C prototype will be simplified to be
24 transpiled by M2-Planet[3].
26 The Scheme interpreter prototype (mes.c) has a Garbage Collector,
27 a library of loadable Scheme modules-- notably Dominique Boucher's
28 LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
29 Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
30 enough to support a simple REPL (repl.mes) and simple C-compiler
33 MesCC can compile a modified TinyCC[8] that is close to being
34 self-hosting. A GNU Ccc-compiled tcc is known[9] to compile GCC.
36 Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
37 -- John McCarthy page 13, GNU Guix's source/binary packaging
38 transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting
43 git clone https://gitlab.com/janneke/mes
45 wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.12 -O mes-0.12.tar.gz
47 Mes runs from the source tree and can also be built, packaged and
48 installed in Guix[SD] by the usual
50 guix package -f guix.scm
52 * Changes in 0.12 since 0.11
54 *** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC).
55 *** Mes now recursively expands global variables per top level statement.
56 *** Mes now recursively expands macros per top level statement.
57 *** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm).
58 *** Mes now has a full Scheme reader in C again.
59 This gives a 10x-20x performance improvement and increases the
60 bootstrap footprint by 160 LOC.
61 *** Mes reader now supports older abbreviated character forms
62 #\bel, #\bs, #\ht and #\vt.
64 equal2?, memq, core:write.
66 *** Mes now has an incremental Scheme semantics test suite with 71 small tests.
67 *** Variable names can now have ticks.
68 *** Mes now evaluates expresions of COND only once.
69 *** srfi-9 records have been reimplemented.
70 *** #\page is now whitespace.
71 *** #<eof> is no longer a character.
73 define-macro*, with-fluids.
75 dirname, last, reverse-list->string, setenv, string-drop-right,
76 string-fold, string-fold-right, string-null?, write.
79 chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
80 **** 2 new header files
81 endian.h, sys/signal.h.
86 [0] https://gitlab.com/janneke/mes
87 [1] https://www.gnu.org/software/guix
88 [2] http://bootstrappable.org
89 [3] https://github.com/oriansj/m2-planet
90 [4] https://github.com/schemeway/lalr-scm
91 [5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
92 [6] https://www.nongnu.org/nyacc/
93 [7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
94 [8] https://gitlab.com/janneke/tinycc
95 [9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
96 [10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
97 [11] https://github.com/oriansj/stage0