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