~ chicken-core (master) /NEWS


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