mescc: Refactor type system: struct/enum fields: (name . <type>).
[mes.git] / doc / ANNOUNCE-0.9
1 Subject: Mes 0.9 released
2
3 I am pleased to announce the release of Mes 0.9, representing 107
4 commits over 5 weeks.  Mescc now compiles to a surprisingly readable
5 stage0 M1 macro assembler output format.  Mescc now compiles a
6 modified TinyCC into a running [mostly segfaulting] executable.  This
7 is a major milestone as tcc can compile GCC.
8
9
10 * About
11
12     Mes[0] aims to create full source bootstrapping for GuixSD[1] as
13     part of the bootstrappable builds[2] project.
14
15     It currently consists of a mutual self-hosting [close to Guile-]
16     Scheme interpreter prototype in C and a Nyacc-based C compiler in
17     [Guile] Scheme.  This C prototype will be rewritten in stage0[3]
18     M1 assembly (or possibly stage2 slow-LISP, or ...).
19
20     The Scheme interpreter prototype (mes.c) has a Garbage Collector,
21     a library of loadable Scheme modules-- notably Dominique Boucher's
22     LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
23     Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
24     enough to support a simple REPL (repl.mes) and simple C-compiler
25     (mescc.mes).
26
27     The simple C compiler can compile a modified TinyCC[8].  This
28     needs more work.  A gcc-compiled tcc is known[9] to compile GCC.
29
30     Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
31     -- John McCarthy page 13, GNU Guix's source/binary packaging
32     transparency and Jeremiah Orians's stage0 ~300 byte self-hosting
33     hex assembler.
34
35 * Download
36
37     git clone https://gitlab.com/janneke/mes
38
39     wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.9 -O mes-0.9.tar.gz
40
41 Mes runs from the source tree and can also be built, packaged and
42 installed in Guix[SD] by the usual
43
44     guix package -f guix.scm
45
46 * Changes in 0.9 since 0.8
47  ** Core
48  *** Mes now builds better in non-Guix[SD] legacy distros/environments.  Thanks, rain1!
49  ** Mescc
50  *** Mescc now compiles a modified tinycc into a running [mostly segfaulting] tcc.mes.
51  https://gitlab.com/janneke/tinycc branch wip-mescc.
52  *** Mescc now supports locals stack frame larger than 1 byte offset.
53  *** Mescc now supports incomplete struct initializers {0}.
54  *** Mescc now supports >>=, <<=, ^=, ~.
55  *** Mescc now supports the comma operator.
56  *** Mescc now supports mullti-line string initializers.
57  *** Mescc now supports unions.
58  *** Mescc now supports arrays in structs.
59  *** Mescc now supports structs in structs.
60  *** Mescc has been refactored to use records.
61  *** Mescc now builds and runs with Guile-2.0 (legacy distro support, not recommended).
62  *** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
63  *** Mescc now has an incremental test suite consisting of 56 tests.
64  *** Mescc now supports stdarg variable argument lists.
65  *** Mescc now has __GNUC__ unset, #f (WAS: 0).
66  *** Mescc now depends on Nyacc 0.80.3.
67  *** Mescc now depends on M1 from MESCC_Tools v0.2.
68  *** Mescc now compiles to M1 object files.
69  **** 7 new mlibc functions
70  calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
71  **** 31 new mlibc stubs
72  execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
73  ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
74  qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
75  strtol, strtoll, strtoul, strtoull, time, vnsprintf.
76  **** 10 new header files
77  alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
78  stdnoreturn.h, sys/select.h, sys/wait.h.
79
80 Greetings,
81 janneke
82
83 [0] https://gitlab.com/janneke/mes
84 [1] https://www.gnu.org/software/guix
85 [2] http://bootstrappable.org
86 [3] https://github.com/oriansj/stage0
87 [4] https://github.com/schemeway/lalr-scm
88 [5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
89 [6] https://www.nongnu.org/nyacc/
90 [7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
91 [8] https://gitlab.com/janneke/tinycc
92 [9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
93 [10] http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf