~ chicken-core (master) /NEWS
Trap16.0.0
2
3- Core libraries
4 - All modules specified by the R7RS small language are now available in
5 the core system.
6 - The internal string representation has been converted to UTF-8,
7 making strings fully UNICODE capable.
8 - The (chicken blob) module has been replaced with (chicken bytevector),
9 containing R7RS compatible bytevector operations. Bytevectors are
10 now fully equivalent to SRFI-4 u8vectors.
11 - The read-syntax for blobs (`#${...}') has been removed. Bytevectors
12 can be read using `#u8(...)' or `#u8"..."'.
13 - `open-input-file' and `open-output-file' accept a file encoding,
14 supported are currently UTF-8 (the default) and Latin-1 (ISO-8859-1).
15 - `file-read', `file-write', 'set-pseudo-random-seed!' and `random-bytes'
16 require a bytevector argument and do not accept strings.
17 - `process-fork', `process-run', `process' and `process*' return now
18 a process-object instead of a PID, use process record accessors to
19 retrieve exit-status and input/output ports. `process-wait' and
20 `process-signal' accept either a PID or a process object as
21 argument.
22 - File-locking operations in the (chicken file posix) module now use the
23 flock(2) system call, operator over whole files, are thread-safe and
24 use a simpler interface. `file-test-lock' has been removed.
25 - `read-u8vector', `read-u8vector!' and `write-u8vector' have been
26 removed, use the equivalent operations from the (chicken io)
27 module instead.
28 - Added `read-bytevector', `read-bytevector!' and `write-bytevector'
29 to the (chicken io) module.
30 - Removed `set-port-name!', use the SRFI-17 setter for `port-name'
31 instead.
32 - Added `port-encoding' to the (chicken port) module.
33 - `make-input-port' and `make-output-port' take their optional
34 port methods as keyword arguments now.
35 - Locatives on strings are now indexed by code-point, not byte.
36 - `symbol-escape' now also controls whether symbols are printed in
37 escaped ("|...|") mode or not.
38 - Symbol printing is stricter in deciding when symbols should be escaped
39 or not.
40 - The following primitives have been moved from (chicken base)
41 to R7RS modules:
42 - `exact-integer-sqrt?', `vector-copy!', `make-parameter', `call/cc',
43 `open-input-string', `open-output-string', `get-output-string',
44 `input-port-open?', `output-port-open?', `parameterize' and `port?'
45 moved from the (chicken base) to the (scheme base).
46 - `case-lambda' moved from (chicken base) to (scheme case-lambda).
47 - `features' moved from (chicken platform) to (scheme base).
48 - `write-string' moved from (chicken io) to (scheme base) and its
49 signature changed to the R7RS one.
50 - `define-record-type' moved to (scheme base) and is generative,
51 to be compliant with R7RS.
52 - `syntax-error' has been removed from (chicken syntax) and is now a
53 macro and part of (scheme base).
54 - `record-instance?' and `make-record-instance' accept non-symbolic
55 type specifiers to support generative record types.
56 - The new (chicken number-vector) module now provides a superset of
57 SRFI-4, including 64 and 128-bit complex number vectors, the `srfi-4'
58 module is still available but exports only those procedures as are
59 specified in SRFI-4.
60 - The second (optional) parameter for `load' and `load-relative' may be
61 either an environment or an evaluation procedure.
62 - The module aliases `srfi-0', `srfi-6', `srfi-9', `srfi-11', `srfi-23',
63 `srfi-39' and `srfi-98' have been removed (all of these are covered by
64 R7RS).
65 - The modules `r4rs', `r5rs', `r4rs-null' and `r5rs-null' have been
66 renamed to `(scheme XXX)'.
67 - Hexadecimal escape sequences in strings and extended symbols must be
68 terminated by the `;' character, following R7RS.
69 - The `#ci'/`#cs' read syntaxes have been removed, use
70 `#![no-]fold-case'
71 markers instead.
72 - `include' and `include-relative' accept multiple filenames,
73 `include-ci'
74 has been added.
75 - Added `include-path' to (chicken platform) module.
76 - Added `number-vector-data' to (chicken memory representation) module.
77 - The platform-identifier "mingw32" has been renamed to "mingw".
78 - Library procedures that return paths now always convert them to
79 contain forward slashes, 'make-pathname' always uses "/" for path
80 separation.
81 - Added `expand1' to (chicken syntax) module for expanding a macro
82 only once, also added the ",x1" command to "csi" for this.
83
84- Syntax expander:
85 - `syntax-rules' attempts to better support tail patterns with ellipses
86 (#1736).
87
88- FFI changes:
89 - Strings and symbols passed to foreign code are not copied, they are
90 passed directly, any mutations done by external code will be visible on the
91 Scheme side.
92 - Complex numbers, C structs and unions can now be passed directly as
93 arguments and returned as results when interfacing to C code.
94
95- Tools
96 - The compiler and interpreter option `-r5rs-syntax' has been renamed to
97 `-r7rs-syntax' and does not disable extended symbol syntax ("|...|")
98 anymore.
99 - The "feathers" debugger has been removed from the core and is now
100 available as an egg.
101 - The `set-describer!' procedure has been removed from the `csi' module.
102 - The "csc" program now accepts tool flags (e.g. -compiler, -cc etc)
103 which have paths with spaces in them without requiring the user to
104 double-quote them. As a consequence, it no longer accepts programs
105 with space separated flags for tool arguments (e.g.
106 "csc -cc 'gcc -debug'" etc). If this is desired, write a short
107 shell script which calls the tool with your flags.
108 - `chicken-install' now locks the cache directory during
109 egg-installation.
110 - Added component type `installed-c-object' to egg format.
111 - The `csc-options' and `link-options' configuration clauses in egg
112 specifications now allow `custom-config' forms to produce arbitrary
113 computed compiler and linker options.
114
115- Build system
116 - A "configure" script is now used to prepare the sources for building
117 everything. This simplifies the use of "make", allows more elaborate
118 platform sanity checks and follows conventions.
119 - On Windows the minimal "mingw" build is not supported anymore, a POSIX
120 shell and the basic sete of command-line utilities is now required
121 (formerly the "mingw-msys" build). Chris Wellons "w64devkit" is now
122 the recommended toolchain. The platform identifier "mingw-msys" has
123 been renamed to "mingw".
124 - The system can now be built with "zig cc" as a C compiler/linker
125 replacement.
126
1275.4.0
128
129- Security fixes
130 - CVE-2022-45145: Neutralize possible escape characters in egg metadata
131 to avoid arbitrary OS command injection during egg installation,
132 reported by Vasilij Schneidermann who also provided the necessary
133 patches to mitigate this problem.
134 - The runtime option "-:b" has been removed, as it was deemed too
135 insecure to be able to drop to a REPL from the CLI of any program.
136 - Runtime option processing has been hardened: processing now stops on
137 the first non-runtime option or after "-:", whichever comes first.
138
139- Core libraries
140 - Fix type declarations for `file-select` (reported by Anton Idukov).
141 - Change `create-temporary-{file,directory}` fallback code on Windows to
142 use %USERPROFILE%/AppData/Local/Temp if that environment variable is set.
143 - Added new thread-safe API for POSIX signals ("make-signal-handler",
144 "signal-ignore" and "signal-default") and deprecated the existing one.
145 - Added "make-finalizer" to execute finalizers in a thread-safe
146 manner.
147 - Added weak pairs to (chicken base), with similar behaviour to Chez Scheme.
148 - Added "locative-index", kindly contributed by John Croisant.
149 - Added "fp*+" (fused multiply-add) to "chicken.flonum" module
150 (suggested by Christian Himpe).
151 - Added flonum-specific hyperbolic functions and their inverse to
152 "chicken.flonum" module (suggested by Christian Himpe).
153 - The `process-execute` procedure now sets argv[0] to the unmodified
154 filename. Previously, the directory part would be stripped.
155 - Added support for embedded strings and characters in SRFI-4 vector
156 literals.
157 - read-with-source-info is now documented and officially supported,
158 from the (chicken syntax) module. read/source-info is still exported
159 from the undocumented internal (chicken compiler support) module, but
160 using it from there is deprecated.
161 - Added "export/rename" to (chicken module) for renaming identifiers on
162 export.
163 - The values of the TMPDIR, TMP and TEMP environment variables are no
164 longer memoized (fixes #1830).
165 - Condition objects produced by procedures that change errno now have
166 an `errno' property.
167 - Deprecated "chicken-home" and added "include-path" in the
168 chicken.platform module.
169 - Irregex has been updated to upstream 0.9.11 plus an additional fix
170 for sre->string. The 0.9.11 release fixes a few problems related to
171 utf-8 handling (which should not affect CHICKEN) and expands the
172 definition for the 'whitespace character set to include vertical tab,
173 carriage return and form feed.
174
175- Tools
176 - Fix scripts generated by `chicken-install` on Windows to not quote `>>`
177 when echoing into files which would result in empty egg-info files
178 (reported and fixed by Jani Hakala).
179 - The -R option for csi and csc now accepts list-notation like
180 e.g. (srfi 1). Fixes #1809, reported by Wolfgang Corcoran-Mathe.
181 - Fix shell quotation in options passed from csc to other tools.
182 Fixes #1302, reported by Xin Wang.
183 - The -prelude and -postlude options for csc work properly again.
184 - chicken-install now retrieves the latest egg version when
185 instructed to install an egg that's already installed (#1802).
186 - When `location' is specified in setup.defaults, chicken-install
187 will consider two location layouts when looking for eggs:
188 <location>/<egg> and <location>/<egg>/<version>.
189 - chicken-install: Fix #1684 (programs that specify
190 component-dependencies should build-depend on their import
191 libraries).
192 - chicken-install now caches eggs installed from local locations.
193 - chicken-install now accepts the -location command line option
194 (short: -l) to specify local directories where to get egg sources
195 from.
196 - chicken-install now gives a warning on unexpected properties (#1492).
197 - chicken-install now uses a directory specific for cache metadata
198 (VERSION, STATUS and TIMESTAMP files) to avoid collisions with source
199 files on case-insensitive file systems like on MacOS (#1753, reported
200 by Kon Lovett).
201
202- Syntax expander
203 - When passing a module as an environment to eval, correctly resolve
204 identifiers in macro expansions (#1295 reported by Caolan McMahon).
205 - Internal definitions honor rebindings of core special forms (#1132).
206 - Globally defining an identifier previously bound to a macro now fully
207 shadows the macro (#1166, reported by Michele La Monaca).
208
209- Compiler
210 - When emitting types files, the output list is now sorted, to ensure
211 deterministic build output (fixes #1783, reported by "ss2").
212
213- Build system
214 - Fix compiler warnings about zero-sized `memset` (reported by Claude Marinier).
215 - Disable broken test-create-temporary-file on Windows (reported by "jjhoo").
216 - Drop use of XCODE_... environment variables on MacOS.
217 - Add build directory to rpath on MacOS so that the test suite picks up correct
218 libchicken, even if CHICKEN is already installed (thanks to Christian Himpe).
219 - Default "cc" on BSD systems for building CHICKEN to avoid ABI problems
220 when linking with C++ code.
221
222- Runtime system
223 - Make line numbers available for error output and during syntax expansion
224 in the interpreter as well as the compiler.
225
2265.3.0
227
228- Core libraries
229 - In (chicken process-context posix), the setters for current-user-id,
230 current-effective-user-id and current-group-id now check that the
231 new user/group value is a fixnum instead of blindly passing it on
232 to the C implementation (which would cause bogus user ids to be set).
233 Fixes #1787, thanks to Christopher Brannon.
234 - The srfi-17 module now exports the `getter-with-setter` and `setter`
235 procedures, not just the set! macro (thanks to Lassi Kortela)
236 - Fix hang in chicken-install -update-db on Windows (thanks to Mark
237 Fisher for reporting and Jani Hakala for debugging and patch).
238 - Fixed an inadvertant error during error reporting in the `numerator`
239 and `denominator` procedures when passed non-finite flonums (#1730).
240 - Fixed a bug where optimisations for `irregex-match?` would cause
241 runtime errors due to the inlined specialisations not being
242 fully-expanded (see #1690).
243 - Irregex has been updated to upstream 0.9.10, which fixes behaviour
244 of irregex-replace/all with positive lookbehind so all matches are
245 replaced instead of only the first (reported by Kay Rhodes), and
246 a regression regarding replacing empty matches which was introduced
247 by the fixes in 0.9.7 (reported by Sandra Snan). Also, the
248 http-url shorthand now allows any top-level domain and the old
249 "top-level-domain" now also supports "edu" (fixed by Sandra Snan).
250 Also, a problem was fixed with capturing groups inside a kleene
251 star, which could sometimes return incorrect parts of the match.
252 Finally, "bol" handling was fixed to handle newlines consistently
253 so that multiple matches don't overlap (reported by Sandra Snan).
254 - current-milliseconds has been deprecated in favor of the name
255 current-process-milliseconds, to avoid confusion due to naming
256 of current-milliseconds versus current-seconds, which do something
257 quite different. Also, its definition has been tweaked to
258 guarantee that it returns the time since process startup. On
259 Windows, it will now return sane values after 24 days of uptime.
260 On UNIX, the values returned will be precise to the millisecond
261 instead of rounded down to the nearest second at startup (which
262 would result in erratic startup times).
263 - The default mode for files created by `file-open' has been changed
264 to 0666 (plus whatever change the effective umask applies), rather
265 than 0744 (see #1698).
266 - Fixed type database entry for "log" with second arg (fixes #1725).
267 - Made topological-sort behave better when dependency target is listed
268 multiple times by concatenating dependencies (fixes #1185).
269
270- Module system
271 - Reexported macros now work when the reexporting module redefines
272 identifiers from the original (fixes #1757, reported by Sandra Snan).
273 - When using "except" in "import" to omit reexported macros,
274 they are really not imported (#1771, reported by Sandra Snan).
275
276- Runtime system
277 - Sleeping primordial thread doesn't forget mutations made to
278 parameters in interrupt handlers anymore. (See #1638. Fix
279 contributed by Sebastien Marie)
280 - A feature corresponding to the word size is available
281 regardless of the word size (#1693)
282 - The default maximum heap size on 64-bit platforms is now the
283 theoretical maximum addressable memory size (#1675). Use -:m
284 if you would like to override this at run-time.
285 - Deprecated C_(a_i_current_)milliseconds in favor of
286 C_(a_i_)current_process_milliseconds to match the Scheme-level
287 deprecation of current-milliseconds.
288 - Officially deprecated C_pair() in favor of C_a_pair(); it has
289 been deprecated for years.
290 - At program cleanup, finalizers are only forced when the live
291 finalizer count is non-zero
292 - The symbol `srfi-87` has been added to the list of built-in
293 feature identifiers.
294 - Garbage collection algorithm has been changed to reduce thrashing
295 when heap is almost full, by growing the heap sooner. A new -:hf
296 option was added to tweak when heap growth should occur.
297 - Added `-:R' runtime option to initialize rand() state
298 deterministically (should help with #1650 and benchmarking).
299
300- Compiler
301 - Statically linked programs using built-in libraries are supported
302 again (fixes #1788, a regression from 5.2.0).
303 - Avoid re-using argvector when inline rest operations are being
304 used in CPS calls (#1703, thanks to Jakob L. Keuze).
305 - An `emit-types-file` declaration has been added, which corresponds
306 to the compiler flag of the same name (#1644, thanks to Marco Maggi
307 for the suggestion).
308 - Fixed a bug caused by a bad interaction between two optimizations:
309 argvector rest ops would be applied even if a procedure already got
310 its rest arg consed at the call site (#1756, thanks to Sandra Snan).
311
312- Build system
313 - Fix build with tcc.
314 - Fix a few tests on Windows so the suite passes once again.
315 - Auto-configure at build time on most platforms. Cross-compilation
316 still requires PLATFORM to be set, and it can still be provided
317 manually, but it is no longer required in the common case.
318 - Fix Linux to MingW cross-compilation (#1768, thanks to Théo Cavignac)
319 - The `clean' target for make now also removes build configuration files.
320 - The `distclean' target for make has been removed (now `clean' does what
321 `distclean' used to do).
322
323- Tools
324 - Fix a problem with egg installation scripts on Windows, where the
325 platform was not correctly identified, depending on the shell used
326 during installation of the core system (thanks again to Mark Fisher
327 for reporting and helping in finding the culprit).
328 - Fixed a bug in chicken-install (#1744) that would cause
329 `Error: (string->number) bad argument type: #!eof` in some cases.
330 - If chicken-install has a program prefix/suffix, it now writes to a
331 cache directory matching its program name (#1713, thanks to Alice Maz)
332 - Fixed bug in chicken-install regarding variable quotation on UNIX-like
333 systems which prevented installation into paths with spaces (#1685).
334 - Fixed a similar bug in chicken-install for paths with spaces on mingw
335 and mingw-msys (#1727, thanks to Josh Helzer for reporting and Vasilij
336 Schneidermann for the patch).
337
338- Module system
339 - Fixed a memory leak when calling (import) multiple times in a row
340 on the same module (#1772; reported by "plugd" on IRC).
341
3425.2.0
343
344- Core libraries
345 - Fix `memory-statistics` by returning semi-space bytes and used
346 semi-space bytes like the documentation says. Old implementation
347 returned full-heap size and (full-heap - used-semi-space).
348 - for-each and map now behave consistently in compiled and interpreted
349 mode, like in SRFI-1. They now stop when the shortest list is
350 exhausted instead of raising an exception (fixes #1422).
351 - There is now a srfi-88 module which contains just the three
352 procedures from the (chicken keyword) module defined by the SRFI.
353 - A feature identifier named "srfi-88" is now registered.
354 - The procedures `record-printer` and `set-record-printer!` and a
355 corresponding SRFI-17 setter have been added. These deprecate
356 `define-record-printer` which isn't a "real" definition (see #1294).
357 - On Windows, `decompose-directory` no longer crashes when a drive
358 letter is present in the supplied path string.
359 - irregex-replace[/all] have been fixed for empty matches, so they
360 will no longer drop characters and ignore the replacement (#1661).
361 - Irregex has been updated to upstream 0.9.7, which also improves
362 how empty matches are treated in irregex-fold and irregex-split.
363
364- Runtime system
365 - Quoted empty keywords like ||: and :|| are now read like prescribed
366 by SRFI-88 in the corresponding keyword mode. Symbols containing
367 quoted empty prefixes or suffixes like ||:abc and abc:|| will be
368 read correctly as symbols now (fixes #1625, thanks to Andy Bennett).
369 - IEEE floating point negative zero is now properly handled: it can
370 be read, written and distinguished by eqv? and equal?, but not =
371 (fixes #1627, thanks to John Cowan).
372 - ##sys#check-exact and its C implementations C_i_check_exact and
373 C_i_check_exact_2 have been deprecated (see also #1631).
374 - When garbage collector is manually invoked from a finalizer, raise
375 an error instead of hanging forever (fixes #1586).
376 - define-record-type will now give an error if the constructor
377 definition refers to field that's not listed elsewhere (see #1633)
378 - Added new -:hu option to set the memory usage low watermark
379 percentage at which the heap should be shrunk, and changed the
380 calculation to actually reflect this (see #1379).
381
382- Compiler
383 - Fixed a bug in lfa2 pass which caused "if" or "cond" nodes to be
384 incorrectly unboxed if the "else" branch had a flonum result type
385 (#1624, thanks to Sven Hartrumpf)
386 - Inline files no longer refer to unexported foreign stub functions
387 (fixes #1440, thanks to "megane").
388 - In some cases, rest argument lists do not need to be reified, which
389 should make using optional arguments and case-lambda faster (#1623).
390 - Values from foreign types which have an argument or return value
391 converter are no longer inferred to have the Scheme type which
392 corresponds to the raw foreign type, which was incorrect (#1649).
393
394- Module system
395 - Trying to export a foreign variable, define-inlined procedure or
396 define-constant variable gives a friendly error instead of saying
397 the variable doesn't exist (fixes #1346).
398 - When modules are registered, they no longer pollute the global
399 environment with imports made in that module (fixes #1548)
400
401- Tools
402 - The new "-module-registration" options causes module registration
403 code to always be included in the program, even when it has also
404 been emitted as a separate file (for example with "-J").
405 - chicken-install now correctly checks server response code to avoid
406 interpreting error response bodies (like 404, 500) as Scheme code.
407 - chicken-install now follows HTTP redirects when downloading eggs.
408 - chicken-install will now change to the correct drive before
409 attempting to change to the egg directory (fixes #1647).
410
411
4125.1.0
413
414- Core libraries
415 - Symbols ending or starting with a colon are now always pipe-quoted
416 when written by `write` to ensure they can be read back with a
417 different keyword-style setting.
418 - Read-write invariance of special symbols starting with #! other
419 than #!key, #!rest or #!optional is now preserved (#1572).
420 - When using (set-file-position!) on a port, its EOF status will now
421 be reset.
422 - In (chicken file posix), the values of perm/irgrp, perm/iwgrp,
423 perm/ixgrp, perm/iroth, perm/iwoth and perm/ixoth are now correctly
424 defined (they were all for "usr"; #1602, thanks to Eric Hoffman).
425 - In (chicken file posix), `file-truncate` now accepts also accepts
426 port objects, for consistency with other file procedures.
427 All such procedures from (chicken file posix) now have the correct
428 types in types.db (fixes #1609, thanks to Robert Jensen).
429 - Add the system-config-directory and system-cache-directory procedures
430 in the chicken.platform module. These procedures follow the XDG
431 specification and also give sensible results on Windows.
432 - Fix get-environment from (chicken process-context) to raise an
433 error when passed #f instead of segfaulting.
434 - Qualified symbols (##foo#bar style) are no longer encoded by a
435 byte prefix inside the symbol name. This ensures read-write
436 invariance of symbols which start with a low-byte character
437 (fixes #1077, except for keywords, which start with NUL bytes).
438 - Fix a missing export (list->s64vector) in SRFI-4.
439
440- Runtime system
441 - Keywords are now distinct types; they are not a subtype of symbols.
442 - Use arc4random on FreeBSD (thanks to Tobias Kortkamp and gahr)
443 - Removed the unused, undocumented (and incorrect!) C functions
444 C_delete_symbol_table and C_set_symbol_table.
445 - Continuations which discard additional values beyond the first no
446 longer accept multiple values via direct invocation after being
447 captured through `call/cc`, only via `values` (revert of #1390,
448 due to #1601)
449 - SRFI-4 vector predicates, reference, set and length procedures
450 should now be faster in tight loops as they're inlineable (#757).
451 - Keywords are now interned in a separate keyword table, not in the
452 standard symbol table. This brings full read-write invariance
453 for symbols (they can now also start with NUL bytes). Keywords
454 no longer have plists. Fixes #1576.
455 - Increased the "binary compatibility version" to 11.
456
457- Compiler
458 - Restored optimized implementations of =, +, -, /, * and quotient in
459 fixnum-arithmetic mode (fixes #1604 mostly; thanks to "chickendan").
460 - Added an optimization pass for reducing the amount of boxing of
461 intermediate floating point values, enabled by the "-lfa2" compiler
462 option.
463 - The "lfa2" pass is now enabled at optimization levels 2 or higher.
464
465- Module system
466 - When you try to import the module you are currently defining into
467 itself, an error will be raised. This prevents an infinite loop in
468 the compiler when later trying to import that same module (fixes
469 #1506, thanks to Kristian Lein-Mathisen).
470
471- Foreign function interface
472 - Improved hygiene in FFI macro expansions, which means you don't
473 have to import "scheme" or "(chicken base)" for them to work.
474
475- Type system
476 - It is now possible to quote free variables in type declarations,
477 which acts as shorthand for `forall' (thanks to "megane")
478
479- Tools
480 - csi now uses (system-config-directory) to find csirc and falls back to
481 $HOME/.csirc when needed.
482 - chicken-install now uses (system-config-directory) to find a user
483 defined setup.defaults file ; it also uses (system-cache-directory)
484 for its egg cache directory when the CHICKEN_EGG_CACHE environment
485 variable is not defined.
486
487- Egg specifications
488 - Allows "cond-expand" and "error" forms in egg specification files.
489 - Add "c-object" and "object" properties to link separately compiled
490 C objects into CHICKEN code.
491
492
4935.0.0
494
495- Runtime system
496 - Added support for the full numeric tower, including various new
497 procedures taken from the "numbers" egg. All calculations will
498 now return exact numbers where possible, so code relying on flonums
499 being returned may need to be changed if rational numbers do not
500 provide the desired performance.
501 - Port directionality has been generalized from a simple input/output
502 flag to a bitmap, to allow for multidirectional ports.
503 - Weak symbol GC is faster, simpler, and can now collect all
504 unreferenced symbols instead of a maximum of 997 per major GC.
505 - The -:w option has been removed; symbols are now always collected.
506 - Increased the "binary compatibility version" to 9.
507 - Continuations which discard additional values beyond the first now
508 also accept multiple values via direct invocation after being
509 captured through `call/cc`, not just via `values` (#1390)
510 - Removed the deprecated C_locative_ref and C_mutate2 C functions.
511 - The trace buffer no longer holds on to thread objects, allowing them to
512 be garbage collected sooner (#1356, thanks to Kristian Lein-Mathisen)
513 - On Cygwin and MinGW, the "build-platform" now corresponds to the
514 tool chain used (gnu, clang, unknown) like on *nix, while the
515 software-version is now "cygwin" or "mingw32" instead of "unknown".
516 This also means the features list will now contain the tool chain
517 on all platforms.
518 - Symbols starting with #% are no longer treated specially and need
519 to be quoted with pipes. This makes the "%" sign available for use
520 in custom/user-defined sharp-sign read syntax.
521
522- Compiler
523 - Fixed an off by one allocation problem in generated C code for (list ...).
524 - The "-scrutinize" compiler option has been removed.
525 - The "-module" compiler option (aliased as "-m") now expects a module name.
526 - The generated C output of the compiler is now deterministic: it
527 will be bit-for-bit identical when compiling the same Scheme file
528 with the same version of the compiler.
529 - the "-consult-type-file" and "-emit-type-file" options have been renamed
530 to "-consult-types-file" and "-emit-types-file", respectively.
531
532- Tools
533 - The new "-link" option to csc allows linking with objects from extensions.
534 - The new "-libdir" option to csc allows overriding the runtime library
535 directory.
536 - The ambiguous "-l<libname>" option for csc has been removed (#1193).
537 - Removed deprecated "-n" shorthand for "-emit-inline-file" from csc.
538 - Removed "chicken-bug" tool.
539
540- Core libraries
541 - Removed support for memory-mapped files (posix), queues
542 (data-structures), binary-search (data-structures), scan-input-lines
543 (utils), group-information (posix) object-eviction (lolevel), and
544 compile-file (utils). These are now available as eggs.
545 - Removed the srfi-1, srfi-13, srfi-14, srfi-18, srfi-69, and utils
546 units. These are now available as eggs.
547 - Added the `executable-pathname` procedure for retrieving a path to
548 the currently-running executable.
549 - Removed all support for SWIG.
550 - Removed interrupts-enabled declaration specifier.
551 - `sleep` now suspends the current thread when threading is enabled,
552 otherwise it sleeps the process. The new `process-sleep` procedure
553 in unit posix can be used to sleep the process unconditionally.
554 - `with-error-output-to-port' from the ports module has been renamed
555 to the more common `with-error-to-port', and `with-error-to-string'
556 has been added for completeness (thanks to Michael Silver).
557 - A new `make-bidirectional-port' procedure has been added to the
558 ports unit that will combine separate input- and output- ports into
559 a single bidirectional port.
560 - New `input-port-open?` and `output-port-open?` procedures have been
561 added for testing whether a port is open in a specific direction.
562 - An `include-relative` form has been added to the (chicken base) module.
563 This works like `load-relative` but for textual inclusion.
564 - Keywords are now always written in "portable" style by WRITE, so
565 that the reader's keyword style doesn't need to match the writer's.
566 - The environment variable `CHICKEN_PREFIX` has been removed.
567 - Added the `glob->sre` procedure to the irregex library.
568 - Removed the `get-host-name' and `system-information' procedures.
569 These are available in the "system-information" egg.
570 - Removed the `eval-when`, `select` and `ensure` macros. These are
571 available in the "miscmacros" egg.
572 - Removed the require-extension-for-syntax macro.
573 - Renamed bit-set? to bit->boolean because of swapped argument order
574 with respect to SRFI-33 and SRFI-60, which was confusing (fixes
575 #1385, thanks to Lemonboy).
576 - file-{read,write,execute}-access will now raise an exception when
577 the file doesn't exist or some other non-access related problem is
578 detected (fixes #1386, thanks to Vasilij Schneidermann).
579 - `change-file-mode` was renamed to set-file-permissions! and SRFI-17
580 generalized set! support has been added for `file-permissions`.
581 This procedure now also accepts a file descriptor or a port.
582 - `file-permissions` now returns one value: the permission integer.
583 - `read-file` has been renamed to `read-list`.
584 - `read-all` was dropped, as `read-string` with #f as its NUM argument
585 is equivalent.
586 - `read-lines` and `read-all` no longer accept a string naming a file,
587 only ports.
588 - The procedures for random numbers have been reimplemented;
589 access to system-specific entropy is available, together with a reasonably
590 good pseudo random number generator (WELL512).
591 - `glob` now returns an empty list for non-existent or inaccessible
592 directories, instead of erroring out.
593 - `file-copy' and `file-move' have been renamed to `copy-file' and
594 `move-file', for consistency with `delete-file' and `rename-file'.
595 - `rename-file' now refuses to overwrite an existing file unless an
596 optional "clobber" argument is provided.
597 - The `r4rs` module no longer exports `eval`, which was not in R4RS.
598 - `process`, `process*` and `process-execute` now expect lists of the form
599 (("NAME" . "VALUE") ...) instead of the previous (("NAME=VALUE") ...)
600 as their environment argument.
601 - `repository-path` is now a parameter containing a list of strings instead
602 of a string, as the search path for libraries can now contain multiple
603 directories.
604 - `file-read-access?`, `file-write-access?` and `file-execute-access?` have
605 been renamed `file-readable?`, `file-writable?` and `file-executable?`
606 into the (chicken file) module.
607
608- Module system
609 - The compiler has been modularised, for improved namespacing. This
610 means names from the compiler should not leak out into the compiled
611 program's (macro) namespace anymore.
612 - The core units have been converted to modules under the "chicken"
613 namespace.
614 - Added support for list-style library names.
615 - The "use" and "use-for-syntax" special forms have been removed
616 in favor of "import" and "import-for-syntax" to reduce confusion.
617 - Module imports are now lexically scoped: identifiers provided by
618 an (import ...) inside (let ...) won't be visible outside that let.
619 - Modules implementing an interface can now correctly export extra
620 identifiers (bug reported by Martin Schneeweis, fix by "megane").
621
622- Syntax expander
623 - Removed support for (define-syntax (foo e r c) ...), which was
624 undocumented and not officially supported anyway.
625 - Removed support for normal "lambda" forms as syntax transformers,
626 which has been deprecated since 4.8.0.
627 - define and friends are now aggressively rejected in "expression
628 contexts" (i.e., anywhere but toplevel or as internal defines).
629 - define-record and define-record-type now create record types
630 which are tagged with the module in which they're defined, so
631 predicates no longer return #t for records with the same tag
632 defined in another module. This tag is now also available under
633 an identifier that matches the record type name (fixes #1342).
634 - `include` now splices included expressions in the context in which
635 the inclusion appears and does not treat the expressions as toplevel
636 expressions by default.
637
638- Eggs management
639 - Egg-installation and building has been completely overhauled.
640 - .meta + .setup files have been merged into a single declarative
641 ".egg" file.
642 - More static checks for egg descriptions, simplified generation
643 of OS-specific build + install commands that is (hopefully)
644 more practical for package maintainers.
645 - Egg sources are cached locally to reduce download and rebuild
646 times.
647 - Dropped many obscure or unimportant options and features from
648 `chicken-install`: (`-keep-installed`, `-reinstall`, `-proxy`,
649 `-no-install`, `-username`, `-password`, `-init`, `-deploy`,
650 `-keep-going`, `-scan`, `-csi`, `-show-depends`, `-show-foreign-depends`,
651 `-prefix`.
652 - Added new "-from-list" option to chicken-install.
653 - Eggs can now be installed and located in multiple directories,
654 using the `CHICKEN_REPOSITORY_PATH` +
655 `CHICKEN_INSTALL_REPOSITORY`
656 environment variables.
657 - Static compilation of eggs is now fully supported and static
658 versions of compiled eggs are available by default.
659 - In a statically built chicken, the egg-tools ("chicken-install", "...-status",
660 "...-uninstall") are still available, but only support static compilation
661 of eggs.
662
663- Foreign function interface
664 - The foreign type specifier "ssize_t" is now accepted, and "size_t"
665 arguments now only accept positive integers. Return values of
666 type size_t are no longer truncated on 32-bit platforms.
667
668
6694.13.0
670
671- Security fixes
672 - CVE-2017-6949: Remove unchecked malloc() call in SRFI-4 constructors
673 when allocating in non-GC memory, resulting in potential 1-word
674 buffer overrun and/or segfault (thanks to Lemonboy).
675 - CVE-2017-9334: `length' no longer crashes on improper lists (fixes
676 #1375, thanks to "megane").
677 - CVE-2017-11343: The randomization factor of the symbol table was
678 set before the random seed was set, causing it to have a fixed value
679 on many platforms.
680
681- Core Libraries
682 - Unit "posix": If file-lock, file-lock/blocking or file-unlock are
683 interrupted by a signal, we now retry (thanks to Joerg Wittenberger).
684 - char-ready? on string ports now also returns #t at EOF, as per R5RS;
685 in other words, it always returns #t (thanks to Moritz Heidkamp)
686 - Unit srfi-4: Fixed typo that broke SRFI-17 generalised set! syntax
687 on s8vectors (thanks to Kristian Lein-Mathisen).
688 - Large literals no longer crash with "invalid encoded numeric literal"
689 on mingw-64 (#1344, thanks to Lemonboy).
690 - Unit irregex: Fix bug that prevented multibyte UTF-8 character sets
691 from being matched correctly (Thanks to Lemonboy and Chunyang Xu).
692
693- Runtime system:
694 - The profiler no longer uses malloc from a signal handler which may
695 cause deadlocks (#1414, thanks to Lemonboy).
696 - The scheduler no longer indirectly hangs on to the old thread
697 when switching to a new one, which caused excessive memory
698 consumption (#1367, thanks to "megane").
699 - C++ programs no longer fail with a symbol lookup error when
700 compiled with debugger support (-d3 or -debug-info).
701
702- Syntax expander
703 - Renaming an identifier twice no longer results in an undo of the
704 rename (fixes #1362, thanks to "megane").
705
706- Build system
707 - Fixed broken compilation on NetBSD, due to missing _NETBSD_SOURCE.
708 - Fixed compilation on DragonflyBSD due to no feature macro support
709 in its standard C library (thanks to Markus Pfeiffer).
710
711- Compiler
712 - The scrutinizer no longer uses 'fixnum as the type for fixnums
713 that might not fit into a fixnum on 32-bit architectures.
714
715- Foreign function interface
716 - Correctly calculate memory requirements of Scheme objects produced
717 from foreign types with "const" qualifiers, avoiding memory
718 corruption (#1424, thanks to Vasilij Schneidermann and Lemonboy)
719 - Do not read beyond temporary stack buffer, which could lead to
720 a crash when returning from a foreign callback (#1428).
721
7224.12.0
723
724- Security fixes
725 - CVE-2016-6830: Fix buffer overrun due to excessively long argument
726 or environment lists in process-execute and process-spawn (#1308).
727 This also removes unnecessary limitations on the length of
728 these lists (thanks to Vasilij Schneidermann).
729 - CVE-2016-6831: Fix memory leak in process-execute and
730 process-spawn. If, during argument and environment list
731 processing, a list item isn't a string, an exception is thrown,
732 in which case previously malloc()ed strings weren't freed.
733 - CVE-2016-9954: Irregex has been updated to 0.9.6, which fixes
734 an exponential explosion in compilation of nested "+" patterns.
735
736- Compiler:
737 - define-constant now correctly keeps symbol values quoted.
738 - Warnings are now emitted when using vector-{ref,set!} or one
739 of take, drop, list-ref or list-tail with an out of range index
740 for vectors and proper lists of a definitely known length.
741 - The scrutinizer will no longer drop knowledge of the length of a
742 vector. It still drops types of its contents (which may be mutated).
743 - Fixed incorrect argvector restoration after GC in directly
744 recursive functions (#1317).
745 - "Direct" procedure invocations now also maintain debug info (#894).
746
747- Syntax expander
748 - DSSSL lambda lists have improved hygiene, so they don't need
749 the chicken or scheme modules to be imported in full (#806).
750 - The let-optionals* macro no longer needs "quote", "car" and "cdr"
751 to be imported and bound to their default values (#806).
752
753- Runtime system:
754 - C_locative_ref has been deprecated in favor of C_a_i_locative_ref,
755 which is faster because it is inlined (#1260, thanks to Kooda).
756 - The default error handler now truncates very long condition
757 messages (thanks to Lemonboy).
758 - Weak symbol GC (-:w) no longer drops random symbols (#1173).
759 - The number of arguments to procedures, both via "apply" and direct
760 invocation, are now limited only by the C stack size (#1098).
761 - "time" macro now shows peak memory usage (#1318, thanks to Kooda).
762 - Avoid crashes in ffi callbacks after GC (#1337, thanks to cosarara).
763
764- Core libraries:
765 - Irregex has been updated to 0.9.5, which fixes matching of all "bow"
766 occurrances beyond the first with irregex-fold (upstream issue #14).
767 - Keywords are more consistently read/written, like symbols (#1332).
768 - SRFI-39: When jumping out of a parameterized dynamic extent,
769 "parameterize" now remember the actual values, so when jumping back
770 in, they are restored (fixes #1336, thanks to Joo ChurlSoo).
771 This was a regression caused by the fix for #1227.
772
773- Tools:
774 - "chicken-install"
775 - When installing eggs in deploy mode with "-keep-installed", eggs
776 under the prefix won't unnecessarily be reinstalled (#1144).
777 - Added new option "-no-install-deps" which inhibits automatic
778 installation of dependencies, useful with "-prefix" (#1298).
779
780
7814.11.0
782
783- Security fixes
784 - Specialisation rules for string-{ref,set!}, bit-set?
785 and move-memory no longer use unchecked C functions which could
786 result in undefined behaviour, including buffer overruns (#1216).
787
788- Platform support
789 - CHICKEN now supports the Linux X32 ABI (thanks to Sven Hartrumpf).
790
791- Tools
792 - Feathers now has a more neutral color scheme and larger font size.
793 - With the -dir option, feathers can now correctly find source code.
794
795- Runtime system:
796 - The calling convention of CPS procedures has been changed to
797 use "argument vectors" instead of C calling convention.
798 - The C API of C_values(), C_do_apply() and how to invoke CPS
799 functions has changed. The C_procN() macros have disappeared.
800 The manual example in "Accessing external objects" for C_values
801 has been updated. See also the "numbers" egg for examples on
802 how to support pre- and post-4.10.1 CHICKENs simultaneously.
803 - Apply hack is no longer used; the limitation of 128 arguments
804 has been lifted for platforms which had no apply hack.
805 - Increased the "binary compatibility version" to 8.
806 - Delivery of signals in other OS-level threads is now dealt with
807 in a more robust way (#1232) (thanks to Joerg Wittenberger).
808 - Compiled programs with large literals won't crash on startup (#1221).
809 - Comparisons of closures now behave in a stable way, whether or not
810 the code was compiled with the -no-lambda-info option (#1041).
811 - The signal handling code can no longer trigger "stack overflow" or
812 "recursion too deep or circular data encountered" errors (#1283).
813
814- Compiler:
815 - Specializations on implicit "or" types like "number" or "boolean" now
816 work, removing the requirement for the inferred types to match
817 declared types exactly. Specializations are matched from first to
818 last to resolve ambiguities (#1214).
819 - Compiler rewrites for char{<,>,<=,>=,=}? are now safe (#1122).
820 - When requesting to emit import libraries that don't exist, the
821 compiler now gives an error instead of quietly continuing (#1188).
822 - Don't silently truncate huge literals (thanks to Claude Marinier).
823
824- Core libraries
825 - try-compile from setup-api cleans up temporary output files (#1213).
826 - SRFI-18: thread-join! no longer gives an error when passed a
827 thread in the "sleeping" state (thanks to Joerg Wittenberger)
828 - SRFI-18: mutex-lock! will not set ownership of mutexes when
829 passed #f as the owner (#1231), not disown a mutex from owner if
830 locking fails for timeout and not keep the last thread which held
831 a mutex until the next lock (thanks to Joerg Wittenberger).
832 - SRFI-39: When a parameter's "guard" procedure raises an exception,
833 "parameterize" now correctly resets the original values of all
834 parameters (fixes #1227, thanks to Joo ChurlSoo).
835 - Irregex has been updated to 0.9.4, which fixes severe performance
836 problems with {n,m} repeating patterns (thanks to Caolan McMahon).
837 - Unit "posix": The following posix procedures now work on port
838 objects: file-stat, file-size, file-owner, file-permissions,
839 file-modification-time, file-access-time, file-change-time,
840 file-type and all procedures using file-type. These are:
841 regular-file?, symbolic-link?, block-device?, character-device?
842 fifo? and socket?.
843 - Unit "posix": When "file-close" is interrupted it will retry,
844 to avoid leaking descriptors (thanks to Joerg Wittenberger).
845 - Unit "data-structures": alist-{update[!],ref} were made consistent
846 with srfi-1 in the argument order of comparison procedures.
847 - Unit "lolevel": locative-ref has been fixed for locatives of u32
848 and s32vectors (thanks to Joerg Wittenberger for pointing this out).
849 - string->number now signals exceptions if passed a bad base instead
850 of segfaulting (#1272; reported by "Tilpner" on IRC).
851
852- Tools
853 - A debugger is now available, known as "feathers", which allows
854 basic source-level debugging of compiled Scheme code.
855 - A statistical profiler has been added, enabling sampling-based
856 runtime profiling of compiled programs.
857 - "chicken-install"
858 - When installing eggs in deploy mode, already satisfied
859 dependencies aren't reinstalled every time (#1106).
860 - "chicken-uninstall"
861 - -prefix and -deploy options were added, matching chicken-install.
862 - "chicken-status"
863 - -prefix and -deploy options were added, matching chicken-install.
864 - The -sudo and -s options for chicken-install and chicken-uninstall
865 now honor a "SUDO" environment variable (thanks to Timo Myyrä).
866
867- Syntax expander
868 - Mixed internal define/define-values are now correctly ordered, so
869 later defines can refer to earlier define-values (#1274).
870
8714.10.0
872
873- Security fixes
874 - CVE-2014-6310: Use POSIX poll() on Android platform to avoid
875 potential select() buffer overrun.
876 - CVE-2014-9651: substring-index[-ci] no longer scans beyond string
877 boundaries.
878 - CVE-2015-4556: string-translate* no longer scans beyond string
879 boundaries.
880
881- Core libraries
882 - alist-ref from unit data-structures now gives an error when passed
883 a non-list, for consistency with assv/assq/assoc.
884 - Unit tcp now implicitly depends on ports instead of extras.
885 This may break programs which don't use modules and forgot to
886 require extras but use procedures from it.
887 - SRFI-13: fix string-copy! in cases source and destination strings'
888 memory areas overlap (#1135).
889 - SRFI-1: Check argument types in lset and list= procedures (#1085).
890 - Fixed another, similar bug in move-memory! for overlapping memory.
891 - Fixed broken specialisation for move-memory! on pointer types.
892 - Fixed broken specialisation for irregex-match-num-submatches.
893 - Fixed bug in make-kmp-restart-vector from SRFI-13.
894 - Removed deprecated implicit expansion of $VAR- and ~ in pathnames.
895 The ~-expansion functionality is now available in the
896 "pathname-expand" egg (#1001, #1079) (thanks to Florian Zumbiehl).
897 - normalize-pathname has been simplified to avoid adding trailing
898 slashes or dots (#1153, thanks to Michele La Monaca and Mario Goulart).
899
900- Unit srfi-4:
901 - write-u8vector has been made more efficient (thanks to Thomas Hintz).
902 - read-u8vector has been made more efficient (thanks to Andy Bennett
903 for pointing this out and testing an improvement).
904
905- Unit lolevel:
906 - Restore long-lost but still documented "vector-like?" procedure (#983)
907
908- Unit "files":
909 - normalize-pathname no longer considers paths starting with ".//"
910 as absolute (#1202, reported by Haochi Kiang).
911
912- Unit "posix":
913 - set-file-position! now allows negative positions for seek/cur (thanks
914 to Seth Alves).
915 - file-mkstemp now works correctly on Windows, it now returns valid
916 file descriptors (#819, thanks to Michele La Monaca).
917 - create-directory on Windows now creates all intermediate
918 directories when passed #t as second parameter.
919
920- Runtime system:
921 - Removed several deprecated, undocumented parts of the C interface:
922 C_zap_strings, C_stack_check, C_retrieve, C_retrieve_proc,
923 C_retrieve_symbol_proc, C_i_foreign_number_vector_argumentp,
924 C_display_flonum, C_enumerate_symbols
925 - Removed several deprecated and undocumented internal procedures:
926 ##sys#zap-strings, ##sys#round, ##sys#foreign-number-vector-argument,
927 ##sys#check-port-mode, ##sys#check-port*
928 - SIGBUS, SIGILL and SIGFPE will now cause proper exceptions instead
929 of panicking (thanks to Joerg Wittenberger).
930
931- Module system
932 - Allow functor arguments to be optional, with default implementations.
933 - Fixed a bug that prevented functors from being instantiated with
934 built-in modules.
935 - Fixed generation of import libraries for instantiated functors
936 (#1149, thanks to Juergen Lorenz).
937
938- Syntax expander
939 - define-values, set!-values and letrec-values now support full lambda
940 lists as binding forms
941 - cond expands correctly when a constant is used in combination with =>
942 (thanks to Michele La Monaca)
943
944- C API
945 - Removed deprecated C_get_argument[_2] and
946 C_get_environment_variable[_2] functions.
947 - C_mutate2 has been deprecated in favor of C_mutate
948 - chicken.h can be included in C++ programs in strict C++11 mode
949 without compiler errors on Linux (thanks to "Izaak").
950
951- Foreign function interface
952 - The foreign type specifier "scheme-pointer" now accepts an optional
953 C pointer type (thanks to Moritz Heidkamp and Kristian Lein-Mathisen).
954 - Type hinting for foreign-primitives now allows returning multiple
955 values when no return type has been specified.
956
957- Compiler
958 - Fixed an off by one allocation problem in generated C code for (list ...).
959
960- Build system
961 - MANDIR was renamed to MAN1DIR and TOPMANDIR was renamed to MANDIR
962 in order to comply with standard Makefile practice in UNIX.
963 - INCDIR was renamed to CHICKENINCDIR, and now derives from
964 INCLUDEDIR, which defaults to $(PREFIX)/include
965 - BINDIR, LIBDIR, SHAREDIR, INCLUDEDIR, MANDIR, MAN1DIR, DOCDIR,
966 CHICKENINCDIR and CHICKENLIBDIR will now also be taken from
967 the environment, if present (like PLATFORM, DESTDIR and PREFIX).
968
969- Tools
970 - "csc"
971 - On Cygwin, -static now works again (thanks to Michele La Monaca)
972 - "chicken-install"
973 - When using chicken-install -retrieve, and an error occurs during
974 retrieval (or the egg doesn't exist), the egg's directory is
975 now properly cleaned up (#1109, thanks to Alex Charlton)
976 - "chicken"
977 - The -r5rs-syntax option did nothing; this has been fixed.
978
9794.9.0
980
981- Security fixes
982 - CVE-2014-3776: read-u8vector! no longer reads beyond its buffer when
983 length is #f (thanks to Seth Alves).
984 - CVE-2013-4385: read-string! no longer reads beyond its buffer when
985 length is #f.
986 - CVE-2013-1874: ./.csirc is no longer loaded from the current directory
987 upon startup of csi, which could lead to untrusted code execution.
988 (thanks to Florian Zumbiehl)
989 - CVE-2013-2024: On *nix, the qs procedure now single-quotes everything
990 instead of relying on a blacklist of shell characters to be escaped.
991 On Windows, it properly duplicates double-quote characters. (thanks
992 to Florian Zumbiehl)
993 - CVE-2013-2075: Use POSIX poll() in other places where select() was
994 still being used. (thanks to Florian Zumbiehl and Joerg Wittenberger)
995 - CVE-2012-6122: Use POSIX poll() on systems where available. This avoids a
996 design flaw in select(); it supports no more than FD_SETSIZE descriptors.
997
998- Core libraries
999 - Fix subvector when the TO optional argument equals the given vector
1000 length (#1097)
1001 - Unit extras now implicitly depends on ports. ports no longer
1002 implicitly depends on extras. This may break programs which don't
1003 use modules and forgot to require ports but use procedures from it.
1004 - Support has been added for the space-safe R7RS macro "delay-force".
1005 - Export file-type from the posix unit (thanks to Alan Post).
1006 - SRFI-4 s8vectors now work correctly in compiled code on PowerPC and ARM.
1007 - thread-join! now works correctly even if the waiting thread was
1008 prematurely woken up by a signal.
1009 - unsetenv has been fixed on Windows.
1010 - The process procedure has been fixed on Windows.
1011 - Nonblocking behaviour on sockets has been fixed on Windows.
1012 - Possible race condition while handling TCP errors has been fixed.
1013 - The posix unit will no longer hang upon any error in Windows.
1014 - resize-vector no longer crashes when reducing the size of the vector.
1015 - Distinct types for boolean true and false have been added to the
1016 scrutinizer.
1017 - Fixed bugs in string-trim-right, string-index-right and
1018 string-skip-right, from SRFI-13
1019 - read-line no longer returns trailing CRs in rare cases on TCP ports (#568)
1020 - write and pp now correctly use escape sequences for control characters
1021 (thanks to Florian Zumbiehl)
1022 - posix: memory-mapped file support for Windows (thanks to "rivo")
1023 - posix: find-file's test argument now also accepts SRE forms.
1024 - numerator and denominator now accept inexact numbers, as per R5RS
1025 (reported by John Cowan).
1026 - Implicit $VAR- and ~-expansion in pathnames have been deprecated (#1001)
1027 - Fixed EINTR handling in process-wait and when reading from file ports.
1028 - Irregex is updated to 0.9.2, which includes bugfixes and faster submatches.
1029 - Compile-time expansions for "[sf]printf" are slightly more efficient.
1030 - Removed the deprecated "always?", "never?", "shuffle" and "none?" procedures.
1031 - Fixed problem "make-pathname" that returned an absolute path if given
1032 a relative one without a directory argument.
1033 - The implementation of promises has been made more efficient.
1034 - Removed the deprecated "c-runtime", "null-pointer?" and "pointer-offset"
1035 procedures.
1036 - The deprecated alias "mutate-procedure" for "mutate-procedure!" has
1037 been removed.
1038 - On 64-bit systems the feature identifier "64bit" is registered.
1039 - "process-fork" accepts an optional argument that specifies
1040 wether other threads should be terminated in the child process.
1041 - The "signal/bus" signal identifier was missing.
1042 - Added setter-procedure for "signal-mask".
1043 - Added "recursive-hash-max-length" and "recursive-hash-max-depth"
1044 parameters (srfi-69).
1045
1046- Platform support
1047 - CHICKEN can now be built on AIX (contributed by Erik Falor)
1048 - CHICKEN can now be built on GNU Hurd (contributed by Christian Kellermann)
1049 - Basic support has been added for building Android and iOS binaries (see
1050 the "README" file for caveats and pitfalls) (contributed by Felix Winkelmann
1051 from bevuta IT GmbH)
1052 - Added support for 64-bit Windows (consult the "README" file for more
1053 information).
1054
1055- Runtime system
1056 - finalizers on constants are ignored in compiled code because compiled
1057 constants are never GCed (before, the finalizer would be incorrectly
1058 invoked after the first GC). (Reported by "Pluijzer")
1059 - The call trace buffer is now also resizable at runtime via ##sys#resize-trace-buffer.
1060 - C_zap_strings and ##sys#zap-strings (undocumented) have been deprecated.
1061 - Special events in poll() are now handled, avoiding hangs in threaded apps.
1062 - When invoking procedures with many rest arguments directly (not via APPLY),
1063 raise an error when argument count limit was reached instead of crashing.
1064 - When the maximum allowed heap size is reached, panic instead of crashing.
1065 - The code generated for mutating data destructively is partially inlined
1066 and thus slightly more efficient.
1067 - Fixed incorrect code in the foreign argument conversion for
1068 "unsigned-integer64" (#955). For unsigned-integer, integer64 and
1069 unsigned-integer64, disallow floating-point numbers. Fix behavior
1070 on 32-bit systems.
1071 - On systems that provide sigprocmask(2), segmentation violations, illegal
1072 instruction signals, bus errors and floating-point exceptions are now caught
1073 and trigger normal error-processing (including a backtrace). The handling
1074 of these so called "serious" signals can be disabled by passing the
1075 "-:S" runtime option to executables.
1076 - Reclamation of unused interned symbols (enabled with the "-:w" runtime option)
1077 works much better now.
1078
1079- Build system
1080 - The tests can now be run without having to first install CHICKEN.
1081 - Fixed a dependency problem that made it impossible to build the distribution
1082 tarball on Windows with the mingw compiler.
1083 - Increased the "binary compatibility version" to 7.
1084
1085- Tools
1086 - "csc"
1087 - "-z origin" is now passed as a linker option on FreeBSD when
1088 compiling for deployment (thanks to Jules Altfas & Vitaly Magerya)
1089 - "-deploy" works now on FreeBSD (thanks to Jules Altfas and
1090 Vitaly Magerya), OpenBSD and NetBSD (see README for NetBSD).
1091 - added "-oi"/"-ot" options as alternatives to "-emit-inline-file"
1092 and "-emit-type-file", respectively; "-n" has been deprecated.
1093 - .c/.o files are no longer overwritten when they have the same basename
1094 as a Scheme source file (i.e. "csc foo.scm foo.c -o foo" works now).
1095 - "chicken-install"
1096 - "-deploy" now correctly installs dependencies of
1097 deployed eggs under the deployment directory instead of globally.
1098 - Full URI syntax is now supported for proxy environment variables
1099 (thanks to Michele La Monaca)
1100 - "chicken-status"
1101 - Added -eggs command line option to list installed eggs
1102 - misc
1103 - Removed the deprecated "-v" options (use "-version" instead) in various
1104 core programs.
1105 - The runtime linker path for compiled executables was not set correctly
1106 on FreeBSD systems. This has now been fixed.
1107 - Removed the deprecated "make" and "make/proc" facility from the
1108 "setup-api" module; also removed the deprecated "required-extension-version"
1109 and "required-chicken-version" procedures.
1110
1111- Syntax
1112 - Added the aliases "&optional" and "&rest" as alternatives to "#!optional"
1113 and "#!rest" in type-declarations (suggested by Joerg Wittenberger).
1114 - Vectors, SRFI-4 number vectors and blobs are now self-evaluating for
1115 R7RS compatibility. Being literal constants, they are implicitly quoted.
1116 - For R7RS compatibility, named character literals #\escape and #\null are
1117 supported as aliases for #\esc and #\nul. WRITE will output R7RS names.
1118 - The CASE form accepts => proc syntax, like COND (as specified by R7RS).
1119 - letrec* was added for R7RS compatibility. Plain letrec no longer behaves
1120 like letrec*.
1121
1122- Compiler
1123 - the "inline" declaration does not force inlining anymore as recursive
1124 inlining could lead to non-termination of the compiler (thanks to
1125 Andrei Barbu).
1126 - Type-analysis ("scrutiny") is enabled by default now, unless
1127 "-optimize-level 0" or "-no-usual-integrations" is given.
1128 - The "-scrutinize" compiler option has been deprecated.
1129 - A new lightweight flow-analysis pass ("lfa2") has been added.
1130 Enable by passing the "-lfa2" option to the compiler.
1131 - The deprecated options "-disable-warning", "-heap-growth", "-heap-shrinkage"
1132 and "-heap-initial-size" have been removed.
1133 - Removed the deprecated "constant" declaration.
1134 - Removed the deprecated "-lambda-lift" and "-unboxing" compiler options.
1135 - Removed the deprecated "-V" compiler option.
1136 - Generated names for formal parameters of foreign functions are slightly
1137 more informative.
1138 - Unused references to variables that name intrinsics can be removed.
1139 - In the flow-analysis pass, matching of combinations of "list"/"list-of" and
1140 "or" types with has been made more reliable.
1141 - Fixed various bugs in the type database.
1142
1143- Syntax expander
1144 - added "require-extension-for-syntax" and "use-for-syntax".
1145 - Extended syntactic definitions are now available by default in all
1146 evaluated code, particularly in code evaluated at runtime in compiled
1147 applications.
1148 - Removed the deprecated variant "(define-compiler-syntax (NAME . LLIST) BODY ...)"
1149 of "define-compiler-syntax".
1150
1151- C API
1152 - Deprecated C_get_argument[_2] and C_get_environment_variable[_2] functions.
1153 - Removed the deprecated "__byte_vector" type.
1154
1155
11564.8.0
1157
1158- Security fixes
1159 - CVE-2012-6125: Improved hash table collision resistance and added
1160 randomization to prevent malicious external causes of collisions.
1161 All SRFI-69 procedures accept extra arguments to control randomization
1162 for testing/debugging.
1163 - CVE-2012-6124: On 64-bit machines the "random" procedure no longer
1164 truncates result values (which caused very nonrandom results for very
1165 large values). Note that random shouldn't be used for
1166 security-critical code.
1167 - CVE-2012-6123: Added checks for embedded '\0' characters in strings
1168 passed to some C functions on a lower level than CHICKEN's FFI.
1169
1170- Build system
1171 - version information has been moved into a separate unit to make the
1172 build-version shown in the banner and accessible through library
1173 procedures more accurate, this also speeds up the build on version-
1174 changes (thanks to Jim Ursetto for contributing this)
1175 - the build was made more reliable with respect to cross-compilation
1176 and custom installation names
1177 - the test-suite is now working on the mingw32 platform (with
1178 a few tests disabled due to missing functionality)
1179 - the version and branch of the sources are now properly compiled
1180 into the core libraries and shown in the "csi" and "chicken"
1181 version headers
1182 - The default target library name for an installation configured for cross-
1183 compilation is now "libchicken" and independent on any particular
1184 setting of PROGRAM_PREFIX/PROGRAM_SUFFIX (thanks to Otavio Salvador)
1185
1186- Compiler
1187 - Fixed bug in handling of symbols in constant-definitions (thanks to Peter
1188 Bex)
1189 - Stricter check for value-part of constant definition (thanks to Kon Lovett)
1190 - Fixed bug that caused argument-signatures of external definitions to be
1191 incorrectly modified during optimization (thanks to Peter Bex)
1192 - Failing constant-folding expressions now produce a compile-time warning
1193 - Fixed various bugs in the internal type-database (thanks to Kon Lovett and
1194 Peter Bex)
1195 - Fixed incorrect optimization rules for some fp-rounding and fixnum operators
1196 - added "-specialize" option and "specialize" declaration which enables
1197 optimizations of uses of core library procedures based on type-
1198 information gathered during flow analysis
1199 - "-optimize-level 3" and higher now implies "-specialize"
1200 - added option "-strict-types" and "-emit-type-file"
1201 - progress-information is now only shown with "-debug p"; the "-verbose"
1202 option only shows informational but noncritical messages
1203 - added optimizations for some library procedures
1204 - variable propagation for global variable accesses is now done in certain
1205 situations
1206 - the algorithmic complexity of the closure-conversion pass has been
1207 reduced which speeds up compilation noticably for large files
1208 - the "-uses" option handles whitespace in unit lists given on the
1209 command line (thanks to Santosh Rajan)
1210 - the alternative branch in a conditional is dropped when the condition
1211 is known to be a non-boolean value (suggested by Joerg Wittenberger)
1212 - implemented numerous fixes and improvements for flow analysis
1213 - fixed a bug in the compiler that could cause some variable bindings
1214 to be optimized away in certain situations involving inlining
1215 - added an experimental optimization called "clustering" (enable
1216 with the compiler option of the same name)
1217 - the optimizations done by the compiler are now listed as a comment
1218 in the generated C file
1219 - the type-information obtained during flow-analysis ("scrutiny") is
1220 now used for performing type-sensitive optimizations of calls to
1221 most of the core-library procedures
1222 - deprecated the "constant" declaration specifier
1223 - "unboxing" optimization has been completely removed - the implementation
1224 was unreliable and unmaintainable; the "-unboxing" compiler option will
1225 still be accepted but will produce a warning
1226 - Peter Bex contributed an optimization to the analysis pass that
1227 greatly reduces compile time for source code containing deeply nested
1228 lexical bindings
1229 - procedures that are known to have the value of a core library procedure
1230 that is a "standard" or "extended binding" will be inlined
1231 - enhanced line number tracking to get better error messages from
1232 the scrutinizer.
1233 - hygiene bugs related to compiler-syntax were fixed.
1234 - the local flow-analysis was sometimes reporting multiple warnings
1235 for the same type-conflict.
1236 - the time/space-complexity of some algorithms used in the compiler
1237 were reduced resulting in much better compile-times especially
1238 for large source files.
1239
1240- Interpreter
1241 - ",q" leaves the currently active REPL invocation instead of
1242 terminating the process (as suggested by John Cowan)
1243 - ",m" properly switches between modules (thanks to Christian Kellermann)
1244
1245- Core libraries
1246 - Cleaned up the set of available internal SRFI-feature-identifiers
1247 - Fixed bugs in "make-pathname" and "normalize-pathname" (thanks to Jim Ursetto)
1248 - The reader is now more consistent when parsing symbol- and keyword names
1249 that are fully or partially escaped (thanks to Kon Lovett)
1250 - The printer now does a better job at escaping certain single-character
1251 symbol names
1252 - Unit "lolevel"
1253 - deprecated "null-pointer" and "null-pointer?"
1254 - Fixed a bug in the Windows implementation of "file-type" (thanks to
1255 Jim Ursetto)
1256 - Fixed a bug in the implementation of "current-milliseconds" that could
1257 result in integer-overflow
1258 - Fixed an incorrect type-check in "list-ref" (thanks to Sven Hartrumpf)
1259 - Disabled "-setup-mode" when compiling extensions for deployment (thanks
1260 to Ivan Raikov)
1261 - Got rid of some warnings in the C runtime system that were triggered on
1262 the SunPro C compiler (thanks to Joe Python)
1263 - Fixed bug in "string->number" that caused out-of-range characters to
1264 be accepted for base > 10 (thanks to Jim Ursetto)
1265 - added "foldl" and "foldr" procedures, which are more efficient and
1266 have a more consistent argument order than the corresponding
1267 SRFI-1 procedures
1268 - "shuffle" has been deprecated
1269 - added "queue-length"
1270 - "queue->list" allocates and returns a fresh list now
1271 - invoking a parameter-procedure with an argument will return the new
1272 value
1273 - added new procedure "quit"
1274 - port-procedures now check correctly for argument-ports being open
1275 (thanks to Peter Bex)
1276 - "repl" accepts an optional evaluator procedure (suggested by John
1277 Cowan)
1278 - added a setter procedure to "signal-handler" ("posix" unit)
1279 - EINTR is properly handled for input routines that may block
1280 waiting for input
1281 - the implementation of R5RS evaluation environments is now fully
1282 standards compliant
1283 - "file-exists?" and "directory-exists?" work now properly for files
1284 > 2GB (EOVERFLOW handling in stat(3) system call)
1285 - fixed bug in implementation of "fifo?"
1286 - the procedure returned by "condition-predicate" accepts any type
1287 of argument now
1288 - blobs have a readable textual representation ("#{...}")
1289 - "find-files" does not follow symlinks by default (as it did previously)
1290 - also, the old non-keyword argument signature for "find-files" is not
1291 supported anymore
1292 - added "alist-update" ("data-structures" unit)
1293 - "irregex-replace" returns the original string instead of #f when the
1294 regex does not match
1295 - irregex "real" built-in utility pattern now accepts a leading sign
1296 - added "change-directory*" ("posix" unit)
1297 - number parsing has been made more reliable and standards compliant
1298 - deprecated "none?", "always?" and "never?"
1299 - library procedures that take ports as arguments now all perform checks
1300 on port-direction and open/closed state
1301 - "mutate-procedure" has been renamed to "mutate-procedure!" - the old
1302 name is still available but deprecated
1303 - deprecated C_hash_string and C_hash_string_ci functions in the C API in
1304 favor of the more secure versions C_u_i_string_hash, C_u_i_string_ci_hash
1305 - a number of bugs in the irregex regular expression engine have been
1306 fixed; it has been updated to upstream release 0.8.3
1307 - "with-input-from-file", "with-output-to-file", "with-input-from-pipe" and
1308 "with-output-to-pipe" now properly restore the standard input/output
1309 ports in case the body thunk escapes
1310 - symbols with a single-char print-name where not always properly escaped
1311 when printed readably
1312 - the "make" facility of the "setup-api" module has been deprecated,
1313 please use the "make" extension when your egg requires this during
1314 setup.
1315
1316- Core tools
1317 - "csc"
1318 - The environment-variables "CHICKEN_C_INCLUDE_PATH" and
1319 "CHICKEN_C_LIBRARY_PATH" can now be used to add default include-
1320 and link-directories to C-compiler invocations
1321 - "-O5" passed expensive optimization flags to the C compiler which
1322 could expose C-Compiler bugs, depending on the compiler version
1323 (thanks to Sven Hartrumpf for pointing this out).
1324 - "-rpath" is ignored on OS X (thanks to Kon Lovett).
1325 - Fixed handling of "-output-file" (it was being ignored)
1326 - "chicken-install"
1327 - Added option "-override", which allows retrieving extension-
1328 versions from a file - this may be useful to ensure specific
1329 versions of a complete set of eggs are installed
1330 - Added option "-keep-installed"/"-x" that only installs explicitly
1331 named extensions given on the command line, if they are not
1332 already installed
1333 - Added option "-list" that lists all extensions available
1334 - Added option "-csi" to specify what interpreter should be used
1335 to execute the setup-script of an installed extension
1336 - Added option "-scan" that scans a local directory for the highest
1337 available extension versions available
1338 - Added option "-reinstall" that reinstalls all currently installed
1339 eggs, keeping their versions, if possible
1340 - Fixed bug with "chicken-install -test" when multiple extensions where
1341 given on the command line (thanks to Kon Lovett)
1342 - installing subdirectories works now on Windows.
1343 - fixed handling of "-force" when a "chicken" dependency version did
1344 not match
1345 - added new option "-show-foreign-depends" which lists foreign egg
1346 dependencies (if available)
1347 - added new option "-show-depends" which lists egg dependencies
1348 - added support for "or"-dependencies where a dependency is considered
1349 installed if one of a set of candidates is available
1350 - "chicken-profile"
1351 - fixed some bugs in the profiler and the runtime support code for
1352 profiling (thanks to Sven Hartrumpf)
1353 - fixed broken percentage calculation (thanks to "megane")
1354 - "chicken-status"
1355 - Added option "-list" that dumps versions of installed extensions
1356 in a format suitable for "chicken-install -override ..."
1357 - the "pattern" argument is now actually treated as a pattern and not
1358 as a regex
1359
1360- Core syntax
1361 - "assert" shows the line number of the form when a second argument
1362 is not given or is a literal string
1363 - "parameterize" now correctly omits invoking the guard procedure when
1364 the old value is restored (thanks to Joo ChurlSoo)
1365 - added ":", "the" and "assume" syntax for declaring types
1366 - added "define-specialization" form to declare type-driven procedure
1367 call rewrites in compiled code
1368
1369- Syntax expander
1370 - Fixed a bug that caused imported identifiers to leak into the
1371 macroexpansion/compile-time environment (reported by Christian Kellermann)
1372 - Fixed a bug in the processing of extended lambda-lists (thanks to Peter Bex)
1373 - Peter Bex fixed a bug that caused bound variables to be incorrectly
1374 renamed in quoted literals (thanks to Matthew Flatt)
1375 - fixed devious bug in the invocation and generation of transformer
1376 procedures
1377 - using normal "lambda" forms as transformers for local or global
1378 syntax definitions is deprecated - one should use "syntax-rules",
1379 "er-macro-transformer" or "ir-macro-transformer" from now on
1380
1381- Runtime system
1382 - fixed handling of "inf" and nan" floating-point predicates for Solaris
1383 (thanks to Claude Marinier)
1384 - support for re-loading of compiled files has now been completely
1385 removed
1386 - the maximum length of strings is no longer limited to a 24-bit
1387 number on 64-bit architectures but can be 56 bits.
1388 - string-comparison handles embedded '\0' characters.
1389 - numerical predicates handle infinity and NaN correctly.
1390 - deprecated "[+-]nan", "[+-]inf" and other notations "accidentally"
1391 accepted by CHICKEN due to the underlying C library's strtod() function,
1392 standardizing on "[+-]nan.0" and "[+-]inf.0" from R6RS (and soon R7RS),
1393 when displaying numbers only these forms are generated now.
1394 - signals are queued to some extent and the interrupt handling has
1395 been cleaned up somewhat
1396 - the interpreter handles SIGINT directly - loading the "posix" unit
1397 is not needed anymore to handle this feature
1398 - changed default nursery size slightly and fixed a bug that caused
1399 incorrect (too small) nursery sizes on 64-bit platforms
1400 - deprecated the compiler option "-heap-initial-size", "-heap-growth"
1401 and "-heap-shrinkage"
1402 - the assembly-language stub routine for the implementation of "apply"
1403 was broken for Sparc64 systems and has been disabled for this platform
1404 - signal masks were accidentally reset upon GC for some platforms; use
1405 sigsetjmp/siglongjmp on BSD, Linux, MacOS X and Haiku
1406
1407- Type system
1408 - added new type-specifiers "input-port", "output-port", "(list-of T)"
1409 and "(vector-of T)"
1410 - the type-specifiers "(vector T ...)" and "(list T ...)" represent
1411 fixed size lists and vectors now
1412 - added qualified types ("forall"), optionally with type constrains
1413 - added the "define-type" special form and type-abbreviations
1414 - added "compiler-typecase", a compile-time typematching form
1415
1416- Module system
1417 - Added "interfaces", which are named groups of exports
1418 - Added "functors", which are parameterized modules
1419 - Modules can now be aliased
1420 - New syntax:
1421 (define-interface NAME EXPORTS)
1422 (functor (NAME ...) EXPORTS ...)
1423 - Extended syntax of "module" for aliasing and functor-instantiation
1424 - the "scheme" module has been integrated into the core library and
1425 is not installed as a separate import library anymore
1426 - added core module "r4rs" containing only bindings for R4RS identifiers
1427 - added core module alias "r5rs" for "scheme" module
1428 - added "module-environment" which returns an evaluation environment
1429 for the bindings of a module
1430 - fixed bugs related to using "export"/"reexport" in combination with
1431 wildcard ("*") module export lists (thanks to "megane")
1432
1433- Foreign function interface
1434 - locatives are allowed as arguments declared "c-pointer"
1435 - "int32" was not properly detected as a valid foreign type (thanks
1436 to Jim Ursetto)
1437
1438
14394.7.0
1440
1441- Build system
1442 - On BSD, libchicken.so is linked with -lpthread, as this seems
1443 to be required for linking libraries that require pthreads
1444 - The C header-files are now installed in a subdirectory below
1445 the "PRFIX/include" directory to allow installation of multiple
1446 chickens with different PROGRAM_PREFIX/PROGRAM_SUFFIX settings
1447 in the same prefix; to avoid conflicts with existing CHICKEN
1448 headers, it is recommended to completely remove any old
1449 installation before installing the new version
1450 - the PROGRAM_PREFIX and PROGRAM_SUFFIX configuration settings
1451 are applied to generated files and directories which allows
1452 perform differently named installations into the same PREFIX
1453 - increaded binary-compatibility version from 5 to 6, which
1454 means installed extensions in an existing installations will
1455 have to be re-installed
1456 - bugfixes in mingw/msys makefiles
1457 - Sven Hartrumpf contributed a bugfix to the internal helper
1458 script for creating distribution directories
1459 - Peter Bex has cleaned up the makefiles heavily, making the
1460 build more maintainable and easier to modify; thanks to all
1461 who helped testing this new build
1462 - renamed the makefile to `GNUmakefile' to catch using the
1463 a make(3) other than GNU make
1464 - configuration-header fix for BSD systems (thanks to Peter Bex
1465 and Christian Kellermann)
1466
1467
1468- Core libraries
1469 - the `regex' library unit has been removed and is separately
1470 available as an extension which should be fully backwards-
1471 compatible
1472 - `irregex' is now a core library unit and replaces the `regex' API
1473 - "extras" unit
1474 - fixed pretty-printer output of certain escaped character
1475 sequences inside strings (thanks to Mario Domenech Goulart,
1476 thanks to Kon Lovett for pointing out a missing test-file)
1477 - The pretty printer did not escape some control characters correctly
1478 (reported by Alan Post)
1479 - control-characters in symbol-names are now properly escaped if
1480 the symbol is printed readably (thanks to Alaric Snell-Pym
1481 for pointing this out)
1482 - the deprecated `random-seed' function has been removed
1483 - "files" unit
1484 - fixed bug in `normalize-pathname'
1485 - `file-copy' and `file-move' check whether the source-file is a
1486 directory
1487 - `delete-directory' now optionally deletes directories recursively
1488 - "irregex" unit
1489 - Peter Bex has contributed various bugfixes and performance
1490 enhancements
1491 - "library" unit
1492 - Added "condition->list" (thanks to Christian Kellermann)
1493 - The reader accepts now escaped octal character codes in string
1494 literals
1495 - Read-syntax can return zero values to indicate ignored objects
1496 - R5RS output output routines now always return a "void" result
1497 - "\|" was not correctly escaped when occurring inside
1498 symbol print names
1499 - added `condition->list', contributed by Christian Kellermann
1500 - added `equal=?'
1501 - removed deprecated `getenv', `left-section', `right-section',
1502 `project', `c-runtime' and `noop'
1503 - added missing import-library entry for `vector-copy!' (thanks
1504 to Jules Altfas)
1505 - circular or excessively deeply nested data generates a more
1506 useful error message when encountered by `equal?'
1507 - `list-tail' gives now a better error message when passed a
1508 non-list argument
1509 - fixed bug in `getter-with-setter' that modified the first
1510 argument if it already had a setter procedure attached
1511 - fixed incorrect size of internal data vector used in `time'
1512 (thanks to Kon Lovett)
1513 - "lolevel" unit
1514 - removed deprecated `global-bound?', `global-make-unbound',
1515 `global-ref' and `global-set!' procedures
1516 - added support for `pointer-vectors':
1517 - make-pointer-vector
1518 - pointer-vector?
1519 - pointer-vector-length
1520 - pointer-vector-ref
1521 - pointer-vector-set!
1522 - "posix" unit
1523 - "close-input-pipe" did not return the status code of a
1524 terminated process on Windows (reported by Mario Domenech Goulart)
1525 - added `file-creation-mode' (suggested by Mario Domenech Goulart)
1526 - "setup-api" unit
1527 - `required-extension-version' and `required-chicken-version' have
1528 been deprecated
1529 - "srfi-18" unit
1530 - removed deprecated `milliseconds->time' and `time->milliseconds'
1531 procedures
1532 - `make-mutex' incorrectly created mutexes as initially owned by
1533 the current threads (thanks to Joerg Wittenberger)
1534 - the file-descriptor handling in the scheduler has been simplified
1535 and performs some sanity checks
1536 - deadlock in the scheduler now terminates the process instead of
1537 attempting to throw an error
1538 - added some sanity checks to the scheduler
1539 - "tcp" unit
1540 - Fixed bug in "tcp-abandon-port" (reported by Jim Ursetto)
1541 - "utils" unit
1542 - `compile-file' now returns `#f' when the compilation fails,
1543 instead of raising an error
1544
1545
1546- Compiler
1547 - Removed unreliable lambda-lifting optimization (now, really!);
1548 the "-lambda-lift" option is still accepted but produces a
1549 warning
1550 - When "-scrutinize" is given, installed ".types" files will be
1551 automatically consulted for extensions and used units
1552 - Fixed optimizer bug in handling of "let" forms with multiple
1553 bindings which could result in toplevel assignments being
1554 silently dropped (reported by Moritz Heidkamp)
1555 - the `-accumulate-profile' option did not provide a way to
1556 specify the target profile data file - now `-profile-name'
1557 must always be given when accumulated profiling is done
1558 (thanks to Taylor Venable)
1559 - added `-module' option, which wraps the code into an implicit
1560 module
1561 - removed check for unsafe toplevel calls in safe mode
1562 - intrinsic handling of `exact->inexact' and `string->number' is
1563 now more efficient
1564 - fixed bug in leaf-routine optimization (thanks to David
1565 Dreisigmeyer)
1566 - unit-toplevel entry-points are now named differently, which
1567 may break binary-compatibility with existing compiled Scheme
1568 code modules
1569 - fixed invalid dropping of unused external entry-points in
1570 block-mode
1571 - fixed incorrect lambda-list check in scrutinizer (thanks to
1572 Alan Post)
1573 - Kon Lovett reported numerous bugs in the type-database used
1574 by the scrutinizer
1575 - `-fwrapv' is disabled on OpenBSD, since the default compiler
1576 does not support this option (thanks to Christian Kellermann)
1577 - on Solaris `gcc' is used by default, override `C_COMPILER'
1578 to use the Sun compiler instead
1579 - declaring a function `notinline' will prevent direct-call
1580 optimization for known procedure calls
1581 - the implementation of overflow-detection for arithmetic operations
1582 on fixnums have been replaced and now allow using the full 63-bit
1583 range of fixnums on 64-bit systems
1584 - fixed serious inlining-bug (thanks to Sven Hartrumpf)
1585 - constant-folding in the compiler has been simplified and
1586 is more reliable (thanks to Sven Hartrumpf)
1587 - optimization-levels 3 and higher imply `-unboxing -inline-global'
1588 - added new declaration `unsafe-specialized-arithmetic' which allows
1589 optimizing unboxed floating-point arithmetic in safe mode
1590 - removed `scrutinize' declaration
1591 - the warning shown when unimported identifiers are used in compiled
1592 modules now also shows the name of the procedure where the
1593 identifier is referenced (suggested by Alaric Snell-Pym)
1594
1595
1596- Documentation
1597 - Added list of installed files to README
1598 - Documented remaining "c...r" standard procedures (thanks to
1599 Juergen Lorenz)
1600 - The manual is now installed in HTML format in
1601 PREFIX/share/chicken/doc, many thanks to Jim Ursetto for
1602 contributing is excellent `manual-labor' extension which made
1603 this possible
1604
1605
1606- Foreign function interface
1607 - Added support for missing "(const [XXX-]c-string)" foreign type
1608 (thanks to Moritz Heidkamp)
1609 - removed deprecated `pointer', `nonnull-pointer', `byte-vector'
1610 and `nonnull-byte-vector' types
1611 - added missing result-type handling for `unsigned-integer64'
1612 (thanks to Moritz Heidkamp)
1613 - added `foreign-type-size' macro
1614 - added the new foreign type `size_t' (suggested by Moritz
1615 Heidkamp)
1616 - added the missing `unsigned-integer64' foreign type (thanks
1617 to Moritz for catching this)
1618 - added new foreign type `pointer-vector' which maps to `void **'
1619 and provided a low-level API in the `lolevel' library unit for
1620 manipulating pointer vectors
1621
1622
1623- Runtime system
1624 - Fixed typo in "runtime.c" (thanks to Sven Hartrumpf)
1625 - Little-endian detection on MIPS systems was not correct (thanks
1626 to Christian Kellermann)
1627 - Fixed bug in handling of runtime-options with arguments (also
1628 reported by Christian Kellermann)
1629 - `equal?' does not compare procedures recursively anymore
1630 - fixed incorrect use of alloca.h on OpenBSD (thanks to
1631 Christian Kellermann and Alan Post)
1632 - checks for NaN and infinity are now done using ISO C99
1633 operations, which required various changes to `chicken.h'
1634 to make the code compile in ISO C99 mode
1635 - remaining debris regarding MSVC builds has been removed
1636 - fixed bug in argument-type check for 64-bit integer (thanks
1637 to Kon Lovett)
1638 - increased default trace-buffer size from 10 to 16
1639 - fixed bug in low-level termination routine (thanks to
1640 Jeronimo Pellegrini)
1641 - the scheduler handles violations of internal invariants
1642 regarding threads slightly more gracefully (thanks to Jim
1643 Ursetto)
1644 - fixed broken sleep-time conversion (thanks to Karel Miklav)
1645 - repaired broken handling of multiple finalizers that referred
1646 to the same object (reported by Moritz Heidkamp)
1647 - fixed problem with reader and escaping of single-char symbols
1648
1649
1650- Syntax expander
1651 - For-syntax syntax definitions where not correctly retained inside
1652 modules
1653 - Peter Bex fixed various critical bugs in the expander
1654 - The simplification for quasiquote expressions was unable
1655 to handle certain circular data (reported by Moritz Heidkamp)
1656 - `syntax-rules' now supports tail-patterns and is now fully
1657 SRFI-46 compatible - many thanks to Peter Bex for implementing
1658 this
1659 - Peter Bex provided a bugfix for resolution of primitive imports
1660 - handling of internal definitions with shadowed defining
1661 forms is now done correctly - fix once again from Peter Bex
1662 - corrected non-standard behaviour of quasiquote with respect
1663 to nested quasiquotations - another bugfix by our mighty macro
1664 master
1665 - removed stub-implementation of `define-macro'
1666 - handled case where a global redefinition of `cons' influenced
1667 a non-inlined internal use in the expander (thanks to David
1668 Steiner)
1669 - `define-record' now allows defining SRFI-17 setter procedures
1670 for accessing slots
1671 - the expansion of DSSSL lambda-lists uses now `let-optionals*'
1672 internally instead of `let-optionals' and so allows
1673 back-references to earlier formal variables; this also results in
1674 faster and more compact code for argument-list destructuring
1675 (thanks to Alan Post)
1676 - new "implicit renaming" macro facility contributed by Peter Bex
1677 (see `ir-macro-transformer')
1678 - parameters are now settable and can be modified using `set!'
1679 (SRFI-17)
1680 - added a SRFI-17 setter to `list-ref'
1681 - added literal blob syntax ("#{ ... }")
1682
1683
1684- Tools
1685 - chicken-install
1686 - option "-deploy" does not compile deployed extensions with
1687 "-setup-mode" anymore to avoid problems with dynamic loading on
1688 some platforms (specifically Mac OS X)
1689 - option "-deploy" option did not copy the correct library
1690 (including the version-number) (thanks to Christian Kellermann)
1691 - added support for proxy-authentification (thanks to Iruata Souza)
1692 - when installing from a local directory `chicken-install' now
1693 removes existing `*.so' files in that location to avoid stale
1694 binaries when the `make' syntax is used in setup scripts
1695 - chicken-bug
1696 - removed disabled e-mail support
1697 - csc
1698 - removed `-static-extension' option
1699 - removed deprecated `-windows' option
1700 - fixed incorrect use of `chicken.rc' on non-Windows platforms
1701 in `-gui' mode (thanks to "ddp")
1702 - when compiling in C++ mode, the compiler will be called with the
1703 `-Wno-write-strings' option
1704 - `-frwapv' has been added to the default C compiler options
1705 - csi
1706 - the ",m" toplevel command now accepts "#f" to switch back to
1707 the initial empty module context (suggested by Christian Kellermann)
1708 - fixed broken `,g' toplevel command
1709 - deprecated `script' feature identifier (use `chicken-script'
1710 instead)
1711 - options `-p' and `-P' and `-e' imply `-no-init'
1712 - the call-trace reported will not include exception-handler code
1713 anymore (suggested by Christian Kellermann)
1714
1715
1716
17174.6.0
1718
1719- the licenses used in all components of the core system have
1720 been collected in the LICENSE file (Thanks to Peter Bex)
1721- Added new compiler option `-no-module-registration' which
1722 omits generation of module registration code, even when
1723 generation of import libraries has not been enabled
1724- running `chicken' without arguments now hints at the
1725 existence of `csi' and `csc'
1726- `caar', `cdar' and `cddr' generate faster code
1727- calls to `list', `vector' and the internal structure
1728 allocation primitive that take 1 to 8 arguments generate
1729 faster code
1730- `chicken-install' now checks the version of the setup
1731 configuration file `setup.defaults'
1732- added option `-exact' to `chicken-status' and `chicken-uninstall',
1733 which treats the pattern argument as the literal name of the
1734 extension to be listed/deinstalled
1735- `assert' shows line-number information, if available
1736 (suggested by Alejandro Forero Cuervo)
1737- interpreted code records the lexical-environment at call-
1738 sites, which can in case of an error be inspected with the
1739 new `,c', `,f' and `,g' csi toplevel commands
1740- the evaluation-result history in `csi' can be inspected and
1741 cleared (to reduce memory load) with the toplevel commands
1742 `,h' and `,ch'
1743- unit `data-structures': deprecated `left-section' and
1744 `right-section'
1745- fixed bug that caused the static syntax-environment of
1746 syntax exported by a module to be incomplete
1747- module `setup-api': Documented the `version>=?' and
1748 `extension-name-and-version' proceedures
1749- unit `posix': `utc-time->seconds' is considerably
1750 faster on Mac OS X (thanks to Jim Ursetto);
1751 added new procedure `file-type'
1752- the `time' macro now shows the correct number of minor
1753 garbage collections
1754- the immediate-object check inside the marking procedure
1755 of the garbage collector has been manually inlined which
1756 results in a significant GC speedup, depending on memory
1757 load
1758- unit `srfi-18' and `scheduler': various bugfixes (thanks
1759 to Joerg Wittenberger)
1760- unit `srfi-4': bugfix in 8-bit vector allocation routines
1761 (thanks to Kon Lovett)
1762- added `-:H' runtime option to dump heap state on exit
1763- fixed missing change in Makefile.cygwin (thanks to John Cowan)
1764- fixed bug in `let-optionals' macro that caused problems when the
1765 rest-variable was actually named `rest' (thanks to Alejandro
1766 Forero Cuervo)
1767- when Scheme files are translated to C++ or Objective-C, `csc'
1768 will register the feature-identifiers `chicken-scheme-to-c++'/
1769 `chicken-scheme-to-objc' ar compile-time
1770- fixed bug in expansion of `#!key' parameters in lambda-lists
1771- debug-output for forcing finalizers on exit goes to stderr now
1772 (thanks to Joerg Wittenberger)
1773- the installation routines for extensions automatically add
1774 version-number information if none is given in the extension
1775 property list (suggested by Alejandro Forero Cuervo)
1776- `standard-extension' accepts `#f' now for the version number
1777 and will use the version that has been obtained via
1778 `chicken-install'
1779- `fifo?', `symbolic-link?', `directory?', `regular-file?', `socket?',
1780 `character-device?' and `block-device?' now accepts file-descriptors
1781 or filenames
1782- `find-files' takes keyword arguments, now (including the options
1783 to process dotfiles and ignore symbolic links); the old argument
1784 signature is still supported but deprecated
1785- removed dependency on `symbol-append' in some macros used in
1786 srfi-4.scm to be able to compile the system with older chickens
1787- fixed bug in script that generates development snapshot
1788- added build-variable `TARGET_FEATURES', which can be used to pass
1789 extra options enabling or disabling fetures for a system configured
1790 for cross-compilation
1791- added compiler and interpreter option `-no-feature FEATURENAME' that
1792 disables predefined feature identifiers
1793- code compiled with interrupts disabled will not emit inline files
1794 for global inlining since they may execute in a context where
1795 interrupts are enabled
1796- the `setup.defaults' file that holds download sources for
1797 `chicken-install' now allows aliases for locations
1798- CHICKEN systems build from cross-compilation now by default
1799 transparently build and install extensions for both the host
1800 and target parts of the cross-compilation setup; the options
1801 `-host' and `-target' can now be used to selectively build
1802 an extensions for the host- and the target system, respectively
1803- also added `-host' and `-target' options to `chicken-status' and
1804 `chicken-uninstall'
1805- `chicken-install' now respects the `http_proxy' environment variable
1806 (contributed by Stephen Eilert)
1807- the `srfi-4' library unit has been heavily cleaned up and optimized
1808- optimization-level 3 now enables global inlining
1809- fixed the case that declarations listing global identifiers did not
1810 correctly rename them
1811- deprecated `-N' option shortcut for `-no-usual-integrations' option in
1812 `csc'
1813- `csi' now offers a toplevel command `,e' for invoking an external
1814 editor (suggested by Oivind Binde)
1815- the `describe' command in `csi' now detects many circular lists
1816 (contributed by Christian Kellermann)
1817- `csi' doesn't depend on the `srfi-69' library unit anymore
1818- when a closing sequence delimiter is missing or incorrect, the
1819 reader also reports the starting line of the sequence
1820- the reader signals an error when a file contains certain characters
1821 that indicate that it is a binary file
1822- procedure-information shown by the printer for procedures is now
1823 corrected for some library procedures that where missing the correct
1824 information; `getter-with-setter' copies procedure-information objects
1825 into the newly created accessor procedure, if available
1826- calls to some known pure standard- or extended procedures are removed, if
1827 the procedures are called with side-effect free arguments and the
1828 result is not used (this can also by enabled for user procedures with
1829 the `constant' declaration)
1830- fixed some build-system bugs related to installation
1831- fixed a problem in the C runtime code that prevented it to be compileable
1832 without a configuration header-file
1833- the makefile-target to build a bootstrapping `chicken' executable
1834 performs multi-stage build now
1835- changed error message when required extension is out of date (thanks to
1836 Mario Goulart)
1837- documented library units loaded by default in `csi' (thanks to Moritz
1838 Heidkamp)
1839- added `boot-chicken' makefile target to simplify bootstrapping
1840 the system from sources and documented this in the README
1841 (suggested by Jim Ursetto)
1842- CHICKEN can now be built on haiku (contributed by Chris Roberts)
1843- on Solaris, the system can be compiled with the SunPro C compiler
1844 (thanks to Semih Cemiloglu)
1845- removed the `-disable-warnings' compiler option and `disable-warnings'
1846 declaration specifier
1847- `fx/' and `fxmod' generate now faster code in safe mode
1848- cleaned up manual pages
1849- slightly optimized variable- and procedure-access
1850- in the compiler `-debug-level 2' implies `-scrutinize'
1851- internal compiler-transformation for `for-each' and `map'
1852 apply now with any expression as the procedure argument
1853- the compiler warns about non-intrinsic exported toplevel variables
1854 which are declared to be safe
1855- `csc' didn't handle the `-verbose' option (thanks to Mario Goulart)
1856- the `,d' command in `csi' now detects circular lists (thanks to
1857 Christian Kellermann)
1858- strings passed to C runtime functions and which are converted to
1859 0-terminated C strings are now checked for not containing embedded
1860 `\0' characters (thanks to Peter Bex)
1861- errors in user-defined record printers are caught and shown in the
1862 output instead of throwing an error to avoid endless recursion when
1863 an error message is printed
1864- a feature identifier named `chicken-MAJOR.MINOR' is now defined
1865 to simplify conditionalization of code on the CHICKEN version
1866- `getter-with-setter' copies the lambda-information (if available) from
1867 the getter to the generated procedure
1868- `time' uses a somewhat more concise output format and outputs timing
1869 information to stderr instead of stdout
1870- added a new chapter on cross-development to the manual
1871- added the `safe-globals' declaration specifier
1872- split up manual chapter `Modules and macros' into two chapters
1873 (named `Modules' and `Macros', respectively - suggested by
1874 Mario Goulart)
1875- the last 5 non-precompiled regular expressions are now internally
1876 cached in compiled form, which speeds up repeated matching of
1877 the same uncompiled regular expression dramatically
1878- added the new procedure `yes-or-no?' to the `utils' library unit
1879- added a `bench' makefile target that runs some non-trivial
1880 benchmark programs
1881- added `install-target' and `install-dev' makefile target for
1882 installing only target system libraries in cross-mode and
1883 development files (static libraries and headers)
1884- added `[-]no-procedure-checks-for-toplevel-bindings' compiler
1885 option and declaration
1886- usage of unimported syntax in modules gives more usable
1887 error messages; in particular, used but unimported FFI forms are
1888 now detected
1889- invalid syntactic forms (mostly `()') encountered by the compiler
1890 or interpreter show the contextual form containing the expression,
1891 or, if indicated by the context warns about missing imports
1892- simplified manual pages of all core tools - they now refer to
1893 the output shown by invoking `<tool> -help'
1894- added new option `-feature FEATURE' to `chicken-install' tool
1895 to pass feature-identifiers to invocations of `csc'
1896- removed deprecated `-host-extension' option from `chicken-install'
1897- `chicken-status' in a system built for cross-compilation now
1898 lists extensions installed in the target prefix, unless the
1899 new `-host' option is given on the command line
1900- `chicken-uninstall' in a system built for cross-compilation now
1901 removes extensions installed in the target prefix, unless the
1902 new `-host' option is given on the command line
1903- added missing entry for `finite?' to the `chicken' module
1904 exports
1905- added new procedure `port-closed?' to the `library' unit
1906 (contributed by Peter Bex)
1907- added new procedure `symbol-append' to the library unit
1908- the compiler-option `-optimize-level 0' is equivalent to
1909 `-no-compiler-syntax -no-usual-integrations`
1910- internal rewritings of `map' and `for-each' ensure correct
1911 evaluation order of the arguments and does a better job
1912 at detecting non-list arguments (thanks to Jim Ursetto)
1913- `void' now takes arbitrary arguments and ignores them
1914- deprecated `noop' (from the `data-structures' unit) which
1915 is now replaced by `void'
1916- the `time' macro now performs a major garbage collection
1917 before executing the contained expressions and writes
1918 the timings in a more compact format to the port given
1919 by `(current-error-port)' instead of the standard output
1920 port
1921- definitions of the form `(define define ...)' and
1922 `(define-syntax define-syntax ...)' now trigger an error,
1923 as required by R5RS (thanks to Jeronimo Pellegrini and Alex
1924 Shinn)
1925- deprecated `random-seed' from the `extras' unit, since it
1926 is identical to `randomize'
1927- added new procedure `create-temporary-directory' to the
1928 `files' unit
1929- deprecated the optional path separator argument to
1930 `make-pathname'
1931- slightly improved the performance of keyword argument
1932 processing
1933- removed the deprecated `canonical-path' and `current-environment'
1934 procedures from the `posix' unit
1935- warnings that mostly refer to programming style issues are
1936 now coined `notes' and are only shown in the interpreter
1937 or when debug-mode is enabled or when scrutiny is enabled
1938 when compiling
1939
19404.5.0
1941
1942- internal fixes of handling of alternative installation-prefix
1943 in setup-api
1944- certain compiler-warnings that are in really just notes
1945 and don't indicate a possible error (like reimport of
1946 identifiers) are only shown with -S or in verbose mode
1947- fixed handling of VARDIR in `chicken-install' (thanks to
1948 Davide Puricelli)
1949- `chicken-install -test' doesn't runs tests for dependencies
1950- when a non-else clause follows an else-clause in `cond',
1951 `case' or `select' a warning (note) is shown in verbose
1952 mode
1953- removed the deprecated `define-extension' and
1954 `define-compiled-syntax'
1955- `chicken-uninstall' now always asks before removing
1956 extensions, unless `-force' is given
1957- improved performance of keyword-argument processing slightly
1958- `export' outside of a module definition has no effect
1959- `number->string' now accepts arbitrary bases between 2 and 16
1960 (thanks to Christian Kellermann)
1961- fixed `standard-extension' in `setup-api' module
1962- literal constants keep their identity, even when inlined
1963- Unit library: added `fxodd?' and `fxeven?'
1964- All hardcoded special forms have been replaced with
1965 syntax definitions that expand into internal forms, this
1966 allows redefinition and shadowing of all Scheme core forms
1967- faster implementations of `get' and `put!'
1968- faster implementation of `assq' in unsafe mode
1969- the `-sx' option prefixes each output line with `;'
1970- slightly better expansion performance
1971- more documentation of the C API (thanks to Peter Bex)
1972- `module' supports a shorthand form that refers directly
1973 to a file to be included as the module body
1974- added runtime option `-:G' to force GUI mode (on platforms
1975 that distinguish between GUI and non-GUI applications)
1976- removed the unsafe runtime library (`libuchicken'), this
1977 simplifies and speeds up the build and reduces the risk
1978 of executables loading library units from different
1979 variants of the runtime system
1980- removed the `-unsafe-libraries' option from `chicken'
1981 and `csc'
1982- removed bootstrapping target and bootstrapping files from
1983 development repository; to bootstrap the system, either
1984 use a release or development-snapshot tarball or fetch
1985 a statically linked precompiled `chicken' binary from
1986 http://chicken.wiki.br/chicken-projects/bootstrap/
1987- Jim Ursetto provided some fixes for building universal
1988 binaries on Mac OS X
1989- `csc' now compiles and links Windows resource (.rc) files
1990 when given on the command line
1991- `chicken-install' and `chicken-uninstall' have an embedded
1992 manifest that suppresses the elevation dialog on Windows
1993 Vista and later when UAC is activated (Thanks to Thomas Chust)
1994- the `install' program is not used in the build on mingw
1995 and mingw/MSYS platforms, since this is broken on older
1996 mingw versions
1997- line-number-information is now properly handled (in the
1998 few places where it is used) correctly for included files;
1999 the source file is given in trace-output in addition to
2000 the line number
2001- removed compiler warning for shared objects compiled in
2002 unsafe mode
2003- unboxing is now only done in unsafe mode
2004- in unsafe mode, pointer-accessors from the `lolevel' unit
2005 are now handled intrinsically by the compiler
2006- `chicken-install' accepts now relative pathnames for the
2007 `-prefix' option
2008- `define-record-type' now optionally allows using SRFI-17
2009 setters as record-field modifiers
2010- `integer?' returns `#f' for NaN and infinite numbers
2011- `csc' now has an `-no-elevation' option for embedding a
2012 manifest that prevents the elevation dialog on Windows
2013 Vista and later when IAC is activated
2014- the `,d' csi command displays qualified symbols properly
2015- symbols starting with the `#\#' character trigger an
2016 error when encountered by the reader
2017- Unit posix: `glob->regexp' now always returns a regular
2018 expression object or optionally an SRE
2019- Unit posix: `terminal-port?' and `terminal-size' have been
2020 implemented for Windows, the latter always returns `0 0',
2021 though (thanks to Jim Ursetto)
2022- Unit regex: `regexp' now accepts a regular expression
2023 object as argument
2024- Unit regex: removed `glob?'
2025- fixed bug in `chicken-install'/`chicken-uninstall' and
2026 `chicken-status' that prevented collapsed command-line
2027 options to be handled correctly.
2028- disabled runpath-fix for deployed applications for netbsd
2029 (but resurrected providing a runpath at all, thanks to
2030 Peter Bex)
2031- Peter Bex provided documentation for the `C_closure' C API
2032 function
2033
20344.4.0
2035
2036- the system can now be built with llvm-gcc and/or "clang" (the
2037 LLVM C compiler which doesn't use the GNU C frontend)
2038- added new option `-trunk' to `chicken-install', which forces
2039 building and installing the development version of extensions
2040 in combination with `-t local'
2041- added new option `-deploy' to `chicken-install', which builds
2042 extension for use in "deployed" applications (see below)
2043- added option `-deploy' to `csc', the compiler driver. With this
2044 option `csc' can build fully self-contained application bundles
2045 and double-clickable Macintosh GUI apps; see the "Deployment"
2046 manual chapter for more information
2047- the directory given to the `-prefix' option of `chicken-install'
2048 may now be a relative pathname.
2049- removed GUI-specific runtime library (`libchicken-gui') from
2050 Windows build - GUI- and non-GUI applications now use the same
2051 runtime library
2052- special forms of the foreign-function interface have been replaced
2053 with an internal form and syntax to allow renaming and shadowing of
2054 these forms
2055- the new `-private-repository' option in `csc' compiles executables
2056 with the extension-repository path set to the directory from which
2057 the program was started
2058- `csc': deprecated the `-W' and `-windows' options, added `-gui' as
2059 a platform-independent replacement
2060- `require-extension'/`use' accepts now import-specifications
2061- user-defined extension-specifiers and `set-extension-specifier!'
2062 have been removed
2063- `delete-file[*]', `rename-file', `create-directory', `file-copy',
2064 `file-move', `delete-directory' and `change-directory' return their
2065 argument/destination filename on success
2066- added the missing procedure `condition-variable-name' to the
2067 srfi-18 library unit (Thanks to Joerg Wittenberger)
2068- the `glob?' function from the `regex' unit has been deprecated
2069- added the procedure `scan-input-lines' to the `utils' library unit
2070- added new runtime option `-:g' which enables GC debugging output
2071- reclamation of unused symbols in "symbol-gc" mode (`-:w') now only
2072 takes place for symbols with an empty property-list
2073- on Windows loading of code compiled with [non-]GUI runtime libraries
2074 will fail and produce an error message when the loading executable
2075 is linked with a different runtime system
2076- on Windows, GUI libraries were not correctly linked by `csc'
2077- unit posix: added setter for `file-modification-time'
2078- the banner shows the branchname of the build, unless it's "master"
2079- the `-no-install' option to `chicken-install' is ignored when
2080 building/installing dependencies
2081- `chicken-uninstall' takes a glob instead of a regular expression as
2082 argument
2083- the rename and compare functions for low-level macro-definitions
2084 accept now arbitrary s-expressions and renames/compares them recursively
2085- `number->string' handles negative-numbers with bases different from 10
2086 correctly (thanks to Peter Danenberg)
2087- removed deprecated `setup-install-flag' and `setup-verbose-flag' from
2088 the `setup-api' module
2089- added new option `-repository' to `chicken-install' (Thanks to Christian
2090 Kellermann)
2091- removed `chicken-setup' stub program
2092- fix to `csc' to use the correct library when fixing dynamic load paths
2093 (Thanks to Derrell Piper)
2094- removed html documentation from distribution (the wiki manual will
2095 now be installed)
2096- fixed bug in `reexport' which caused syntax not to be correctly
2097 reexported
2098- previous assignments to a toplevel variable that are separated by
2099 side effect free expressions are removed
2100- fixed windows version of `find-files' (thanks to Jim Ursetto)
2101- documentation for extensions is not installed automatically by
2102 `chicken-install' anymore
2103- changed binary version from "4" to "5", because the new runtime
2104 libraries are not binary-compatible with previous releases; this
2105 means all eggs have to be reinstalled and existing programs be
2106 recompiled!
2107- added unboxing pass to compiler which results in partially dramatical
2108 performance improvements for unsafe floating-point-intensive code;
2109 unboxing is enabled on optimization levels 4 and 5
2110- removed rest-argument-vector optimization as it could conflict
2111 with inlining (thanks to Sven Hartrumpf)
2112- renamed `pointer-offset' to `pointer+' and deprecated `pointer-offset'
2113- toplevel assignments that have no other side-effects can be eliminated
2114 if it can be shown that the value is not used (the compiler will
2115 generate a warning in this case)
2116- removed deprecated `-quiet' option in `chicken' program
2117- removed deprecated `run-time-macros' declaration
2118- removed deprecated `-v2' and `-v3' options in `csc' program
2119- removed deprecated `list-of' function (it is exclusively available
2120 as `list-of?' now)
2121- removed deprecated `stat-...' functions in posix library unit
2122- removed deprecated `for-each-line' and `for-each-argv-line' procedures
2123 in utils library unit
2124- added `fpinteger?' and `fpabs'
2125- deprecated `define-compiled-syntax'
2126- added new floating-point primitives `fpsin', `fpcos', `fptan',
2127 `fpasin', `fpacos', `fpatan', `fpatan2', `fpexp', `fplog',
2128 `fpexpt' and `fpsqrt'
2129- heavy cleanup of floating math functions which gives much better performance,
2130 especially for code compiled in unsafe mode
2131- calling `assert' with a single argument shows the tested expression
2132 on failure
2133- various bugfixes and cleaning up
2134
21354.3.0
2136
2137- fixed bug in `move-memory!' that caused negative offsets to be accepted
2138 (thanks to Jim Ursetto)
2139- removed tracing facility and apply-hook (see the "trace" egg
2140 for a replacement for tracing and breakpoints)
2141- chicken-install(1): renamed `-host-extension' option to `-host'
2142- added support for a make(1) configuration file ("config.make")
2143- `chicken-install' now allows specifiying a proxy for retrieving
2144 extensions over HTTP (thanks to Nicolas Pelletier)
2145- fixed bug in `cond-expand' that incorrectly renamed feature-identifiers
2146 if the form was the product of a syntax expansion (reported by Thomas
2147 Bushnell)
2148- import-libraries are only generated by the compiler if they don't exist
2149 yet and if the content has actually changed (this simplifies makefile-
2150 rules in some cases)
2151- it is now possible to pass a config-file to `make(1)' instead of specifying
2152 all build-options as variables on the command-line (see README)
2153- removed compiler options for "benchmark-mode" and replaced them with a
2154 new optimization level (5) (note that `-O5' does not imply fixnum mode
2155 anymore)
2156- `hen.el' and `scheme-complete.el' are not bundled with the core system
2157 anymore - `hen.el' is currently not maintained, and `scheme-complete.el'
2158 has its own release cycle; both files are available, see
2159 http://chicken.wiki.br/emacs
2160- removed meaningless benchmark suite and cleaned up
2161- added optional argument to `grep' that allows applying a function
2162 to each matched item (contributed by Tony Sidaway)
2163- added extension-property `import-only', which makes it possible to
2164 create extensions that have no runtime part
2165- the argument to `seconds->string', `seconds->utc-time' and
2166 `seconds->local-time' is now optional and defaults to the value
2167 of `(current-seconds)' (suggested by Mario Goulart)
2168- removed read-syntax for `syntax' form
2169- fixed bug in `get-condition-property'
2170- fixed bug in windows version of `process-execute'
2171- TCP timeouts throw exception of kind `timeout' to allow
2172 distinguishing between timeouts and other errors
2173- removed some internal functions that manipulate environments
2174- fixed bugs in `standard-extension' (`setup-api' module) and added keyword
2175 arguments for building static extensions and adding custom properties
2176- when cross-compiling, `chicken-install(1)' doesn't pass `-setup-mode'
2177 (the host tools should not attempt to load target binaries)
2178- `installation-prefix' in the `setup-api' module was not always correctly
2179 set
2180- the `-force' option in `chicken-install(1)' overrides the CHICKEN version
2181 check
2182- disabled e-mail feature in `chicken-bug(1)', since it doesn't work
2183 anyway, in the moment
2184- fixed bug in `reexport' that made it impossible to reexport core library
2185 definitions
2186- fix in optimizer that sometimes caused C functions for inlined
2187 procedures to be emitted multiple times (Thanks to Joerg Wittenberger)
2188- documented `define-compiler-syntax' and `let-compiler-syntax'
2189- printer for hash-tables shows current number of stores items
2190- when upgrading during installation of a dependency `chicken-install'
2191 shows the version to upgrade to (Thanks to Christian Kellermann)
2192- Updated scheme-complete (Thanks to Alex Shinn)
2193- fix for pathnames with whitespace in 'runtests.sh' on Windows
2194- fix for 'normalize-pathname' with absolute pathname argument
2195- added 'decompose-directory' to unit files
2196- fix for 'local-timezone-abbreviation' - wasn't using the current time
2197 so tz-name constant
2198- deprecated 'make-pathname' separator argument
2199
22004.2.0
2201
2202- added compiler option `-emit-all-import-libraries'
2203- added `reexport'
2204- added compiler and interpreter option `-setup-mode'
2205- various minor performance improvements
2206- fix for 'create-directory' when parents wanted
2207- `for-each-line' and `for-each-argv-line' have been deprecated
2208- chicken-install tries alternative servers if server responds with error
2209- fixed load bug (ticket #72)
2210- new library procedure `get-condition-property'
2211- many mingw build fixes (thanks tp Fadi Moukayed)
2212- setup-api: deprecated `cross-chicken' (use `cond-expand' or
2213 `feature?' instead)
2214- added topological-sort to data-structures unit; chicken-install
2215 sorts dependencies before installing them
2216- "-optimize-level 2" enables inlining by default
2217- disable executable stack in assembly code modules (patch by
2218 Zbigniew, reported by Marijn Schouten)
2219- csc now always exits with a status code of 1 on errors (patch by Zbigniew)
2220
22214.1.0
2222
2223- The new parameter "parantheses-synonyms" and the command-line
2224 option "-no-parantheses-synonyms" allow disabling list-like behaviour
2225 of "{ ... }" and "[ ... ]" tokens
2226- The new parameter "symbol-escape" and the command-line
2227 option "-no-symbol-escape" allows disabling "| ... |" symbol escape
2228 syntax
2229- Added command-line option "-r5rs-syntax" to disable CHICKEN-specific
2230 read-syntax
2231- Removed "macro?" and "undefine-macro!"
2232- Support for Microsoft Visual Studio / MSVC has been dropped
2233- The compiler provides now a simple flow-analysis pass that does
2234 basic checking of argument-counts and -types for core library procedure
2235 calls (new option "-scrutinize")
2236- New compiler-options "-no-argc-checks", "-no-bound-checks",
2237 "-no-procedure checks", "-no-procedure-checks-for-usual-bindings",
2238 "-types TYPEFILE" and "-consult-inline-file FILENAME"
2239- Added a "chicken-setup" stub-application to catch incorrect use of
2240 this tool (which has been replaced in 4.0.0 with "chicken-install")
2241- Changed "setup-install-flag" and "setup-verbose-flag" to
2242 "setup-install-mode" and "setup-verbose-mode" in "setup-api" module,
2243 the old names are still available but deprecated
2244- Posix unit:
2245 added "socket?", "block-device?" and "character-device?", deprecated
2246 redundant "stat-..." procedures
2247- Added "directory-exists?"
2248- "(for-each (lambda ...) X)" is compiled as a loop
2249- The argument-count check for format-strings for "[sf]printf" with a constant
2250 string argument is done at compile-time
2251
22524.0.0
2253
2254- removed `apropos' and `apropos-list' from the "utils" library unit;
2255 available as an extension
2256- removed texinfo and PDF documentation - this will possible be added back
2257 later
2258- replaced PCRE regex engine with Alex Shinn's "irregex" regular expression
2259 package
2260- removed `-extension' option
2261- removed `-static-extensions' csc option and added `-static-extension NAME'
2262- `regex' unit: removed `regexp*' and `regex-optimize'
2263- added `CHICKEN_new_finalizable_gc_root()'
2264- `length' checks its argument for being cyclic
2265- removed custom declarations and "link-options" and "c-options" declarations
2266- deprecated "-quiet" option to "chicken" program
2267- added "-update-db" option to chicken-install
2268- the compiler now suggests possibly required module-imports
2269- moved non-standard syntax-definitions into "chicken-syntax" library unit
2270- the pretty-printer prints the end-of-file object readably now
2271- alternative conditional execution paths have separate allocation computation
2272 (previously the allocation of all alternatives was coalesced)
2273- removed unused "%kmp-search" from "srfi-13" library unit
2274- expander handles syntax-reexports and makes unexported syntax available
2275 for exported expanders in import libraries
2276- added checks in some procedures in the "tcp" library unit
2277- the macro system has been completely overhauled and converted
2278 to hygienic macros
2279- a macro-aware module system has been added
2280- added "-sx" option to csi
2281- removed the following deprecated functions:
2282 [un]shift!
2283 andmap ormap
2284 byte-vector? byte-vector-fill!
2285 make-byte-vector byte-vector
2286 byte-vector-set! byte-vector-ref
2287 byte-vector->list list->byte-vector
2288 string->byte-vector byte-vector->string
2289 byte-vector-length
2290 make-static-byte-vector static-byte-vector->pointer
2291 byte-vector-move! byte-vector-append!
2292 set-file-position! set-user-id! set-group-id!
2293 set-process-group-id!
2294 macro? undefine-macro!
2295- the situation-identifiers "run-time" and "compile-time" have
2296 been removed
2297- the compiler options "-check-imports", "-import" and "-emit-exports"
2298 have been removed
2299- new procedures:
2300 strip-syntax
2301 expand
2302- new macros
2303 define-syntax
2304 module
2305 export
2306- the following macros have been removed:
2307 define-foreign-record
2308 define-foreign-enum
2309 define-macro
2310 define-extension
2311- "local" mode, in which locally defined exported toplevel variables can
2312 be inlined
2313- new options and declarations "[-]local", "[-]inline-global" and "-emit-inline-file"
2314- optimization levels changed to use inlining:
2315 -optimize-level 3: enables -inline -local (but *not* -unsafe)
2316 -optimize-level 4: enables -inline -local -unsafe
2317- increased default inlining-limit to 20
2318- support for cross-module inlining
2319- "make <VARIABLES> bench" runs the benchmark suite
2320- "chicken-setup" has been replaced by new command line tools
2321 "chicken-install", "chicken-uninstall" and "chicken-status", which are
2322 more flexible and allow greater freedom when creating local or application-
2323 specific repositories
2324- extension-installation can be done directly from SVN repositories or a local
2325 file tree
2326- enabled chicken mirror site as alternative download location