2016-10-15 09:54:24 +00:00
|
|
|
|
-*- org -*-
|
|
|
|
|
#+TITLE: Mes NEWS – history of user-visible changes
|
|
|
|
|
#+STARTUP: content hidestars
|
|
|
|
|
|
2017-04-02 15:01:29 +00:00
|
|
|
|
Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
2016-10-15 09:54:24 +00:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2017-07-09 16:40:12 +00:00
|
|
|
|
* 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] tcc.mes.
|
|
|
|
|
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.
|
2017-06-08 18:39:24 +00:00
|
|
|
|
* 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.
|
2017-05-22 21:35:39 +00:00
|
|
|
|
* 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 `:'.
|
2017-05-06 15:46:41 +00:00
|
|
|
|
* 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.
|
2017-04-02 15:01:29 +00:00
|
|
|
|
* 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.
|
|
|
|
|
|
2016-12-13 18:58:34 +00:00
|
|
|
|
* Changes in 0.4 since 0.3
|
|
|
|
|
** Core
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** 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.
|
2016-12-13 18:58:34 +00:00
|
|
|
|
The C-reader needs only support reading of words and lists
|
2016-12-24 16:22:34 +00:00
|
|
|
|
(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
|
2016-12-25 15:43:28 +00:00
|
|
|
|
execute a Scheme program that has been loaded into memory. Another
|
2016-12-24 16:22:34 +00:00
|
|
|
|
~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.
|
2016-12-16 22:30:33 +00:00
|
|
|
|
** Language
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** Minimal syntactic exception support for Nyacc.
|
|
|
|
|
*** Minimal syntactic fluids support for Nyacc.
|
|
|
|
|
*** Keywords are now supported.
|
2016-12-16 19:18:38 +00:00
|
|
|
|
*** Cond now supports =>.
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** Guile's optargs: lambda* and define* are now supported.
|
|
|
|
|
*** #;-comments are now supported.
|
|
|
|
|
*** Non-nested #| |#-comments are now supported.
|
|
|
|
|
*** Quasisyntax is now supported.
|
2016-12-19 18:41:43 +00:00
|
|
|
|
*** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** 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?.
|
2016-12-19 18:35:38 +00:00
|
|
|
|
** Noteworthy bug fixes
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** 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.
|
2016-12-19 18:35:38 +00:00
|
|
|
|
*** Closure is not a pair.
|
2016-12-24 16:22:34 +00:00
|
|
|
|
*** All standard characters are supported.
|
|
|
|
|
*** Mescc now also runs in Guile.
|
2016-11-21 08:30:59 +00:00
|
|
|
|
* Changes in 0.3 since 0.2
|
|
|
|
|
** Core
|
|
|
|
|
*** Number-based rather than pointer-based cells.
|
|
|
|
|
*** Garbage collector aka Jam scraper.
|
|
|
|
|
A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?)
|
|
|
|
|
algorithm has been implemented.
|
2016-11-19 22:25:24 +00:00
|
|
|
|
*** The reader has been moved to Scheme.
|
2016-12-07 19:26:41 +00:00
|
|
|
|
** Language
|
|
|
|
|
*** Simple loadable modules.
|
|
|
|
|
*** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
|
|
|
|
|
*** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
|
|
|
|
|
** Noteworthy bug fixes
|
|
|
|
|
*** Srfi-0 has been fixed.
|
2016-11-02 14:35:32 +00:00
|
|
|
|
* Changes in 0.2 since 0.1
|
|
|
|
|
** Core
|
|
|
|
|
*** Names of symbols and strings are list of characters [WAS: c-string].
|
2016-11-21 13:16:52 +00:00
|
|
|
|
*** Sc-expand from pre-R6RS's psyntax has been integrated.
|
|
|
|
|
*** Undefined variable error now shows the name of the undefined variable.
|
|
|
|
|
*** There is now only one SCM type for builtin functions.
|
|
|
|
|
*** Macro expansion has been cleaned-up.
|
2016-11-02 14:35:32 +00:00
|
|
|
|
** Language
|
|
|
|
|
*** Mes now provides a subset of R6RS.
|
2016-11-21 13:16:52 +00:00
|
|
|
|
*** Mes now provides syntax-case.
|
|
|
|
|
*** Mes now provides `load'.
|
2016-11-02 14:35:32 +00:00
|
|
|
|
** Noteworthy bug fixes
|
|
|
|
|
*** Using values as second parameter of builtin function yields first value.
|
2016-11-21 13:16:52 +00:00
|
|
|
|
*** Quoted internals (e.g. 'if 'lambda) are now symbols.
|
|
|
|
|
*** Syntax error now exits.
|
|
|
|
|
*** 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
|
2016-10-15 09:54:24 +00:00
|
|
|
|
|
2016-11-02 14:35:32 +00:00
|
|
|
|
* Changes in 0.1 (since progress report #2)
|
2016-10-15 09:54:24 +00:00
|
|
|
|
** Core
|
|
|
|
|
*** expand_macro is now a separate function.
|
2016-12-12 19:31:41 +00:00
|
|
|
|
*** A smaller core can now compiled using BOOT=1.
|
|
|
|
|
The smaller core does not provide define, define-macro, or quasiquote;
|
|
|
|
|
these are provided from a Scheme version of implemented eval/apply.
|
2016-10-15 09:54:24 +00:00
|
|
|
|
** Language
|
|
|
|
|
*** Mes now provides a subset of R5RS.
|
|
|
|
|
*** Mes now provides let-syntax.
|
|
|
|
|
*** Mes now provides match.
|
2016-10-16 12:00:40 +00:00
|
|
|
|
*** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
|
2016-10-15 09:54:24 +00:00
|
|
|
|
** User interface
|
|
|
|
|
*** Mes now provides a REPL, run:
|
|
|
|
|
scripts/repl.mes
|
2016-10-16 12:00:40 +00:00
|
|
|
|
*** Mes compiler can be run as a script:
|
2016-10-15 09:54:24 +00:00
|
|
|
|
scripts/mescc.mes doc/examples/main.c
|
|
|
|
|
*** Macro expansion can be inspected in the REPL, e.g.:
|
|
|
|
|
,expand (and 0 1)
|
|
|
|
|
** Noteworthy bug fixes
|
2016-11-20 20:45:12 +00:00
|
|
|
|
*** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
|
2016-10-15 09:54:24 +00:00
|
|
|
|
*** Symbols are now truly unique.
|
2016-12-12 19:31:41 +00:00
|
|
|
|
* '(), #t, #f are no longer symbols.
|