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