aec95bd256d25edf88f21d17ad996f635e96795d
[mes.git] / doc / announce / ANNOUNCE-0.12
1 Subject: Mes 0.12 released
2
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).
9
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.
15
16 * About
17
18     Mes[0] aims to create full source bootstrapping for GuixSD[1] as
19     part of the bootstrappable builds[2] project.
20
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].
25
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
31     MesCC (mescc.mes).
32
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.
35
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
39     hex assembler.
40
41 * Download
42
43     git clone https://gitlab.com/janneke/mes
44
45     wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.12 -O mes-0.12.tar.gz
46
47 Mes runs from the source tree and can also be built, packaged and
48 installed in Guix[SD] by the usual
49
50     guix package -f guix.scm
51
52 * Changes in 0.12 since 0.11
53  ** Core
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.
63  *** 3 new functions
64  equal2?, memq, core:write.
65  ** Language
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.
72  *** 2 new macros
73  define-macro*, with-fluids.
74  *** 9 new functions
75  dirname, last, reverse-list->string, setenv, string-drop-right,
76  string-fold, string-fold-right, string-null?, write.
77  ** MesCC
78  **** 9 new functions
79  chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
80  **** 2 new header files
81  endian.h, sys/signal.h.
82
83 Greetings,
84 janneke
85
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