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.8 since 0.7
14 ** Mescc
15 *** Mescc now has experimental annotation support for hex2.
16 *** Mescc now depends on the hex2 linker from [[https://github.com/oriansj/MESCC_Tools][MESCC_Tools]].
17 Direct ELF output support has been removed.
18 ELF symbol and string table creation has been removed.
19 *** Mescc has been simplified by leveraging use labels in hex2 output.
20 *** Mescc now supports continue in loops.
21 *** Mescc now compiles to hex2 object files.
22 ** Language
23 *** 1 new function
24 list-index.
25 * Changes in 0.7 since 0.6
26 ** Core
27 *** The minimal C reader is now always included; dependencies
28 on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been
29 dropped, these are now optional.
30 ** Language
31 *** Mes reader now supports octal numbers #oXXX.
32 *** 10 new functions
33 current-output-port, getopt-long, negate, open-output-file,
34 option-ref, set-current-output-port, string-rindex, string-suffix?,
35 with-ouwith-output-to-file, with-output-to-port.
36 ** Mescc
37 *** Mescc can now be installed and used alongside a gcc installation.
38 *** Mescc can now handle const anywhere.
39 *** Mescc now supports array fields in structs.
40 *** Mescc now supports forward declarations and typedef.
41 *** Mescc can now handle comments anywhere.
42 *** Mescc now supports addition and substraction for enum field values.
43 *** Mescc now supports anonymous enums.
44 *** Mescc now supports all C99 header files needed to compile tcc.c.
45 *** build: C sources are now preprocessed separately, then compiled and linked.
46 *** build: mlibc and C sources are now compiled separately and then linked.
47 *** mlibc has been moved from Scheme snippets into C.
48 *** Mescc now supports -c, -D, -E, -I and -o options.
49 **** open now supports optional third mode parameter.
50 ** Noteworthy bug fixes
51 *** string-index now supports function predicate.
52 *** number->string for radix > 10 now produces `a' instead of `:'.
53 * Changes in 0.6 since 0.5
54 ** Core
55 *** configure, build now supports x86 and development for arm with-courage.
56 ** Language
57 *** Nyacc has been unbundled and is now a dependency.
58 *** Mes now supports case-lambda.
59 *** Mes reader now supports abbreviated form for return character #\cr.
60 *** 1 new function
61 string-index.
62 ** Mescc
63 *** Mescc can be used on regular C sources, like tinycc's tests/test2 suite.
64 *** make check passes 33/55 of tinycc's test suite etest/test2 tests.
65 *** Mescc now recognizes `short' as a type.
66 *** Mescc now supports sizeof (<identifier>), sizeof(<expression>).
67 *** Mescc now respects enum field initializers and supports enum variables.
68 *** Mescc now supports binary constants .
69 *** Mescc now supports assignments from ==, != boolean expressions .
70 *** Mescc now supports &, ^.
71 *** Mescc now supports struct pointers.
72 *** Mescc now supports struct definition with immediatete variable declaration.
73 *** Mescc now supports calling (returning correctly from) void functions.
74 *** Mescc now handles case statements breaks without compound correctly.
75 *** Mescc now has better [int/pointer] array support.
76 *** Mescc now has better support for simple (non-array-)structs.
77 *** Mescc now supports multiple declarations in one statement like: int a,b;
78 **** 2 new mlibc functions
79 printf, strcpy.
80 ** Noteworthy bug fixes
81 *** Installed mes and mes.repl now also run outside of source tree again.
82 * Changes in 0.5 since 0.4
83 ** Core
84 *** Support compilation with Mescc.
85 *** Support compilation with -nostdinc, -nostdlib using mlibc.
86 *** Support call-with-current-continuation.
87 *** Support exception handling, catch/throw.
88 *** Give sensible error message when a macro is missing.
89 ** Language
90 *** Map now supports 4 lists.
91 *** The reader supports negative hex numbers.
92 *** 24 new functions
93 access?, assoc-set! c????r, compose, list->char-set,
94 open-input-string, read-string, string-delete, with-throw-handler.
95 ** Mescc
96 *** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
97 *** Switch to Nyacc frontend, update Nyacc to 0.76.5.
98 *** Mescc now has a test suite, scaffold/t.c.
99 *** Mescc now includes a minimal C library libc/mlib.c libc/mstart.c.
100 *** Mescc can now compile mes.c.
101 ** Noteworthy bug fixes
102 *** The build system (configure, make) has been refactored.
103 *** Support map-4.
104 *** Evaluate arguments of OR only once.
105 *** Fix assq-set!
106 *** Fix ,expand in the REPL.
107     
108 * Changes in 0.4 since 0.3
109 ** Core
110 *** Improved performance.
111 Macros are now memoized; after expansion and before eval'ing the
112 expanded form, their input s-expression is replaced by the expansion.
113 This yields a nice performance improvement which finally allowed
114 moving all non-essential bits from the C-core into Scheme...including
115 the reader.  The Scheme reader is much, much slower than the previous
116 C version, making Mes--again-- feel slow.  Think of that as a feature.
117 *** Bootstrap with minimal reader in C.
118 The C-reader needs only support reading of words and lists
119 (s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
120 then takes over and handles reading of quoting, characters, strings,
121 block-comments.
122 *** Reduced size.
123 Total C size: ~1500LOC.  The main Mes evaluator is now ~1000LOC
124 including cell creation and garbage collector.  This code is able to
125 execute a Scheme program that has been loaded into memory.  Another
126 ~500LOC is spent to load a minimal Scheme program and to dump it, to
127 provide a small posix interface, math functions and do some error
128 reporting.
129 *** Programs can be dumped and loaded using --dump and --load.
130 ** Language
131 *** Minimal syntactic exception support for Nyacc.
132 *** Minimal syntactic fluids support for Nyacc.
133 *** Keywords are now supported.
134 *** Cond now supports =>.
135 *** Guile's optargs: lambda* and define* are now supported.
136 *** #;-comments are now supported.
137 *** Non-nested #| |#-comments are now supported.
138 *** Quasisyntax is now supported.
139 *** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
140 *** 9 new [partial] modules
141 (mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
142 (srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
143 (rnrs arithmetic bitwise), (sxml xpath)
144 *** 36 new functions
145 1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
146 char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
147 getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
148 positive?, remove!, remove, string->number, string-copy,
149 string-prefix?, string=, string=?, symbol->keyword symbol-append,
150 symbol-prefix?, unless, write, zero?.
151 ** Noteworthy bug fixes
152 *** Macros are now memoized.
153 *** An error is reported when using a wrong number of arguments with a call.
154 *** Cond now evaluates its test clauses only once.
155 *** Append can also handle one argument.
156 *** For-each now supports 2 list arguments.
157 *** Map now supports 3 list arguments.
158 *** Backslash in string is supported.
159 *** Closure is not a pair.
160 *** All standard characters are supported.
161 *** Mescc now also runs in Guile.
162 * Changes in 0.3 since 0.2
163 ** Core
164 *** Number-based rather than pointer-based cells.
165 *** Garbage collector aka Jam scraper.
166 A variant on SICP's stop and copy Garbage Colletor (Jam Scraper?)
167 algorithm has been implemented.
168 *** The reader has been moved to Scheme.
169 ** Language
170 *** Simple loadable modules.
171 *** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
172 *** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
173 ** Noteworthy bug fixes
174 *** Srfi-0 has been fixed.
175 * Changes in 0.2 since 0.1
176 ** Core
177 *** Names of symbols and strings are list of characters [WAS: c-string].
178 *** Sc-expand from pre-R6RS's psyntax has been integrated.
179 *** Undefined variable error now shows the name of the undefined variable.
180 *** There is now only one SCM type for builtin functions.
181 *** Macro expansion has been cleaned-up.
182 ** Language
183 *** Mes now provides a subset of R6RS.
184 *** Mes now provides syntax-case.
185 *** Mes now provides `load'.
186 ** Noteworthy bug fixes
187 *** Using values as second parameter of builtin function yields first value.
188 *** Quoted internals (e.g. 'if 'lambda) are now symbols.
189 *** Syntax error now exits.
190 *** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
191 *** Apply now accepts multiple list arguments.
192 *** Apply of character, inernal, number, string is an error.
193 *** Quasisyntax reading 
194
195 * Changes in 0.1 (since progress report #2)
196 ** Core
197 *** expand_macro is now a separate function.
198 *** A smaller core can now compiled using BOOT=1.
199 The smaller core does not provide define, define-macro, or quasiquote;
200 these are provided from a Scheme version of implemented eval/apply.
201 ** Language
202 *** Mes now provides a subset of R5RS.
203 *** Mes now provides let-syntax.
204 *** Mes now provides match.
205 *** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
206 ** User interface
207 *** Mes now provides a REPL, run:
208     scripts/repl.mes
209 *** Mes compiler can be run as a script:
210     scripts/mescc.mes doc/examples/main.c
211 *** Macro expansion can be inspected in the REPL, e.g.:
212     ,expand (and 0 1)
213 ** Noteworthy bug fixes
214 *** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
215 *** Symbols are now truly unique.
216   * '(), #t, #f are no longer symbols.