~ chicken-core (master) /NEWS


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