core: core:cdr: Support port type.
[mes.git] / NEWS
diff --git a/NEWS b/NEWS
index 3a42bd963066c596dbc1cc8f891741c09343b48c..8735c97edcb48ab935a7e74d2021fbad499cb4f5 100644 (file)
--- a/NEWS
+++ b/NEWS
                                                               -*- org -*-
-#+TITLE: Mes NEWS – history of user-visible changes
+#+TITLE: GNU Mes NEWS – history of user-visible changes
 #+STARTUP: content hidestars
 
-Copyright © 2016 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.
 
-Please send Mes bug reports to janneke@gnu.org.
+Please send Mes bug reports to bug-mes@gnu.org.
+
+* 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.
+*** 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.
+*** Mescc now supports continue in loops.
+*** Mescc now compiles to hex2 object files.
+** Language
+*** 1 new function
+list-index.
+* Changes in 0.7 since 0.6
+** Core
+*** The minimal C reader is now always included; dependencies
+on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been
+dropped, these are now optional.
+** Language
+*** Mes reader now supports octal numbers #oXXX.
+*** 10 new functions
+current-output-port, getopt-long, negate, open-output-file,
+option-ref, set-current-output-port, string-rindex, string-suffix?,
+with-ouwith-output-to-file, with-output-to-port.
+** Mescc
+*** Mescc can now be installed and used alongside a gcc installation.
+*** Mescc can now handle const anywhere.
+*** Mescc now supports array fields in structs.
+*** Mescc now supports forward declarations and typedef.
+*** Mescc can now handle comments anywhere.
+*** Mescc now supports addition and substraction for enum field values.
+*** Mescc now supports anonymous enums.
+*** Mescc now supports all C99 header files needed to compile tcc.c.
+*** build: C sources are now preprocessed separately, then compiled and linked.
+*** build: mlibc and C sources are now compiled separately and then linked.
+*** mlibc has been moved from Scheme snippets into C.
+*** Mescc now supports -c, -D, -E, -I and -o options.
+**** open now supports optional third mode parameter.
+** Noteworthy bug fixes
+*** string-index now supports function predicate.
+*** number->string for radix > 10 now produces `a' instead of `:'.
+* Changes in 0.6 since 0.5
+** Core
+*** configure, build now supports x86 and development for arm with-courage.
+** Language
+*** Nyacc has been unbundled and is now a dependency.
+*** Mes now supports case-lambda.
+*** Mes reader now supports abbreviated form for return character #\cr.
+*** 1 new function
+string-index.
+** Mescc
+*** Mescc can be used on regular C sources, like tinycc's tests/test2 suite.
+*** make check passes 33/55 of tinycc's test suite etest/test2 tests.
+*** Mescc now recognizes `short' as a type.
+*** Mescc now supports sizeof (<identifier>), sizeof(<expression>).
+*** Mescc now respects enum field initializers and supports enum variables.
+*** Mescc now supports binary constants .
+*** Mescc now supports assignments from ==, != boolean expressions .
+*** Mescc now supports &, ^.
+*** Mescc now supports struct pointers.
+*** Mescc now supports struct definition with immediatete variable declaration.
+*** Mescc now supports calling (returning correctly from) void functions.
+*** Mescc now handles case statements breaks without compound correctly.
+*** Mescc now has better [int/pointer] array support.
+*** Mescc now has better support for simple (non-array-)structs.
+*** Mescc now supports multiple declarations in one statement like: int a,b;
+**** 2 new mlibc functions
+printf, strcpy.
+** Noteworthy bug fixes
+*** Installed mes and mes.repl now also run outside of source tree again.
+* Changes in 0.5 since 0.4
+** Core
+*** Support compilation with Mescc.
+*** Support compilation with -nostdinc, -nostdlib using mlibc.
+*** Support call-with-current-continuation.
+*** Support exception handling, catch/throw.
+*** Give sensible error message when a macro is missing.
+** Language
+*** Map now supports 4 lists.
+*** The reader supports negative hex numbers.
+*** 24 new functions
+access?, assoc-set! c????r, compose, list->char-set,
+open-input-string, read-string, string-delete, with-throw-handler.
+** Mescc
+*** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
+*** Switch to Nyacc frontend, update Nyacc to 0.76.5.
+*** Mescc now has a test suite, scaffold/t.c.
+*** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c.
+*** Mescc can now compile mes.c.
+** Noteworthy bug fixes
+*** The build system (configure, make) has been refactored.
+*** Support map-4.
+*** Evaluate arguments of OR only once.
+*** Fix assq-set!
+*** Fix ,expand in the REPL.
 
 * Changes in 0.4 since 0.3
 ** Core
-*** Smaller C-reader
+*** Improved performance.
+Macros are now memoized; after expansion and before eval'ing the
+expanded form, their input s-expression is replaced by the expansion.
+This yields a nice performance improvement which finally allowed
+moving all non-essential bits from the C-core into Scheme...including
+the reader.  The Scheme reader is much, much slower than the previous
+C version, making Mes--again-- feel slow.  Think of that as a feature.
+*** Bootstrap with minimal reader in C.
 The C-reader needs only support reading of words and lists
-(s-expressions), line-comments.  Quoting, characters, strings,
-block-comments are all handled by the Scheme reader later.
+(s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
+then takes over and handles reading of quoting, characters, strings,
+block-comments.
+*** Reduced size.
+Total C size: ~1500LOC.  The main Mes evaluator is now ~1000LOC
+including cell creation and garbage collector.  This code is able to
+execute a Scheme program that has been loaded into memory.  Another
+~500LOC is spent to load a minimal Scheme program and to dump it, to
+provide a small posix interface, math functions and do some error
+reporting.
+*** Programs can be dumped and loaded using --dump and --load.
 ** Language
-*** Keywords are supported.
+*** Minimal syntactic exception support for Nyacc.
+*** Minimal syntactic fluids support for Nyacc.
+*** Keywords are now supported.
 *** Cond now supports =>.
-*** Lambda* and define* are now supported.
+*** Guile's optargs: lambda* and define* are now supported.
+*** #;-comments are now supported.
+*** Non-nested #| |#-comments are now supported.
+*** Quasisyntax is now supported.
+*** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
+*** 9 new [partial] modules
+(mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
+(srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
+(rnrs arithmetic bitwise), (sxml xpath)
+*** 36 new functions
+1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
+char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
+getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
+positive?, remove!, remove, string->number, string-copy,
+string-prefix?, string=, string=?, symbol->keyword symbol-append,
+symbol-prefix?, unless, write, zero?.
+** Noteworthy bug fixes
+*** Macros are now memoized.
+*** An error is reported when using a wrong number of arguments with a call.
+*** Cond now evaluates its test clauses only once.
+*** Append can also handle one argument.
+*** For-each now supports 2 list arguments.
+*** Map now supports 3 list arguments.
+*** Backslash in string is supported.
+*** Closure is not a pair.
+*** All standard characters are supported.
+*** Mescc now also runs in Guile.
 * Changes in 0.3 since 0.2
 ** Core
 *** Number-based rather than pointer-based cells.
@@ -51,7 +452,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.
-*** Quasisyntax reading 
+*** Quasisyntax reading
 
 * Changes in 0.1 (since progress report #2)
 ** Core