doc: Release update.
[mes.git] / NEWS
1                                                               -*- org -*-
2 #+TITLE: Mes NEWS – history of user-visible changes
3 #+STARTUP: content hidestars
4
5 Copyright © 2016,2017 Jan 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.5 since 0.4
14 ** Core
15 *** Support compilation with Mescc.
16 *** Support compilation with -nostdinc, -nostdlib using mlibc.
17 *** Support call-with-current-continuation.
18 *** Support exception handling, catch/throw.
19 *** Give sensible error message when a macro is missing.
20 ** Language
21 *** Map now supports 4 lists.
22 *** The reader supports negative hex numbers.
23 *** 24 new functions
24 access?, assoc-set! c????r, compose, list->char-set,
25 open-input-string, read-string, string-delete, with-throw-handler.
26 ** Mescc
27 *** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
28 *** Switch to Nyacc frontend, update Nyacc to 0.76.5.
29 *** Mescc now has a test suite, scaffold/t.c.
30 *** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c.
31 *** Mescc can now compile mes.c.
32 ** Noteworthy bug fixes
33 *** The build system (configure, make) has been refactored.
34 *** Support map-4.
35 *** Evaluate arguments of OR only once.
36 *** Fix assq-set!
37 *** Fix ,expand in the REPL.
38     
39 * Changes in 0.4 since 0.3
40 ** Core
41 *** Improved performance.
42 Macros are now memoized; after expansion and before eval'ing the
43 expanded form, their input s-expression is replaced by the expansion.
44 This yields a nice performance improvement which finally allowed
45 moving all non-essential bits from the C-core into Scheme...including
46 the reader.  The Scheme reader is much, much slower than the previous
47 C version, making Mes--again-- feel slow.  Think of that as a feature.
48 *** Bootstrap with minimal reader in C.
49 The C-reader needs only support reading of words and lists
50 (s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
51 then takes over and handles reading of quoting, characters, strings,
52 block-comments.
53 *** Reduced size.
54 Total C size: ~1500LOC.  The main Mes evaluator is now ~1000LOC
55 including cell creation and garbage collector.  This code is able to
56 execute a Scheme program that has been loaded into memory.  Another
57 ~500LOC is spent to load a minimal Scheme program and to dump it, to
58 provide a small posix interface, math functions and do some error
59 reporting.
60 *** Programs can be dumped and loaded using --dump and --load.
61 ** Language
62 *** Minimal syntactic exception support for Nyacc.
63 *** Minimal syntactic fluids support for Nyacc.
64 *** Keywords are now supported.
65 *** Cond now supports =>.
66 *** Guile's optargs: lambda* and define* are now supported.
67 *** #;-comments are now supported.
68 *** Non-nested #| |#-comments are now supported.
69 *** Quasisyntax is now supported.
70 *** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
71 *** 9 new [partial] modules
72 (mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
73 (srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
74 (rnrs arithmetic bitwise), (sxml xpath)
75 *** 36 new functions
76 1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
77 char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
78 getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
79 positive?, remove!, remove, string->number, string-copy,
80 string-prefix?, string=, string=?, symbol->keyword symbol-append,
81 symbol-prefix?, unless, write, zero?.
82 ** Noteworthy bug fixes
83 *** Macros are now memoized.
84 *** An error is reported when using a wrong number of arguments with a call.
85 *** Cond now evaluates its test clauses only once.
86 *** Append can also handle one argument.
87 *** For-each now supports 2 list arguments.
88 *** Map now supports 3 list arguments.
89 *** Backslash in string is supported.
90 *** Closure is not a pair.
91 *** All standard characters are supported.
92 *** Mescc now also runs in Guile.
93 * Changes in 0.3 since 0.2
94 ** Core
95 *** Number-based rather than pointer-based cells.
96 *** Garbage collector aka Jam scraper.
97 A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?)
98 algorithm has been implemented.
99 *** The reader has been moved to Scheme.
100 ** Language
101 *** Simple loadable modules.
102 *** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
103 *** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
104 ** Noteworthy bug fixes
105 *** Srfi-0 has been fixed.
106 * Changes in 0.2 since 0.1
107 ** Core
108 *** Names of symbols and strings are list of characters [WAS: c-string].
109 *** Sc-expand from pre-R6RS's psyntax has been integrated.
110 *** Undefined variable error now shows the name of the undefined variable.
111 *** There is now only one SCM type for builtin functions.
112 *** Macro expansion has been cleaned-up.
113 ** Language
114 *** Mes now provides a subset of R6RS.
115 *** Mes now provides syntax-case.
116 *** Mes now provides `load'.
117 ** Noteworthy bug fixes
118 *** Using values as second parameter of builtin function yields first value.
119 *** Quoted internals (e.g. 'if 'lambda) are now symbols.
120 *** Syntax error now exits.
121 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
122 *** Apply now accepts multiple list arguments.
123 *** Apply of character, inernal, number, string is an error.
124 *** Quasisyntax reading 
125
126 * Changes in 0.1 (since progress report #2)
127 ** Core
128 *** expand_macro is now a separate function.
129 *** A smaller core can now compiled using BOOT=1.
130 The smaller core does not provide define, define-macro, or quasiquote;
131 these are provided from a Scheme version of implemented eval/apply.
132 ** Language
133 *** Mes now provides a subset of R5RS.
134 *** Mes now provides let-syntax.
135 *** Mes now provides match.
136 *** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
137 ** User interface
138 *** Mes now provides a REPL, run:
139     scripts/repl.mes
140 *** Mes compiler can be run as a script:
141     scripts/mescc.mes doc/examples/main.c
142 *** Macro expansion can be inspected in the REPL, e.g.:
143     ,expand (and 0 1)
144 ** Noteworthy bug fixes
145 *** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
146 *** Symbols are now truly unique.
147   * '(), #t, #f are no longer symbols.