~ chicken-core (chicken-5) /NEWS


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