153047d8e96caac934e77b62f793da80ce9c1f1c
[mes.git] / NEWS
1                                                               -*- org -*-
2 #+TITLE: Mes NEWS – history of user-visible changes
3 #+STARTUP: content hidestars
4
5 Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
6
7   Copying and distribution of this file, with or without modification,
8   are permitted in any medium without royalty provided the copyright
9   notice and this notice are preserved.
10
11 Please send Mes bug reports to janneke@gnu.org.
12
13 * Changes in 0.15 since 0.14
14 ** Core
15 *** Support fork, exec, waitpid.
16 *** Boot-0 loading has been refactored.
17 *** MesCC now has out of the box Geiser support.
18 ** Language
19 *** 2 new functions
20 drop, drop-right.
21 ** MesCC
22 *** MesCC and Mes Lib C can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5.
23 *** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those.
24 *** Mes Lib C now supports compiling glibc-2.2.25.
25 *** Mes Lib C now supports compiling gcc-2.95.3
26 *** Mes Lib C now supports compiling binutils-2.30.
27 *** Mes Lib C now supports compiling m4-1.4.
28 *** Mes Lib C has been split into archs: gcc, x86-mes-gcc and x86-mes.
29 *** MesCC now has a posixy command line interface.
30 **** 70 new functions
31 abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero,
32 chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof,
33 fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid,
34 getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii,
35 iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp,
36 nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir,
37 sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror,
38 strncat, strpbrk, strspn, unlink, unsetenv, waitpid.
39 **** 23 new stubs
40 abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead,
41 frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf,
42 sigsetmask, strftime, sys_siglist, system, times, umask, utime.
43 **** 10 new C tests
44 51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c,
45 92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c.
46
47 * Changes in 0.14 since 0.13
48 ** Core
49 *** Bootstrapped Mes+MesCC  now compiles a tcc that is self-hosting and only slightly patched.
50 *** The reader now supports binary numbers (previously: read as decimal).
51 *** String port support has been moved to C.
52 *** The build has been simplified, the Make-in-Scheme experiment has been removed.
53 *** 2 new functions
54 chmod, logxor.
55 ** Language
56 *** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu.
57 *** 12 new functions
58 basename, chmod, const, delete-duplicates, logxor, string-contains,
59 string-map, string-replace, string-trim, string-trim-both,
60 string-trim-right, unfold.
61 ** MesCC
62 *** MesCC now supports standalone usage of nestedly defined enums, structs and unions.
63 *** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned.
64 *** MesCC now supports sign extension for char, short.
65 *** MesCC now has stubbing for floats; compiling works, data is fu.
66 *** MesCC now has full suport for switch case, e.g. with default as first clause.
67 *** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar.
68 *** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations.
69 *** MesCC now supports sizeof any expression or type.
70 *** MesCC now supports initialization of anonymous unions.
71 *** MesCC now supports bit fields.
72 *** MesCC now supports valued functions in expressions: destruction and dereferencing.
73 *** MesCC now supports function-static variables.
74 *** MesCC now supports initializer lists in structs and unions.
75 *** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3];
76 **** 4 new functions
77 __lshrdi3, __ashldi3, __ashrdi3, strncpy.
78 **** 9 new mlibc stubs
79 __fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp,
80 strtod, strtof, strtold.
81 * Changes in 0.13 since 0.12
82 ** Core
83 *** Bootstrapped Mes+MesCC can now compile a patched tcc in ~1h45' (~25,000 LOC).
84 *** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'.
85 *** Mes now uses only one arena for stop-and-copy; doubles available size.
86 *** Mes now has a Guile-like command-line interface (mes.repl has been removed).
87 *** Mes now boots into a full Scheme by default.
88 *** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells).
89 *** Mes now creates less garbage in the reader and in
90 append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map.
91 *** 5 new functions
92 append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!.
93 ** Language
94 *** 3 new functions
95 char-whitespace?, chmod, isatty?
96 ** Noteworthy bug fixes
97 *** Two bugs in the jam scraper/garbage collector have been fixed.
98 *** equal2_p now uses tail call elimination.
99 *** Escaped characters in strings are now read and write'd correctly.
100 *** The repl now expands macros again.
101 * Changes in 0.12 since 0.11
102 ** Core
103 *** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC).
104 *** Mes now recursively expands global variables per top level statement.
105 *** Mes now recursively expands macros per top level statement.
106 *** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm).
107 *** Mes now has a full Scheme reader in C again.
108 This gives a 10x-20x performance improvement and increases the
109 bootstrap footprint by 160 LOC.
110 *** Mes reader now supports older abbreviated character forms
111 #\bel, #\bs, #\ht and #\vt.
112 *** 3 new functions
113 equal2?, memq, core:write.
114 ** Language
115 *** Mes now has an incremental Scheme semantics test suite with 71 small tests.
116 *** Variable names can now have ticks.
117 *** Mes now evaluates expresions of COND only once.
118 *** srfi-9 records have been reimplemented.
119 *** #\page is now whitespace.
120 *** #<eof> is no longer a character.
121 *** 2 new macros
122 define-macro*, with-fluids.
123 *** 9 new functions
124 dirname, last, reverse-list->string, setenv, string-drop-right,
125 string-fold, string-fold-right, string-null?, write.
126 ** MesCC
127 **** 9 new functions
128 chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
129 **** 2 new header files
130 endian.h, sys/signal.h.
131
132 * Changes in 0.11 since 0.10
133 ** MesCC
134 *** MesCC now compiles a mes-tcc that fails 41/69 of mescc's C tests.
135 *** MesCC's libc can now be compiled with tcc (syscall support: write).
136 *** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747].
137 *** MesCC now supports empty for.
138 *** MesCC has been greatly refactored, 500/3000 lines have been removed.
139 *** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar].
140 *** MesCC now depends on Nyacc 0.82.4.
141 * Changes in 0.10 since 0.9
142 ** Core
143 *** 2 new functions
144 logand, lognot.
145 *** Mes now includes M1 sources for full source bootstrapping up to tcc.
146 ** Mescc
147 *** Mescc now depends on Nyacc 0.81.0.
148 *** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
149 *** Mescc now supports several (as used my tinycc) struct by value assignments.
150 *** Mescc now has _start in a separate crt1.c.
151 *** Mescc now supports initializer arithmetic.
152 *** Mescc now supports arrays of struct of arbitrary size.
153 *** Mescc now supports pointer arithmetic.
154 *** Mescc now defines __i386__, __linux__.
155 *** Mescc now supports --*p, ++*p.
156 *** Mescc now supports int foo[bar] = {baz,...}.
157 *** Mescc now supports \x00 in strings in M1.
158 *** Mescc now supports complex enum expressions.  Thanks, rain1!
159 *** Mescc now supports short.
160 *** Mescc now supports foo.bar = foo.baz = bla.
161 *** Mescc now supports foo = bar < baz and comparison permutations.
162 *** Mescc now supports (anonymous) structs in unions.
163 *** Mescc now writes M1 strings if possible.
164 **** 2 improved mlibc functions
165 malloc, realloc.
166 **** 13 new mlibc functions
167 fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat,
168 strchr, strrchr, strtoull, vnsprintf.
169 **** 15 new tinycc-support tests
170 76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c,
171 79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c,
172 7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c,
173 7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c,
174 7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c,
175 7k-for-each-elem.c.
176 ** Noteworthy bug fixes
177 *** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations.
178 *** Many bugs and limitations in mescc have been fixed and removed.
179 * Changes in 0.9 since 0.8
180 ** Core
181 *** Mes now builds better in non-Guix[SD] legacy distros/environments.  Thanks, rain1!
182 ** Mescc
183 *** Mescc now compiles a modified tinycc into a running [mostly segfaulting] mes-tcc.
184 https://gitlab.com/janneke/tinycc branch wip-mescc.
185 *** Mescc now supports locals stack frame larger than 1 byte offset.
186 *** Mescc now supports incomplete struct initializers {0}.
187 *** Mescc now supports >>=, <<=, ^=, ~.
188 *** Mescc now supports the comma operator.
189 *** Mescc now supports mullti-line string initializers.
190 *** Mescc now supports unions.
191 *** Mescc now supports arrays in structs.
192 *** Mescc now supports structs in structs.
193 *** Mescc now builds and runs with Guile-2.0 (legacy distro support, Guile-2.2 recommended).
194 *** Mescc has been refactored to use records.
195 *** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
196 *** Mescc now has an incremental test suite consisting of 56 tests.
197 *** Mescc now supports stdarg variable argument lists.
198 *** Mescc now has __GNUC__ unset, #f (WAS: 0).
199 *** Mescc now depends on Nyacc 0.80.3.
200 *** Mescc now depends on M1 from [[https://github.com/oriansj/mescc-tools][mescc-tools]] v0.2.
201 *** Mescc now compiles to M1 object files.
202 **** 7 new mlibc functions
203 calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
204 **** 31 new mlibc stubs
205 execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
206 ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
207 qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
208 strtol, strtoll, strtoul, strtoull, time, vnsprintf.
209 **** 10 new header files
210 alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
211 stdnoreturn.h, sys/select.h, sys/wait.h.
212 ** Noteworthy bug fixes
213 *** Many bugs and limitations in mescc have been fixed and removed.
214 * Changes in 0.8 since 0.7
215 ** Mescc
216 *** Mescc now has experimental annotation support for hex2.
217 *** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/mescc-tools][mescc-tools]].
218 Direct ELF output support has been removed.
219 ELF symbol and string table creation has been removed.
220 *** Mescc has been simplified by leveraging use labels in hex2 output.
221 *** Mescc now supports continue in loops.
222 *** Mescc now compiles to hex2 object files.
223 ** Language
224 *** 1 new function
225 list-index.
226 * Changes in 0.7 since 0.6
227 ** Core
228 *** The minimal C reader is now always included; dependencies
229 on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been
230 dropped, these are now optional.
231 ** Language
232 *** Mes reader now supports octal numbers #oXXX.
233 *** 10 new functions
234 current-output-port, getopt-long, negate, open-output-file,
235 option-ref, set-current-output-port, string-rindex, string-suffix?,
236 with-ouwith-output-to-file, with-output-to-port.
237 ** Mescc
238 *** Mescc can now be installed and used alongside a gcc installation.
239 *** Mescc can now handle const anywhere.
240 *** Mescc now supports array fields in structs.
241 *** Mescc now supports forward declarations and typedef.
242 *** Mescc can now handle comments anywhere.
243 *** Mescc now supports addition and substraction for enum field values.
244 *** Mescc now supports anonymous enums.
245 *** Mescc now supports all C99 header files needed to compile tcc.c.
246 *** build: C sources are now preprocessed separately, then compiled and linked.
247 *** build: mlibc and C sources are now compiled separately and then linked.
248 *** mlibc has been moved from Scheme snippets into C.
249 *** Mescc now supports -c, -D, -E, -I and -o options.
250 **** open now supports optional third mode parameter.
251 ** Noteworthy bug fixes
252 *** string-index now supports function predicate.
253 *** number->string for radix > 10 now produces `a' instead of `:'.
254 * Changes in 0.6 since 0.5
255 ** Core
256 *** configure, build now supports x86 and development for arm with-courage.
257 ** Language
258 *** Nyacc has been unbundled and is now a dependency.
259 *** Mes now supports case-lambda.
260 *** Mes reader now supports abbreviated form for return character #\cr.
261 *** 1 new function
262 string-index.
263 ** Mescc
264 *** Mescc can be used on regular C sources, like tinycc's tests/test2 suite.
265 *** make check passes 33/55 of tinycc's test suite etest/test2 tests.
266 *** Mescc now recognizes `short' as a type.
267 *** Mescc now supports sizeof (<identifier>), sizeof(<expression>).
268 *** Mescc now respects enum field initializers and supports enum variables.
269 *** Mescc now supports binary constants .
270 *** Mescc now supports assignments from ==, != boolean expressions .
271 *** Mescc now supports &, ^.
272 *** Mescc now supports struct pointers.
273 *** Mescc now supports struct definition with immediatete variable declaration.
274 *** Mescc now supports calling (returning correctly from) void functions.
275 *** Mescc now handles case statements breaks without compound correctly.
276 *** Mescc now has better [int/pointer] array support.
277 *** Mescc now has better support for simple (non-array-)structs.
278 *** Mescc now supports multiple declarations in one statement like: int a,b;
279 **** 2 new mlibc functions
280 printf, strcpy.
281 ** Noteworthy bug fixes
282 *** Installed mes and mes.repl now also run outside of source tree again.
283 * Changes in 0.5 since 0.4
284 ** Core
285 *** Support compilation with Mescc.
286 *** Support compilation with -nostdinc, -nostdlib using mlibc.
287 *** Support call-with-current-continuation.
288 *** Support exception handling, catch/throw.
289 *** Give sensible error message when a macro is missing.
290 ** Language
291 *** Map now supports 4 lists.
292 *** The reader supports negative hex numbers.
293 *** 24 new functions
294 access?, assoc-set! c????r, compose, list->char-set,
295 open-input-string, read-string, string-delete, with-throw-handler.
296 ** Mescc
297 *** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
298 *** Switch to Nyacc frontend, update Nyacc to 0.76.5.
299 *** Mescc now has a test suite, scaffold/t.c.
300 *** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c.
301 *** Mescc can now compile mes.c.
302 ** Noteworthy bug fixes
303 *** The build system (configure, make) has been refactored.
304 *** Support map-4.
305 *** Evaluate arguments of OR only once.
306 *** Fix assq-set!
307 *** Fix ,expand in the REPL.
308
309 * Changes in 0.4 since 0.3
310 ** Core
311 *** Improved performance.
312 Macros are now memoized; after expansion and before eval'ing the
313 expanded form, their input s-expression is replaced by the expansion.
314 This yields a nice performance improvement which finally allowed
315 moving all non-essential bits from the C-core into Scheme...including
316 the reader.  The Scheme reader is much, much slower than the previous
317 C version, making Mes--again-- feel slow.  Think of that as a feature.
318 *** Bootstrap with minimal reader in C.
319 The C-reader needs only support reading of words and lists
320 (s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
321 then takes over and handles reading of quoting, characters, strings,
322 block-comments.
323 *** Reduced size.
324 Total C size: ~1500LOC.  The main Mes evaluator is now ~1000LOC
325 including cell creation and garbage collector.  This code is able to
326 execute a Scheme program that has been loaded into memory.  Another
327 ~500LOC is spent to load a minimal Scheme program and to dump it, to
328 provide a small posix interface, math functions and do some error
329 reporting.
330 *** Programs can be dumped and loaded using --dump and --load.
331 ** Language
332 *** Minimal syntactic exception support for Nyacc.
333 *** Minimal syntactic fluids support for Nyacc.
334 *** Keywords are now supported.
335 *** Cond now supports =>.
336 *** Guile's optargs: lambda* and define* are now supported.
337 *** #;-comments are now supported.
338 *** Non-nested #| |#-comments are now supported.
339 *** Quasisyntax is now supported.
340 *** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
341 *** 9 new [partial] modules
342 (mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
343 (srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
344 (rnrs arithmetic bitwise), (sxml xpath)
345 *** 36 new functions
346 1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
347 char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
348 getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
349 positive?, remove!, remove, string->number, string-copy,
350 string-prefix?, string=, string=?, symbol->keyword symbol-append,
351 symbol-prefix?, unless, write, zero?.
352 ** Noteworthy bug fixes
353 *** Macros are now memoized.
354 *** An error is reported when using a wrong number of arguments with a call.
355 *** Cond now evaluates its test clauses only once.
356 *** Append can also handle one argument.
357 *** For-each now supports 2 list arguments.
358 *** Map now supports 3 list arguments.
359 *** Backslash in string is supported.
360 *** Closure is not a pair.
361 *** All standard characters are supported.
362 *** Mescc now also runs in Guile.
363 * Changes in 0.3 since 0.2
364 ** Core
365 *** Number-based rather than pointer-based cells.
366 *** Garbage collector aka Jam scraper.
367 A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?)
368 algorithm has been implemented.
369 *** The reader has been moved to Scheme.
370 ** Language
371 *** Simple loadable modules.
372 *** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
373 *** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
374 ** Noteworthy bug fixes
375 *** Srfi-0 has been fixed.
376 * Changes in 0.2 since 0.1
377 ** Core
378 *** Names of symbols and strings are list of characters [WAS: c-string].
379 *** Sc-expand from pre-R6RS's psyntax has been integrated.
380 *** Undefined variable error now shows the name of the undefined variable.
381 *** There is now only one SCM type for builtin functions.
382 *** Macro expansion has been cleaned-up.
383 ** Language
384 *** Mes now provides a subset of R6RS.
385 *** Mes now provides syntax-case.
386 *** Mes now provides `load'.
387 ** Noteworthy bug fixes
388 *** Using values as second parameter of builtin function yields first value.
389 *** Quoted internals (e.g. 'if 'lambda) are now symbols.
390 *** Syntax error now exits.
391 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
392 *** Apply now accepts multiple list arguments.
393 *** Apply of character, inernal, number, string is an error.
394 *** Quasisyntax reading
395
396 * Changes in 0.1 (since progress report #2)
397 ** Core
398 *** expand_macro is now a separate function.
399 *** A smaller core can now compiled using BOOT=1.
400 The smaller core does not provide define, define-macro, or quasiquote;
401 these are provided from a Scheme version of implemented eval/apply.
402 ** Language
403 *** Mes now provides a subset of R5RS.
404 *** Mes now provides let-syntax.
405 *** Mes now provides match.
406 *** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
407 ** User interface
408 *** Mes now provides a REPL, run:
409     scripts/repl.mes
410 *** Mes compiler can be run as a script:
411     scripts/mescc.mes doc/examples/main.c
412 *** Macro expansion can be inspected in the REPL, e.g.:
413     ,expand (and 0 1)
414 ** Noteworthy bug fixes
415 *** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
416 *** Symbols are now truly unique.
417   * '(), #t, #f are no longer symbols.