doc: Post-release update.
[mes.git] / doc / announce / ANNOUNCE-0.19
1
2 Subject: GNU Mes 0.19 released
3
4 <#secure method=pgpmime mode=sign>
5 We are pleased to announce the release of GNU Mes 0.19, representing
6 100 commits over 10 weeks.
7
8 Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
9 a GNU/Linux system without binary GNU toolchain or equivalent) and work
10 is ongoing to audit and verify this bootstrap path in NixOS.
11
12 This release introduces strings as byte-array, hash-tables and native
13 structs.  While that does increase the footprint somewhat, it fixes
14 our performance issue; tinycc is now compiled in ~8min (WAS: ~1h30).
15
16 Next targets:
17
18  - translate mes.c into unsnarfed mes.M2
19  - use Gash to remove bash, coreutils&co, grep, sed, tar from the Guix
20    bootstrap binaries
21  - replace the NixOS bootstrap
22  - use dietlibc, uClibc, ... for bootstrapping GNU (bash, binutils,
23    gcc, tar) and remove Mes C lib+gnu?
24  - bootstrap gcc-3.x or 4.x directly, drop initial gcc-2.95.3 target?
25  - have M1+hex2 create gcc/tcc-usable object files?  archives?
26  - Debian?
27  - ARM, the Hurd?
28
29 Packages are available from Guix's core-updates branch.
30
31 * About
32
33   GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to Guix[2] and
34   potentially to any other interested GNU/Linux distribution, and aims
35   to help create a full source bootstrap as part of the
36   bootstrappable builds[3] effort.
37
38   It consists of a mutual self-hosting Scheme interpreter written in
39   ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
40   This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
41
42   The Scheme interpreter (mes.c) has a Garbage Collector, a library of
43   loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
44   [portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test
45   suite just barely enough to support a simple REPL and simple
46   C-compiler: MesCC.
47
48   Mes+MesCC can compile an only lightly patched TinyCC[9] that is
49   self-hosting.  Using this tcc and the Mes C library we now have a
50   Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
51   binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
52   i686-linux and x86_64-linux.
53
54   Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
55   McCarthy page 13, GNU Guix's source/binary packaging transparency and
56   Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
57
58 * Download
59
60   git clone git://git.savannah.gnu.org/mes.git
61
62   Here are the compressed sources and a GPG detached signature[*]:
63     https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz
64     https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz.sig
65
66   Use a mirror for higher download bandwidth:
67     https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz
68     https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz.sig
69
70   Here are the MD5 and SHA1 checksums:
71
72   99e134df87adc5fc5fd2c04941929c23  mes-0.19.tar.gz
73   c9781b3b6a814acc985c2ac68caa111a56583bca  mes-0.19.tar.gz
74
75   [*] Use a .sig file to verify that the corresponding file (without the
76   .sig suffix) is intact.  First, be sure to download both the .sig file
77   and the corresponding tarball.  Then, run a command like this:
78
79     gpg --verify mes-0.19.tar.gz.sig
80
81   If that command fails because you don't have the required public key,
82   then run this command to import it:
83
84     gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
85
86   and rerun the 'gpg --verify' command.
87
88 Mes runs from the source tree and can also be built, packaged and
89 installed in Guix from a git checkout by running
90
91     guix package -f .guix.scm
92
93 * Get informed, get involved
94
95     See https://bootstrappable.org
96     Join #bootstrappable on irc.freenode.net.
97
98 * Changes in 0.19 since 0.18
99  ** Core
100  *** The build system has been simplified.
101  *** Mes now prints a backtrace upon error.
102  *** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile.
103  *** Mes now supports a module type and uses a `boot-module'.
104  *** Mes now supports a hash_table type.
105  *** Mes now supports a struct type.
106  *** Mes now supports building a %bootstrap-mes seed from Guix.
107  ** Language
108  *** Records are now implemented using struct (WAS: vector).
109  *** 44 new functions
110  ceil, char-downcase, char-set-adjoin, char-set-complement,
111  char-upcase, current-time, delete-file, dup, dup2, file-exists?,
112  floor, frame-printer, get-internal-run-time, getcwd, gettimeofday,
113  hash, hash-ref, hash-set!, hash-table-printer, hashq,
114  hashq-get-handle, hashq-ref, hashq-set, inexact->exact,
115  make-hash-table, make-stack, make-struct, module-define!,
116  module-printer, module-ref, module-variable, read-line, round,
117  stack-length, stack-ref, string-downcase, string-tokenize,
118  string-upcase, struct-length, struct-ref, struct-set! struct-vtable,
119  struct-vtable, with-error-to-file.
120  ** MesCC
121  *** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed.
122  *** MesCC now supports compiling GNU Bash and GNU Tar.
123  **** 6 New functions
124  getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask.
125  **** 22 New macros
126  EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN,
127  INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN,
128  SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP,
129  S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP,
130  S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX,
131  _POSIX_VERSION.
132  ** Noteworthy bug fixes
133  *** Mes now supports characters #\xNN.
134  *** Mes now supports assq-ref and assoc-ref with alist == #f.
135  *** Mes now supports \xNN in strings.  This allows using Nyacc-0.86.0.
136  *** MesCC now supports the unary plus operator.
137  *** MesCC now supports the `U' integer suffix.
138  *** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h.
139  *** MesCC now always exits non-zero when assembler or linker fail.
140
141 Greetings,
142 janneke
143
144 [0] https://www.gnu.org/software/mes
145 [1] http://joyofsource.com/reduced-binary-seed-bootstrap.html
146 [2] https://www.gnu.org/software/guix
147 [3] https://bootstrappable.org
148 [4] https://github.com/oriansj/mes-m2
149 [5] https://github.com/oriansj/m2-planet
150 [6] https://github.com/schemeway/lalr-scm
151 [7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
152 [8] https://www.nongnu.org/nyacc
153 [9] https://gitlab.com/janneke/tinycc
154 [10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
155 [11] https://github.com/oriansj/stage0