build: Fix configure crashing when no compiler is present.
[mes.git] / NEWS
1                                                               -*- org -*-
2 #+TITLE: GNU Mes NEWS – history of user-visible changes
3 #+STARTUP: content hidestars
4
5 Copyright © 2016,2017,2018,2019,2021,2022 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 bug-mes@gnu.org.
12
13 * Changes in 0.24 since 0.23
14 ** Core
15 *** Mes and Mes C Library can now be built with M2-Planet.
16 *** Mes now supports the --bootstrap build on ARM.
17 ** MesCC
18 *** MesCC now supports the integer suffixes:
19 Next to `U', also support `ULL', `UL', `L', and `LL'.
20 ** Noteworthy bug fixes
21 *** MesCC now uses the unsigned type for sizeof.
22 *** MesCC now only uses signed division if numerator is signed.
23 *** The Mes C library now supports an argv bigger than 255.
24 *** Development build support with Guile-2 was resurrected.
25 *** The logand procedure now works correctly.
26 *** The 64bit build was resurrected.
27 * Changes in 0.23 since 0.22
28 ** Core
29 *** Mes and Mes C Library can now be built with GCC 10.x.
30 ** MesCC
31 *** The Mes C Library now supports an armhf-linux bootstrap.
32 *** MesCC now supports ARM.
33 *** mini.c library was split into _exit.c, and _write.c.
34 *** When building with GCC, -lgcc is now used.
35 *** MesCC now has it's own support library libmescc.a (-lmescc).
36 *** MesCC now requires mescc-tools-0.7.0 or later for ARM.
37 *** MesCC can be now built with nyacc-1.00.2:
38 note that nyacc-1.03.0 is not (backwards) compatible.
39 *** MesCC can be built with Guile 3.0.x:
40 See https://bugs.gnu.org/43831; use guild compile -O1 with Guile 3.0.x.
41 *** MesCC now raises SIGABRT on abort, if supported.
42 ** Noteworthy bug fixes
43 *** unreadchar on EOF is now a no-op.
44 *** malloc now aligns the blocks it gives out to max_align_t.
45 * Changes in 0.22 since 0.21
46 ** Core
47 *** Mes now builds reproducibly with MesCC, cross distribution
48 Using --with-bootstrap on x86, a bin/mes-mescc is compiled with
49 mes+mescc, that shall have sha256sum
50
51     722790ed261954eb53cf2cd2906c89c7589ef72b66171bbe2a9dce0f0af20232  bin/mes-mescc  v0.22
52     9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb  bin/mes-mescc  v0.21
53
54 only differing in the version number string.
55
56 This has been verified on GNU Guix, Debian GNU/Linux and NixOS.
57 *** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC.
58 *** Mes now builds reproducibly with Tiny CC-built MesCC.
59 *** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS.
60 *** Mes now supports mescc-tools 0.5.2 next to 0.6.1.
61 This allows introducing the Scheme-only bootstrap without updating or
62 adding new bootstrap binary seeds into GNU Guix.
63 *** Mes now runs when configured --with-courage on the Hurd:
64     GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU
65 Note that mescc does not run; fork and exec are not yet implemented.
66 *** Mes now configures --with-courage on x86-FreeBSD 12.1
67 The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2,
68 body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2
69 pass.
70 *** configure now has a --with-bootstrap option.
71 This adds the reproducible bootstrap build of bin/mes-mescc, using
72 mes+mescc.
73 *** configure prefers $CC over gcc; tcc over gcc, gcc over cc.
74 *** Mes now prints an error when attempting to read a file that does not exist.
75 *** Mes no longer depends on GIT.
76 ** Noteworthy bug fixes
77 *** Several annoying build problems were fixed, for non-Guix systems.
78 *** A bug with buffered-read was fixed.
79 This means that bash-2.05 can now build glibc-2.2.5; notably it now
80 successfully executes make-syscall.sh.
81 *** A bug with execlp, execvp for file names containing a slash was fixed.
82 This should allow make-3.80 running scripts that have "#! ./move-if-change".
83 * Changes in 0.21 since 0.20
84 ** Core
85 *** Mes can now be bootstrapped with Gash and Gash Core Utils.
86 *** Mes now supports a Scheme-only bootstrap.
87 *** Mes now supports -c EXPR.
88 ** MesCC
89 *** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar.
90 *** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf.
91 **** 7 new functions
92 abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod,
93 symlink.
94 **** 5 new stubs
95 getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent.
96 ** Noteworthy bug fixes
97 *** A bug with `mes -c EXPR' has been fixed.
98 *** The REPL now works again on x86_64.
99 *** --with-system-libc now works again.
100 * Changes in 0.20 since 0.19
101 ** Core
102 *** The build system has been simplified, again.
103 Mes now builds ootb on Debian.
104 *** Mes now supports -c EXPR.
105 ** Divide by zero is now flagged.
106 ** Language
107 *** 1 new function:
108 take-while.
109 ** MesCC
110 *** The C libraries have been exploded into one function per file.
111 *** MesCC now has enhanced POSIX/gcc comand line support, e.g. -DFOO=1,
112 -nodefaultlibs,
113 -nostartfiles,
114 -nostdlib.
115 *** The archiver is now called `mesar'.
116 *** MesCC now supports Nyacc-0.99.
117 *** MesCC now depends on MesCC-Tools 0.6.0.
118 *** 1 new function
119 __mesabi_uldiv.
120 ** Noteworthy bug fixes
121 *** map and for-each now support lists with unequal length.
122 *** interger division has been fixed.
123 *** isatty now looks at terminfo.
124 *** signal now uses sigaction correctly for non-x86.
125 *** string->number now support #x hex-prefix.
126 *** ungetc now has a buffer per file handle.
127 * Changes in 0.19 since 0.18
128 ** Core
129 *** The build system has been simplified.
130 *** Mes now prints a backtrace upon error.
131 *** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile.
132 *** Mes now supports a module type and uses a `boot-module'.
133 *** Mes now supports a hash_table type.
134 *** Mes now supports a struct type.
135 *** Mes now supports building a %bootstrap-mes seed from Guix.
136 ** Language
137 *** Records are now implemented using struct (WAS: vector).
138 *** 44 new functions
139 ceil, char-downcase, char-set-adjoin, char-set-complement,
140 char-upcase, current-time, delete-file, dup, dup2, file-exists?,
141 floor, frame-printer, get-internal-run-time, getcwd, gettimeofday,
142 hash, hash-ref, hash-set!, hash-table-printer, hashq,
143 hashq-get-handle, hashq-ref, hashq-set, inexact->exact,
144 make-hash-table, make-stack, make-struct, module-define!,
145 module-printer, module-ref, module-variable, read-line, round,
146 stack-length, stack-ref, string-downcase, string-tokenize,
147 string-upcase, struct-length, struct-ref, struct-set! struct-vtable,
148 struct-vtable, with-error-to-file.
149 ** MesCC
150 *** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed.
151 *** MesCC now supports compiling GNU Bash and GNU Tar.
152 **** 6 New functions
153 getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask.
154 **** 22 New macros
155 EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN,
156 INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN,
157 SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP,
158 S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP,
159 S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX,
160 _POSIX_VERSION.
161 ** Noteworthy bug fixes
162 *** Mes now supports characters #\xNN.
163 *** Mes now supports assq-ref and assoc-ref with alist == #f.
164 *** Mes now support \xNN in strings.  Fixes using Nyacc-0.86.0.
165 *** MesCC now supports the unary plus operator.
166 *** MesCC now supports the `U' integer suffix.
167 *** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h.
168 *** MesCC now always exits non-zero when assembler or linker fail.
169 * Changes in 0.18 since 0.17.1
170 ** Core
171 *** Mes/MesCC now supports x86_64.
172 *** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD.
173 ** Language
174 *** fold-right now supports 3 lists.
175 ** MesCC
176 *** MesCC now supports x86_64 (also as cross build), using -m 64.
177 *** Mes C Library now has better support for bootstrapping gcc-3.0.
178 *** Mes C test suite now has 178 tests; 74 tests were added.
179 *** MesCC has been refactored to support use an abstracted assembly language.
180 *** MesCC now uses Nyacc 0.86.0.
181 ** Noteworthy bug fixes
182 *** scaffold/tests/7s-struct-short.c has been fixed.
183 * Changes in 0.17.1 since 0.17
184 ** MesCC
185 *** Mes C Library has now been exploded into a separate C file per function.
186 *** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4.
187 *** Mes C Library now supports compiling make-3.82.
188 *** Mes C Library now supports compiling diffutils-2.7.
189 *** Mes C Library now supports x86_64.
190 **** 7 new functions
191 chdir, clock_gettime, closedir, execl, opendir, readdir, time.
192 **** 5 new stubs
193 getlogin, setlocale, setvbuf, sigaddset, sigblock.
194 ** Noteworthy bug fixes
195 *** qsort can now handle lists with duplicate entries.
196
197 * Changes in 0.17 since 0.16.1
198 ** Core
199 *** GNU Mes is now an official GNU package.
200 *** MesCC is now installed as a regular Guile package.
201 *** Support --srcdir build.
202 *** Support all standard GNU make targets.
203 ** MesCC
204 *** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.7.4.
205 * Changes in 0.16.1 since 0.16
206 ** Core
207 *** Mes now builds out of the box on Debian buster/testing.
208 *** Mes now comes with a generic build recipe: build-aux/setup-mes.sh.
209 *** Mes now comes with INFO documentation.
210 ** MesCC
211 *** MesCC now exits if spawning BLOOD_ELF, M1, or HEX2 fails.
212 * Changes in 0.16 since 0.15
213 ** Core
214 *** Support building with tcc, including Mes C Lib in-line assembly.
215 *** core:execl now supports 1000 arguments.
216 ** MesCC
217 *** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
218 *** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.'
219 *** MesCC now runs with mescc-tools 0.5 (no = in long options).
220 **** 3 new C test
221 88-strrchrc, 97-fopen.c, 98-fopen.c.
222 ** Noteworthy bug fixes
223 *** strrchr now stops when it reaches start of string.
224 *** fopen now return 0 upon failure.  Supports binutils' hack: fd=-2 means `cached'.
225 *** vfprintf, vsprintf now support precision and width on integers strings better.
226 *** fread now produces ungetc'd chars too.
227 *** memcmp now supports comparing 0 bytes, supporting binutils.
228
229 *** The unused ELF header data section, identical to the text section, has been removed.
230 * Changes in 0.15 since 0.14
231 ** Core
232 *** Support fork, exec, waitpid.
233 *** Boot-0 loading has been refactored.
234 *** MesCC now has out of the box Geiser support.
235 ** Language
236 *** 2 new functions
237 drop, drop-right.
238 ** MesCC
239 *** MesCC and Mes C Lib can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5.
240 *** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those.
241 *** Mes C Lib now supports compiling glibc-2.2.25.
242 *** Mes C Lib now supports compiling gcc-2.95.3
243 *** Mes C Lib now supports compiling binutils-2.30.
244 *** Mes C Lib now supports compiling m4-1.4.
245 *** Mes C Lib has been split into archs: gcc, x86-mes-gcc and x86-mes.
246 *** MesCC now has a posixy command line interface.
247 **** 70 new functions
248 abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero,
249 chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof,
250 fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid,
251 getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii,
252 iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp,
253 nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir,
254 sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror,
255 strncat, strpbrk, strspn, unlink, unsetenv, waitpid.
256 **** 23 new stubs
257 abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead,
258 frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf,
259 sigsetmask, strftime, sys_siglist, system, times, umask, utime.
260 **** 10 new C tests
261 51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c,
262 92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c.
263
264 * Changes in 0.14 since 0.13
265 ** Core
266 *** Bootstrapped Mes+MesCC  now compiles a tcc that is self-hosting and only slightly patched.
267 *** The reader now supports binary numbers (previously: read as decimal).
268 *** String port support has been moved to C.
269 *** The build has been simplified, the Make-in-Scheme experiment has been removed.
270 *** 2 new functions
271 chmod, logxor.
272 ** Language
273 *** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu.
274 *** 12 new functions
275 basename, chmod, const, delete-duplicates, logxor, string-contains,
276 string-map, string-replace, string-trim, string-trim-both,
277 string-trim-right, unfold.
278 ** MesCC
279 *** MesCC now supports standalone usage of nestedly defined enums, structs and unions.
280 *** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned.
281 *** MesCC now supports sign extension for char, short.
282 *** MesCC now has stubbing for floats; compiling works, data is fu.
283 *** MesCC now has full suport for switch case, e.g. with default as first clause.
284 *** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar.
285 *** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations.
286 *** MesCC now supports sizeof any expression or type.
287 *** MesCC now supports initialization of anonymous unions.
288 *** MesCC now supports bit fields.
289 *** MesCC now supports valued functions in expressions: destruction and dereferencing.
290 *** MesCC now supports function-static variables.
291 *** MesCC now supports initializer lists in structs and unions.
292 *** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3];
293 **** 4 new functions
294 __lshrdi3, __ashldi3, __ashrdi3, strncpy.
295 **** 9 new mlibc stubs
296 __fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp,
297 strtod, strtof, strtold.
298 * Changes in 0.13 since 0.12
299 ** Core
300 *** Bootstrapped Mes+MesCC can now compile a patched tcc in ~1h45' (~25,000 LOC).
301 *** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'.
302 *** Mes now uses only one arena for stop-and-copy; doubles available size.
303 *** Mes now has a Guile-like command-line interface (mes.repl has been removed).
304 *** Mes now boots into a full Scheme by default.
305 *** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells).
306 *** Mes now creates less garbage in the reader and in
307 append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map.
308 *** 5 new functions
309 append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!.
310 ** Language
311 *** 3 new functions
312 char-whitespace?, chmod, isatty?
313 ** Noteworthy bug fixes
314 *** Two bugs in the jam scraper/garbage collector have been fixed.
315 *** equal2_p now uses tail call elimination.
316 *** Escaped characters in strings are now read and write'd correctly.
317 *** The repl now expands macros again.
318 * Changes in 0.12 since 0.11
319 ** Core
320 *** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC).
321 *** Mes now recursively expands global variables per top level statement.
322 *** Mes now recursively expands macros per top level statement.
323 *** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm).
324 *** Mes now has a full Scheme reader in C again.
325 This gives a 10x-20x performance improvement and increases the
326 bootstrap footprint by 160 LOC.
327 *** Mes reader now supports older abbreviated character forms
328 #\bel, #\bs, #\ht and #\vt.
329 *** 3 new functions
330 equal2?, memq, core:write.
331 ** Language
332 *** Mes now has an incremental Scheme semantics test suite with 71 small tests.
333 *** Variable names can now have ticks.
334 *** Mes now evaluates expresions of COND only once.
335 *** srfi-9 records have been reimplemented.
336 *** #\page is now whitespace.
337 *** #<eof> is no longer a character.
338 *** 2 new macros
339 define-macro*, with-fluids.
340 *** 9 new functions
341 dirname, last, reverse-list->string, setenv, string-drop-right,
342 string-fold, string-fold-right, string-null?, write.
343 ** MesCC
344 **** 9 new functions
345 chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
346 **** 2 new header files
347 endian.h, sys/signal.h.
348
349 * Changes in 0.11 since 0.10
350 ** MesCC
351 *** MesCC now compiles a mes-tcc that fails 41/69 of mescc's C tests.
352 *** MesCC's libc can now be compiled with tcc (syscall support: write).
353 *** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747].
354 *** MesCC now supports empty for.
355 *** MesCC has been greatly refactored, 500/3000 lines have been removed.
356 *** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar].
357 *** MesCC now depends on Nyacc 0.82.4.
358 * Changes in 0.10 since 0.9
359 ** Core
360 *** 2 new functions
361 logand, lognot.
362 *** Mes now includes M1 sources for full source bootstrapping up to tcc.
363 ** Mescc
364 *** Mescc now depends on Nyacc 0.81.0.
365 *** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
366 *** Mescc now supports several (as used my tinycc) struct by value assignments.
367 *** Mescc now has _start in a separate crt1.c.
368 *** Mescc now supports initializer arithmetic.
369 *** Mescc now supports arrays of struct of arbitrary size.
370 *** Mescc now supports pointer arithmetic.
371 *** Mescc now defines __i386__, __linux__.
372 *** Mescc now supports --*p, ++*p.
373 *** Mescc now supports int foo[bar] = {baz,...}.
374 *** Mescc now supports \x00 in strings in M1.
375 *** Mescc now supports complex enum expressions.  Thanks, rain1!
376 *** Mescc now supports short.
377 *** Mescc now supports foo.bar = foo.baz = bla.
378 *** Mescc now supports foo = bar < baz and comparison permutations.
379 *** Mescc now supports (anonymous) structs in unions.
380 *** Mescc now writes M1 strings if possible.
381 **** 2 improved mlibc functions
382 malloc, realloc.
383 **** 13 new mlibc functions
384 fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat,
385 strchr, strrchr, strtoull, vnsprintf.
386 **** 15 new tinycc-support tests
387 76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c,
388 79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c,
389 7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c,
390 7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c,
391 7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c,
392 7k-for-each-elem.c.
393 ** Noteworthy bug fixes
394 *** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations.
395 *** Many bugs and limitations in mescc have been fixed and removed.
396 * Changes in 0.9 since 0.8
397 ** Core
398 *** Mes now builds better in non-Guix[SD] legacy distros/environments.  Thanks, rain1!
399 ** Mescc
400 *** Mescc now compiles a modified tinycc into a running [mostly segfaulting] mes-tcc.
401 https://gitlab.com/janneke/tinycc branch wip-mescc.
402 *** Mescc now supports locals stack frame larger than 1 byte offset.
403 *** Mescc now supports incomplete struct initializers {0}.
404 *** Mescc now supports >>=, <<=, ^=, ~.
405 *** Mescc now supports the comma operator.
406 *** Mescc now supports mullti-line string initializers.
407 *** Mescc now supports unions.
408 *** Mescc now supports arrays in structs.
409 *** Mescc now supports structs in structs.
410 *** Mescc now builds and runs with Guile-2.0 (legacy distro support, Guile-2.2 recommended).
411 *** Mescc has been refactored to use records.
412 *** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
413 *** Mescc now has an incremental test suite consisting of 56 tests.
414 *** Mescc now supports stdarg variable argument lists.
415 *** Mescc now has __GNUC__ unset, #f (WAS: 0).
416 *** Mescc now depends on Nyacc 0.80.3.
417 *** Mescc now depends on M1 from [[https://github.com/oriansj/mescc-tools][mescc-tools]] v0.2.
418 *** Mescc now compiles to M1 object files.
419 **** 7 new mlibc functions
420 calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
421 **** 31 new mlibc stubs
422 execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
423 ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
424 qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
425 strtol, strtoll, strtoul, strtoull, time, vnsprintf.
426 **** 10 new header files
427 alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
428 stdnoreturn.h, sys/select.h, sys/wait.h.
429 ** Noteworthy bug fixes
430 *** Many bugs and limitations in mescc have been fixed and removed.
431 * Changes in 0.8 since 0.7
432 ** Mescc
433 *** Mescc now has experimental annotation support for hex2.
434 *** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/mescc-tools][mescc-tools]].
435 Direct ELF output support has been removed.
436 ELF symbol and string table creation has been removed.
437 *** Mescc has been simplified by leveraging use labels in hex2 output.
438 *** Mescc now supports continue in loops.
439 *** Mescc now compiles to hex2 object files.
440 ** Language
441 *** 1 new function
442 list-index.
443 * Changes in 0.7 since 0.6
444 ** Core
445 *** The minimal C reader is now always included; dependencies
446 on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been
447 dropped, these are now optional.
448 ** Language
449 *** Mes reader now supports octal numbers #oXXX.
450 *** 10 new functions
451 current-output-port, getopt-long, negate, open-output-file,
452 option-ref, set-current-output-port, string-rindex, string-suffix?,
453 with-ouwith-output-to-file, with-output-to-port.
454 ** Mescc
455 *** Mescc can now be installed and used alongside a gcc installation.
456 *** Mescc can now handle const anywhere.
457 *** Mescc now supports array fields in structs.
458 *** Mescc now supports forward declarations and typedef.
459 *** Mescc can now handle comments anywhere.
460 *** Mescc now supports addition and substraction for enum field values.
461 *** Mescc now supports anonymous enums.
462 *** Mescc now supports all C99 header files needed to compile tcc.c.
463 *** build: C sources are now preprocessed separately, then compiled and linked.
464 *** build: mlibc and C sources are now compiled separately and then linked.
465 *** mlibc has been moved from Scheme snippets into C.
466 *** Mescc now supports -c, -D, -E, -I and -o options.
467 **** open now supports optional third mode parameter.
468 ** Noteworthy bug fixes
469 *** string-index now supports function predicate.
470 *** number->string for radix > 10 now produces `a' instead of `:'.
471 * Changes in 0.6 since 0.5
472 ** Core
473 *** configure, build now supports x86 and development for arm with-courage.
474 ** Language
475 *** Nyacc has been unbundled and is now a dependency.
476 *** Mes now supports case-lambda.
477 *** Mes reader now supports abbreviated form for return character #\cr.
478 *** 1 new function
479 string-index.
480 ** Mescc
481 *** Mescc can be used on regular C sources, like tinycc's tests/test2 suite.
482 *** make check passes 33/55 of tinycc's test suite etest/test2 tests.
483 *** Mescc now recognizes `short' as a type.
484 *** Mescc now supports sizeof (<identifier>), sizeof(<expression>).
485 *** Mescc now respects enum field initializers and supports enum variables.
486 *** Mescc now supports binary constants .
487 *** Mescc now supports assignments from ==, != boolean expressions .
488 *** Mescc now supports &, ^.
489 *** Mescc now supports struct pointers.
490 *** Mescc now supports struct definition with immediatete variable declaration.
491 *** Mescc now supports calling (returning correctly from) void functions.
492 *** Mescc now handles case statements breaks without compound correctly.
493 *** Mescc now has better [int/pointer] array support.
494 *** Mescc now has better support for simple (non-array-)structs.
495 *** Mescc now supports multiple declarations in one statement like: int a,b;
496 **** 2 new mlibc functions
497 printf, strcpy.
498 ** Noteworthy bug fixes
499 *** Installed mes and mes.repl now also run outside of source tree again.
500 * Changes in 0.5 since 0.4
501 ** Core
502 *** Support compilation with Mescc.
503 *** Support compilation with -nostdinc, -nostdlib using mlibc.
504 *** Support call-with-current-continuation.
505 *** Support exception handling, catch/throw.
506 *** Give sensible error message when a macro is missing.
507 ** Language
508 *** Map now supports 4 lists.
509 *** The reader supports negative hex numbers.
510 *** 24 new functions
511 access?, assoc-set! c????r, compose, list->char-set,
512 open-input-string, read-string, string-delete, with-throw-handler.
513 ** Mescc
514 *** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
515 *** Switch to Nyacc frontend, update Nyacc to 0.76.5.
516 *** Mescc now has a test suite, scaffold/t.c.
517 *** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c.
518 *** Mescc can now compile mes.c.
519 ** Noteworthy bug fixes
520 *** The build system (configure, make) has been refactored.
521 *** Support map-4.
522 *** Evaluate arguments of OR only once.
523 *** Fix assq-set!
524 *** Fix ,expand in the REPL.
525
526 * Changes in 0.4 since 0.3
527 ** Core
528 *** Improved performance.
529 Macros are now memoized; after expansion and before eval'ing the
530 expanded form, their input s-expression is replaced by the expansion.
531 This yields a nice performance improvement which finally allowed
532 moving all non-essential bits from the C-core into Scheme...including
533 the reader.  The Scheme reader is much, much slower than the previous
534 C version, making Mes--again-- feel slow.  Think of that as a feature.
535 *** Bootstrap with minimal reader in C.
536 The C-reader needs only support reading of words and lists
537 (s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
538 then takes over and handles reading of quoting, characters, strings,
539 block-comments.
540 *** Reduced size.
541 Total C size: ~1500LOC.  The main Mes evaluator is now ~1000LOC
542 including cell creation and garbage collector.  This code is able to
543 execute a Scheme program that has been loaded into memory.  Another
544 ~500LOC is spent to load a minimal Scheme program and to dump it, to
545 provide a small posix interface, math functions and do some error
546 reporting.
547 *** Programs can be dumped and loaded using --dump and --load.
548 ** Language
549 *** Minimal syntactic exception support for Nyacc.
550 *** Minimal syntactic fluids support for Nyacc.
551 *** Keywords are now supported.
552 *** Cond now supports =>.
553 *** Guile's optargs: lambda* and define* are now supported.
554 *** #;-comments are now supported.
555 *** Non-nested #| |#-comments are now supported.
556 *** Quasisyntax is now supported.
557 *** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
558 *** 9 new [partial] modules
559 (mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
560 (srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
561 (rnrs arithmetic bitwise), (sxml xpath)
562 *** 36 new functions
563 1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
564 char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
565 getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
566 positive?, remove!, remove, string->number, string-copy,
567 string-prefix?, string=, string=?, symbol->keyword symbol-append,
568 symbol-prefix?, unless, write, zero?.
569 ** Noteworthy bug fixes
570 *** Macros are now memoized.
571 *** An error is reported when using a wrong number of arguments with a call.
572 *** Cond now evaluates its test clauses only once.
573 *** Append can also handle one argument.
574 *** For-each now supports 2 list arguments.
575 *** Map now supports 3 list arguments.
576 *** Backslash in string is supported.
577 *** Closure is not a pair.
578 *** All standard characters are supported.
579 *** Mescc now also runs in Guile.
580 * Changes in 0.3 since 0.2
581 ** Core
582 *** Number-based rather than pointer-based cells.
583 *** Garbage collector aka Jam scraper.
584 A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?)
585 algorithm has been implemented.
586 *** The reader has been moved to Scheme.
587 ** Language
588 *** Simple loadable modules.
589 *** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
590 *** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
591 ** Noteworthy bug fixes
592 *** Srfi-0 has been fixed.
593 * Changes in 0.2 since 0.1
594 ** Core
595 *** Names of symbols and strings are list of characters [WAS: c-string].
596 *** Sc-expand from pre-R6RS's psyntax has been integrated.
597 *** Undefined variable error now shows the name of the undefined variable.
598 *** There is now only one SCM type for builtin functions.
599 *** Macro expansion has been cleaned-up.
600 ** Language
601 *** Mes now provides a subset of R6RS.
602 *** Mes now provides syntax-case.
603 *** Mes now provides `load'.
604 ** Noteworthy bug fixes
605 *** Using values as second parameter of builtin function yields first value.
606 *** Quoted internals (e.g. 'if 'lambda) are now symbols.
607 *** Syntax error now exits.
608 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
609 *** Apply now accepts multiple list arguments.
610 *** Apply of character, inernal, number, string is an error.
611 *** Quasisyntax reading
612
613 * Changes in 0.1 (since progress report #2)
614 ** Core
615 *** expand_macro is now a separate function.
616 *** A smaller core can now compiled using BOOT=1.
617 The smaller core does not provide define, define-macro, or quasiquote;
618 these are provided from a Scheme version of implemented eval/apply.
619 ** Language
620 *** Mes now provides a subset of R5RS.
621 *** Mes now provides let-syntax.
622 *** Mes now provides match.
623 *** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
624 ** User interface
625 *** Mes now provides a REPL, run:
626     scripts/repl.mes
627 *** Mes compiler can be run as a script:
628     scripts/mescc.mes doc/examples/main.c
629 *** Macro expansion can be inspected in the REPL, e.g.:
630     ,expand (and 0 1)
631 ** Noteworthy bug fixes
632 *** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
633 *** Symbols are now truly unique.
634   * '(), #t, #f are no longer symbols.