doc: Release update.
[mes.git] / NEWS
diff --git a/NEWS b/NEWS
index ad7c355757a2418b826870d7d5fd0aed37fc39a1..c3a536e5ef957d822e986b6fdb5960226d002bd6 100644 (file)
--- a/NEWS
+++ b/NEWS
                                                               -*- org -*-
                                                               -*- org -*-
-#+TITLE: Mes NEWS – history of user-visible changes
+#+TITLE: GNU Mes NEWS – history of user-visible changes
 #+STARTUP: content hidestars
 
 #+STARTUP: content hidestars
 
-Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
   notice and this notice are preserved.
 
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
   notice and this notice are preserved.
 
-Please send Mes bug reports to janneke@gnu.org.
+Please send Mes bug reports to bug-mes@gnu.org.
 
 
+* Changes in 0.19 since 0.18
+** Core
+*** The build system has been simplified.
+*** Mes now prints a backtrace upon error.
+*** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile.
+*** Mes now supports a module type and uses a `boot-module'.
+*** Mes now supports a hash_table type.
+*** Mes now supports a struct type.
+*** Mes now supports building a %bootstrap-mes seed from Guix.
+** Language
+*** Records are now implemented using struct (WAS: vector).
+*** 44 new functions
+ceil, char-downcase, char-set-adjoin, char-set-complement,
+char-upcase, current-time, delete-file, dup, dup2, file-exists?,
+floor, frame-printer, get-internal-run-time, getcwd, gettimeofday,
+hash, hash-ref, hash-set!, hash-table-printer, hashq,
+hashq-get-handle, hashq-ref, hashq-set, inexact->exact,
+make-hash-table, make-stack, make-struct, module-define!,
+module-printer, module-ref, module-variable, read-line, round,
+stack-length, stack-ref, string-downcase, string-tokenize,
+string-upcase, struct-length, struct-ref, struct-set! struct-vtable,
+struct-vtable, with-error-to-file.
+** MesCC
+*** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed.
+*** MesCC now supports compiling GNU Bash and GNU Tar.
+**** 6 New functions
+getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask.
+**** 22 New macros
+EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN,
+INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN,
+SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP,
+S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP,
+S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX,
+_POSIX_VERSION.
+** Noteworthy bug fixes
+*** Mes now supports characters #\xNN.
+*** Mes now supports assq-ref and assoc-ref with alist == #f.
+*** Mes now support \xNN in strings.  Fixes using Nyacc-0.86.0.
+*** MesCC now supports the unary plus operator.
+*** MesCC now supports the `U' integer suffix.
+*** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h.
+*** MesCC now always exits non-zero when assembler or linker fail.
+* Changes in 0.18 since 0.17.1
+** Core
+*** Mes/MesCC now supports x86_64.
+*** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD.
+** Language
+*** fold-right now supports 3 lists.
+** MesCC
+*** MesCC now supports x86_64 (also as cross build), using -m 64.
+*** Mes C Library now has better support for bootstrapping gcc-3.0.
+*** Mes C test suite now has 178 tests; 74 tests were added.
+*** MesCC has been refactored to support use an abstracted assembly language.
+*** MesCC now uses Nyacc 0.86.0.
+** Noteworthy bug fixes
+*** scaffold/tests/7s-struct-short.c has been fixed.
+* Changes in 0.17.1 since 0.17
+** MesCC
+*** Mes C Library has now been exploded into a separate C file per function.
+*** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4.
+*** Mes C Library now supports compiling make-3.82.
+*** Mes C Library now supports compiling diffutils-2.7.
+*** Mes C Library now supports x86_64.
+**** 7 new functions
+chdir, clock_gettime, closedir, execl, opendir, readdir, time.
+**** 5 new stubs
+getlogin, setlocale, setvbuf, sigaddset, sigblock.
+** Noteworthy bug fixes
+*** qsort can now handle lists with duplicate entries.
+
+* Changes in 0.17 since 0.16.1
+** Core
+*** GNU Mes is now an official GNU package.
+*** MesCC is now installed as a regular Guile package.
+*** Support --srcdir build.
+*** Support all standard GNU make targets.
+** MesCC
+*** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.7.4.
+* Changes in 0.16.1 since 0.16
+** Core
+*** Mes now builds out of the box on Debian buster/testing.
+*** Mes now comes with a generic build recipe: build-aux/setup-mes.sh.
+*** Mes now comes with INFO documentation.
+** MesCC
+*** MesCC now exits if spawning BLOOD_ELF, M1, or HEX2 fails.
+* Changes in 0.16 since 0.15
+** Core
+*** Support building with tcc, including Mes C Lib in-line assembly.
+*** core:execl now supports 1000 arguments.
+** MesCC
+*** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
+*** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.'
+*** MesCC now runs with mescc-tools 0.5 (no = in long options).
+**** 3 new C test
+88-strrchrc, 97-fopen.c, 98-fopen.c.
+** Noteworthy bug fixes
+*** strrchr now stops when it reaches start of string.
+*** fopen now return 0 upon failure.  Supports binutils' hack: fd=-2 means `cached'.
+*** vfprintf, vsprintf now support precision and width on integers strings better.
+*** fread now produces ungetc'd chars too.
+*** memcmp now supports comparing 0 bytes, supporting binutils.
+
+*** The unused ELF header data section, identical to the text section, has been removed.
+* Changes in 0.15 since 0.14
+** Core
+*** Support fork, exec, waitpid.
+*** Boot-0 loading has been refactored.
+*** MesCC now has out of the box Geiser support.
+** Language
+*** 2 new functions
+drop, drop-right.
+** MesCC
+*** MesCC and Mes C Lib can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5.
+*** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those.
+*** Mes C Lib now supports compiling glibc-2.2.25.
+*** Mes C Lib now supports compiling gcc-2.95.3
+*** Mes C Lib now supports compiling binutils-2.30.
+*** Mes C Lib now supports compiling m4-1.4.
+*** Mes C Lib has been split into archs: gcc, x86-mes-gcc and x86-mes.
+*** MesCC now has a posixy command line interface.
+**** 70 new functions
+abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero,
+chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof,
+fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid,
+getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii,
+iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp,
+nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir,
+sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror,
+strncat, strpbrk, strspn, unlink, unsetenv, waitpid.
+**** 23 new stubs
+abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead,
+frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf,
+sigsetmask, strftime, sys_siglist, system, times, umask, utime.
+**** 10 new C tests
+51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c,
+92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c.
+
+* Changes in 0.14 since 0.13
+** Core
+*** Bootstrapped Mes+MesCC  now compiles a tcc that is self-hosting and only slightly patched.
+*** The reader now supports binary numbers (previously: read as decimal).
+*** String port support has been moved to C.
+*** The build has been simplified, the Make-in-Scheme experiment has been removed.
+*** 2 new functions
+chmod, logxor.
+** Language
+*** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu.
+*** 12 new functions
+basename, chmod, const, delete-duplicates, logxor, string-contains,
+string-map, string-replace, string-trim, string-trim-both,
+string-trim-right, unfold.
+** MesCC
+*** MesCC now supports standalone usage of nestedly defined enums, structs and unions.
+*** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned.
+*** MesCC now supports sign extension for char, short.
+*** MesCC now has stubbing for floats; compiling works, data is fu.
+*** MesCC now has full suport for switch case, e.g. with default as first clause.
+*** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar.
+*** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations.
+*** MesCC now supports sizeof any expression or type.
+*** MesCC now supports initialization of anonymous unions.
+*** MesCC now supports bit fields.
+*** MesCC now supports valued functions in expressions: destruction and dereferencing.
+*** MesCC now supports function-static variables.
+*** MesCC now supports initializer lists in structs and unions.
+*** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3];
+**** 4 new functions
+__lshrdi3, __ashldi3, __ashrdi3, strncpy.
+**** 9 new mlibc stubs
+__fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp,
+strtod, strtof, strtold.
+* Changes in 0.13 since 0.12
+** Core
+*** Bootstrapped Mes+MesCC can now compile a patched tcc in ~1h45' (~25,000 LOC).
+*** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'.
+*** Mes now uses only one arena for stop-and-copy; doubles available size.
+*** Mes now has a Guile-like command-line interface (mes.repl has been removed).
+*** Mes now boots into a full Scheme by default.
+*** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells).
+*** Mes now creates less garbage in the reader and in
+append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map.
+*** 5 new functions
+append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!.
+** Language
+*** 3 new functions
+char-whitespace?, chmod, isatty?
+** Noteworthy bug fixes
+*** Two bugs in the jam scraper/garbage collector have been fixed.
+*** equal2_p now uses tail call elimination.
+*** Escaped characters in strings are now read and write'd correctly.
+*** The repl now expands macros again.
+* Changes in 0.12 since 0.11
+** Core
+*** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC).
+*** Mes now recursively expands global variables per top level statement.
+*** Mes now recursively expands macros per top level statement.
+*** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm).
+*** Mes now has a full Scheme reader in C again.
+This gives a 10x-20x performance improvement and increases the
+bootstrap footprint by 160 LOC.
+*** Mes reader now supports older abbreviated character forms
+#\bel, #\bs, #\ht and #\vt.
+*** 3 new functions
+equal2?, memq, core:write.
+** Language
+*** Mes now has an incremental Scheme semantics test suite with 71 small tests.
+*** Variable names can now have ticks.
+*** Mes now evaluates expresions of COND only once.
+*** srfi-9 records have been reimplemented.
+*** #\page is now whitespace.
+*** #<eof> is no longer a character.
+*** 2 new macros
+define-macro*, with-fluids.
+*** 9 new functions
+dirname, last, reverse-list->string, setenv, string-drop-right,
+string-fold, string-fold-right, string-null?, write.
+** MesCC
+**** 9 new functions
+chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
+**** 2 new header files
+endian.h, sys/signal.h.
+
+* Changes in 0.11 since 0.10
+** MesCC
+*** MesCC now compiles a mes-tcc that fails 41/69 of mescc's C tests.
+*** MesCC's libc can now be compiled with tcc (syscall support: write).
+*** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747].
+*** MesCC now supports empty for.
+*** MesCC has been greatly refactored, 500/3000 lines have been removed.
+*** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar].
+*** MesCC now depends on Nyacc 0.82.4.
+* Changes in 0.10 since 0.9
+** Core
+*** 2 new functions
+logand, lognot.
+*** Mes now includes M1 sources for full source bootstrapping up to tcc.
+** Mescc
+*** Mescc now depends on Nyacc 0.81.0.
+*** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
+*** Mescc now supports several (as used my tinycc) struct by value assignments.
+*** Mescc now has _start in a separate crt1.c.
+*** Mescc now supports initializer arithmetic.
+*** Mescc now supports arrays of struct of arbitrary size.
+*** Mescc now supports pointer arithmetic.
+*** Mescc now defines __i386__, __linux__.
+*** Mescc now supports --*p, ++*p.
+*** Mescc now supports int foo[bar] = {baz,...}.
+*** Mescc now supports \x00 in strings in M1.
+*** Mescc now supports complex enum expressions.  Thanks, rain1!
+*** Mescc now supports short.
+*** Mescc now supports foo.bar = foo.baz = bla.
+*** Mescc now supports foo = bar < baz and comparison permutations.
+*** Mescc now supports (anonymous) structs in unions.
+*** Mescc now writes M1 strings if possible.
+**** 2 improved mlibc functions
+malloc, realloc.
+**** 13 new mlibc functions
+fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat,
+strchr, strrchr, strtoull, vnsprintf.
+**** 15 new tinycc-support tests
+76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c,
+79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c,
+7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c,
+7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c,
+7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c,
+7k-for-each-elem.c.
+** Noteworthy bug fixes
+*** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations.
+*** Many bugs and limitations in mescc have been fixed and removed.
+* Changes in 0.9 since 0.8
+** Core
+*** Mes now builds better in non-Guix[SD] legacy distros/environments.  Thanks, rain1!
+** Mescc
+*** Mescc now compiles a modified tinycc into a running [mostly segfaulting] mes-tcc.
+https://gitlab.com/janneke/tinycc branch wip-mescc.
+*** Mescc now supports locals stack frame larger than 1 byte offset.
+*** Mescc now supports incomplete struct initializers {0}.
+*** Mescc now supports >>=, <<=, ^=, ~.
+*** Mescc now supports the comma operator.
+*** Mescc now supports mullti-line string initializers.
+*** Mescc now supports unions.
+*** Mescc now supports arrays in structs.
+*** Mescc now supports structs in structs.
+*** Mescc now builds and runs with Guile-2.0 (legacy distro support, Guile-2.2 recommended).
+*** Mescc has been refactored to use records.
+*** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
+*** Mescc now has an incremental test suite consisting of 56 tests.
+*** Mescc now supports stdarg variable argument lists.
+*** Mescc now has __GNUC__ unset, #f (WAS: 0).
+*** Mescc now depends on Nyacc 0.80.3.
+*** Mescc now depends on M1 from [[https://github.com/oriansj/mescc-tools][mescc-tools]] v0.2.
+*** Mescc now compiles to M1 object files.
+**** 7 new mlibc functions
+calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
+**** 31 new mlibc stubs
+execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
+ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
+qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
+strtol, strtoll, strtoul, strtoull, time, vnsprintf.
+**** 10 new header files
+alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
+stdnoreturn.h, sys/select.h, sys/wait.h.
+** Noteworthy bug fixes
+*** Many bugs and limitations in mescc have been fixed and removed.
 * Changes in 0.8 since 0.7
 ** Mescc
 *** Mescc now has experimental annotation support for hex2.
 * Changes in 0.8 since 0.7
 ** Mescc
 *** Mescc now has experimental annotation support for hex2.
-*** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]].
+*** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/mescc-tools][mescc-tools]].
 Direct ELF output support has been removed.
 ELF symbol and string table creation has been removed.
 *** Mescc has been simplified by leveraging use labels in hex2 output.
 Direct ELF output support has been removed.
 ELF symbol and string table creation has been removed.
 *** Mescc has been simplified by leveraging use labels in hex2 output.
@@ -104,7 +408,7 @@ open-input-string, read-string, string-delete, with-throw-handler.
 *** Evaluate arguments of OR only once.
 *** Fix assq-set!
 *** Fix ,expand in the REPL.
 *** Evaluate arguments of OR only once.
 *** Fix assq-set!
 *** Fix ,expand in the REPL.
-    
+
 * Changes in 0.4 since 0.3
 ** Core
 *** Improved performance.
 * Changes in 0.4 since 0.3
 ** Core
 *** Improved performance.
@@ -190,7 +494,7 @@ algorithm has been implemented.
 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
 *** Apply now accepts multiple list arguments.
 *** Apply of character, inernal, number, string is an error.
 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
 *** Apply now accepts multiple list arguments.
 *** Apply of character, inernal, number, string is an error.
-*** Quasisyntax reading 
+*** Quasisyntax reading
 
 * Changes in 0.1 (since progress report #2)
 ** Core
 
 * Changes in 0.1 (since progress report #2)
 ** Core