4.8.0 - Security fixes - improved hash table collision resistance and added randomization to prevent malicious external causes of collisions. All SRFI-69 procedures accept extra arguments to control randomization for testing/debugging. - on 64-bit machines the "random" procedure no longer truncates result values (which caused very nonrandom results for very large values). Note that random shouldn't be used for security-critical code. - Added checks for embedded '\0' characters in strings passed to some C functions on a lower level than Chicken's FFI. - Build system - version information has been moved into a separate unit to make the build-version shown in the banner and accessible through library procedures more accurate, this also speeds up the build on version- changes (thanks to Jim Ursetto for contributing this) - the build was made more reliable with respect to cross-compilation and custom installation names - the test-suite is now working on the mingw32 platform (with a few tests disabled due to missing functionality) - the version and branch of the sources are now properly compiled into the core libraries and shown in the "csi" and "chicken" version headers - The default target library name for an installation configured for cross- compilation is now "libchicken" and independent on any particular setting of PROGRAM_PREFIX/PROGRAM_SUFFIX (thanks to Otavio Salvador) - Compiler - Fixed bug in handling of symbols in constant-definitions (thanks to Peter Bex) - Stricter check for value-part of constant definition (thanks to Kon Lovett) - Fixed bug that caused argument-signatures of external definitions to be incorrectly modified during optimization (thanks to Peter Bex) - Failing constant-folding expressions now produce a compile-time warning - Fixed various bugs in the internal type-database (thanks to Kon Lovett and Peter Bex) - Fixed incorrect optimization rules for some fp-rounding and fixnum operators - added "-specialize" option and "specialize" declaration which enables optimizations of uses of core library procedures based on type- information gathered during flow analysis - "-optimize-level 3" and higher now implies "-specialize" - added option "-strict-types" and "-emit-type-file" - progress-information is now only shown with "-debug p"; the "-verbose" option only shows informational but noncritical messages - added optimizations for some library procedures - variable propagation for global variable accesses is now done in certain situations - the algorithmic complexity of the closure-conversion pass has been reduced which speeds up compilation noticably for large files - the "-uses" option handles whitespace in unit lists given on the command line (thanks to Santosh Rajan) - the alternative branch in a conditional is dropped when the condition is known to be a non-boolean value (suggested by Joerg Wittenberger) - implemented numerous fixes and improvements for flow analysis - fixed a bug in the compiler that could cause some variable bindings to be optimized away in certain situations involving inlining - added an experimental optimization called "clustering" (enable with the compiler option of the same name) - the optimizations done by the compiler are now listed as a comment in the generated C file - the type-information obtained during flow-analysis ("scrutiny") is now used for performing type-sensitive optimizations of calls to most of the core-library procedures - deprecated the "constant" declaration specifier - "unboxing" optimization has been completely removed - the implementation was unreliable and unmaintainable; the "-unboxing" compiler option will still be accepted but will produce a warning - Peter Bex contributed an optimization to the analysis pass that greatly reduces compile time for source code containing deeply nested lexical bindings - procedures that are known to have the value of a core library procedure that is a "standard" or "extended binding" will be inlined - enhanced line number tracking to get better error messages from the scrutinizer. - hygiene bugs related to compiler-syntax were fixed. - the local flow-analysis was sometimes reporting multiple warnings for the same type-conflict. - the time/space-complexity of some algorithms used in the compiler were reduced resulting in much better compile-times especially for large source files. - Interpreter - ",q" leaves the currently active REPL invocation instead of terminating the process (as suggested by John Cowan) - ",m" properly switches between modules (thanks to Christian Kellermann) - Core libraries - Cleaned up the set of available internal SRFI-feature-identifiers - Fixed bugs in "make-pathname" and "normalize-pathname" (thanks to Jim Ursetto) - The reader is now more consistent when parsing symbol- and keyword names that are fully or partially escaped (thanks to Kon Lovett) - The printer now does a better job at escaping certain single-character symbol names - Unit "lolevel" - deprecated "null-pointer" and "null-pointer?" - Fixed a bug in the Windows implementation of "file-type" (thanks to Jim Ursetto) - Fixed a bug in the implementation of "current-milliseconds" that could result in integer-overflow - Fixed an incorrect type-check in "list-ref" (thanks to Sven Hartrumpf) - Disabled "-setup-mode" when compiling extensions for deployment (thanks to Ivan Raikov) - Got rid of some warnings in the C runtime system that were triggered on the SunPro C compiler (thanks to Joe Python) - Fixed bug in "string->number" that caused out-of-range characters to be accepted for base > 10 (thanks to Jim Ursetto) - added "foldl" and "foldr" procedures, which are more efficient and have a more consistent argument order than the corresponding SRFI-1 procedures - "shuffle" has been deprecated - added "queue-length" - "queue->list" allocates and returns a fresh list now - invoking a parameter-procedure with an argument will return the new value - added new procedure "quit" - port-procedures now check correctly for argument-ports being open (thanks to Peter Bex) - "repl" accepts an optional evaluator procedure (suggested by John Cowan) - added a setter procedure to "signal-handler" ("posix" unit) - EINTR is properly handled for input routines that may block waiting for input - the implementation of R5RS evaluation environments is now fully standards compliant - "file-exists?" and "directory-exists?" work now properly for files > 2GB (EOVERFLOW handling in stat(3) system call) - fixed bug in implementation of "fifo?" - the procedure returned by "condition-predicate" accepts any type of argument now - blobs have a readable textual representation ("#{...}") - "find-files" does not follow symlinks by default (as it did previously) - also, the old non-keyword argument signature for "find-files" is not supported anymore - added "alist-update" ("data-structures" unit) - "irregex-replace" returns the original string instead of #f when the regex does not match - irregex "real" built-in utility pattern now accepts a leading sign - added "change-directory*" ("posix" unit) - number parsing has been made more reliable and standards compliant - deprecated "none?", "always?" and "never?" - library procedures that take ports as arguments now all perform checks on port-direction and open/closed state - "mutate-procedure" has been renamed to "mutate-procedure!" - the old name is still available but deprecated - deprecated C_hash_string and C_hash_string_ci functions in the C API in favor of the more secure versions C_u_i_string_hash, C_u_i_string_ci_hash - a number of bugs in the irregex regular expression engine have been fixed; it has been updated to upstream release 0.8.3 - "with-input-from-file", "with-output-to-file", "with-input-from-pipe" and "with-output-to-pipe" now properly restore the standard input/output ports in case the body thunk escapes - symbols with a single-char print-name where not always properly escaped when printed readably - the "make" facility of the "setup-api" module has been deprecated, please use the "make" extension when your egg requires this during setup. - Core tools - "csc" - The environment-variables "CHICKEN_C_INCLUDE_PATH" and "CHICKEN_C_LIBRARY_PATH" can now be used to add default include- and link-directories to C-compiler invocations - "-O5" passed expensive optimization flags to the C compiler which could expose C-Compiler bugs, depending on the compiler version (thanks to Sven Hartrumpf for pointing this out). - "-rpath" is ignored on OS X (thanks to Kon Lovett). - Fixed handling of "-output-file" (it was being ignored) - "chicken-install" - Added option "-override", which allows retrieving extension- versions from a file - this may be useful to ensure specific versions of a complete set of eggs are installed - Added option "-keep-installed"/"-x" that only installs explicitly named extensions given on the command line, if they are not already installed - Added option "-list" that lists all extensions available - Added option "-csi" to specify what interpreter should be used to execute the setup-script of an installed extension - Added option "-scan" that scans a local directory for the highest available extension versions available - Added option "-reinstall" that reinstalls all currently installed eggs, keeping their versions, if possible - Fixed bug with "chicken-install -test" when multiple extensions where given on the command line (thanks to Kon Lovett) - installing subdirectories works now on Windows. - fixed handling of "-force" when a "chicken" dependency version did not match - added new option "-show-foreign-depends" which lists foreign egg dependencies (if available) - added new option "-show-depends" which lists egg dependencies - added support for "or"-dependencies where a dependency is considered installed if one of a set of candidates is available - "chicken-profile" - fixed some bugs in the profiler and the runtime support code for profiling (thanks to Sven Hartrumpf) - fixed broken percentage calculation (thanks to "megane") - "chicken-status" - Added option "-list" that dumps versions of installed extensions in a format suitable for "chicken-install -override ..." - the "pattern" argument is now actually treated as a pattern and not as a regex - Core syntax - "assert" shows the line number of the form when a second argument is not given or is a literal string - "parameterize" now correctly omits invoking the guard procedure when the old value is restored (thanks to Joo ChurlSoo) - added ":", "the" and "assume" syntax for declaring types - added "define-specialization" form to declare type-driven procedure call rewrites in compiled code - Syntax expander - Fixed a bug that caused imported identifiers to leak into the macroexpansion/compile-time environment (reported by Christian Kellermann) - Fixed a bug in the processing of extended lambda-lists (thanks to Peter Bex) - Peter Bex fixed a bug that caused bound variables to be incorrectly renamed in quoted literals (thanks to Matthew Flatt) - fixed devious bug in the invocation and generation of transformer procedures - using normal "lambda" forms as transformers for local or global syntax definitions is deprecated - one should use "syntax-rules", "er-macro-transformer" or "ir-macro-transformer" from now on - Runtime system - fixed handling of "inf" and nan" floating-point predicates for Solaris (thanks to Claude Marinier) - support for re-loading of compiled files has now been completely removed - the maximum length of strings is no longer limited to a 24-bit number on 64-bit architectures but can be 56 bits. - string-comparison handles embedded '\0' characters. - numerical predicates handle infinity and NaN correctly. - deprecated "[+-]nan", "[+-]inf" and other notations "accidentally" accepted by Chicken due to the underlying C library's strtod() function, standardizing on "[+-]nan.0" and "[+-]inf.0" from R6RS (and soon R7RS), when displaying numbers only these forms are generated now. - signals are queued to some extent and the interrupt handling has been cleaned up somewhat - the interpreter handles SIGINT directly - loading the "posix" unit is not needed anymore to handle this feature - changed default nursery size slightly and fixed a bug that caused incorrect (too small) nursery sizes on 64-bit platforms - deprecated the compiler option "-heap-initial-size", "-heap-growth" and "-heap-shrinkage" - the assembly-language stub routine for the implementation of "apply" was broken for Sparc64 systems and has been disabled for this platform - signal masks were accidentally reset upon GC for some platforms; use sigsetjmp/siglongjmp on BSD, Linux, MacOS X and Haiku - Type system - added new type-specifiers "input-port", "output-port", "(list-of T)" and "(vector-of T)" - the type-specifiers "(vector T ...)" and "(list T ...)" represent fixed size lists and vectors now - added qualified types ("forall"), optionally with type constrains - added the "define-type" special form and type-abbreviations - added "compiler-typecase", a compile-time typematching form - Module system - Added "interfaces", which are named groups of exports - Added "functors", which are parameterized modules - Modules can now be aliased - New syntax: (define-interface NAME EXPORTS) (functor (NAME ...) EXPORTS ...) - Extended syntax of "module" for aliasing and functor-instantiation - the "scheme" module has been integrated into the core library and is not installed as a separate import library anymore - added core module "r4rs" containing only bindings for R4RS identifiers - added core module alias "r5rs" for "scheme" module - added "module-environment" which returns an evaluation environment for the bindings of a module - fixed bugs related to using "export"/"reexport" in combination with wildcard ("*") module export lists (thanks to "megane") - Foreign function interface - locatives are allowed as arguments declared "c-pointer" - "int32" was not properly detected as a valid foreign type (thanks to Jim Ursetto) 4.7.0 - Build system - On BSD, libchicken.so is linked with -lpthread, as this seems to be required for linking libraries that require pthreads - The C header-files are now installed in a subdirectory below the "PRFIX/include" directory to allow installation of multiple chickens with different PROGRAM_PREFIX/PROGRAM_SUFFIX settings in the same prefix; to avoid conflicts with existing CHICKEN headers, it is recommended to completely remove any old installation before installing the new version - the PROGRAM_PREFIX and PROGRAM_SUFFIX configuration settings are applied to generated files and directories which allows perform differently named installations into the same PREFIX - increaded binary-compatibility version from 5 to 6, which means installed extensions in an existing installations will have to be re-installed - bugfixes in mingw/msys makefiles - Sven Hartrumpf contributed a bugfix to the internal helper script for creating distribution directories - Peter Bex has cleaned up the makefiles heavily, making the build more maintainable and easier to modify; thanks to all who helped testing this new build - renamed the makefile to `GNUmakefile' to catch using the a make(3) other than GNU make - configuration-header fix for BSD systems (thanks to Peter Bex and Christian Kellermann) - Core libraries - the `regex' library unit has been removed and is separately available as an extension which should be fully backwards- compatible - `irregex' is now a core library unit and replaces the `regex' API - "extras" unit - fixed pretty-printer output of certain escaped character sequences inside strings (thanks to Mario Domenech Goulart, thanks to Kon Lovett for pointing out a missing test-file) - The pretty printer did not escape some control characters correctly (reported by Alan Post) - control-characters in symbol-names are now properly escaped if the symbol is printed readably (thanks to Alaric Snell-Pym for pointing this out) - the deprecated `random-seed' function has been removed - "files" unit - fixed bug in `normalize-pathname' - `file-copy' and `file-move' check whether the source-file is a directory - `delete-directory' now optionally deletes directories recursively - "irregex" unit - Peter Bex has contributed various bugfixes and performance enhancements - "library" unit - Added "condition->list" (thanks to Christian Kellermann) - The reader accepts now escaped octal character codes in string literals - Read-syntax can return zero values to indicate ignored objects - R5RS output output routines now always return a "void" result - "\|" was not correctly escaped when occurring inside symbol print names - added `condition->list', contributed by Christian Kellermann - added `equal=?' - removed deprecated `getenv', `left-section', `right-section', `project', `c-runtime' and `noop' - added missing import-library entry for `vector-copy!' (thanks to Jules Altfas) - circular or excessively deeply nested data generates a more useful error message when encountered by `equal?' - `list-tail' gives now a better error message when passed a non-list argument - fixed bug in `getter-with-setter' that modified the first argument if it already had a setter procedure attached - fixed incorrect size of internal data vector used in `time' (thanks to Kon Lovett) - "lolevel" unit - removed deprecated `global-bound?', `global-make-unbound', `global-ref' and `global-set!' procedures - added support for `pointer-vectors': - make-pointer-vector - pointer-vector? - pointer-vector-length - pointer-vector-ref - pointer-vector-set! - "posix" unit - "close-input-pipe" did not return the status code of a terminated process on Windows (reported by Mario Domenech Goulart) - added `file-creation-mode' (suggested by Mario Domenech Goulart) - "setup-api" unit - `required-extension-version' and `required-chicken-version' have been deprecated - "srfi-18" unit - removed deprecated `milliseconds->time' and `time->milliseconds' procedures - `make-mutex' incorrectly created mutexes as initially owned by the current threads (thanks to Joerg Wittenberger) - the file-descriptor handling in the scheduler has been simplified and performs some sanity checks - deadlock in the scheduler now terminates the process instead of attempting to throw an error - added some sanity checks to the scheduler - "tcp" unit - Fixed bug in "tcp-abandon-port" (reported by Jim Ursetto) - "utils" unit - `compile-file' now returns `#f' when the compilation fails, instead of raising an error - Compiler - Removed unreliable lambda-lifting optimization (now, really!); the "-lambda-lift" option is still accepted but produces a warning - When "-scrutinize" is given, installed ".types" files will be automatically consulted for extensions and used units - Fixed optimizer bug in handling of "let" forms with multiple bindings which could result in toplevel assignments being silently dropped (reported by Moritz Heidkamp) - the `-accumulate-profile' option did not provide a way to specify the target profile data file - now `-profile-name' must always be given when accumulated profiling is done (thanks to Taylor Venable) - added `-module' option, which wraps the code into an implicit module - removed check for unsafe toplevel calls in safe mode - intrinsic handling of `exact->inexact' and `string->number' is now more efficient - fixed bug in leaf-routine optimization (thanks to David Dreisigmeyer) - unit-toplevel entry-points are now named differently, which may break binary-compatibility with existing compiled Scheme code modules - fixed invalid dropping of unused external entry-points in block-mode - fixed incorrect lambda-list check in scrutinizer (thanks to Alan Post) - Kon Lovett reported numerous bugs in the type-database used by the scrutinizer - `-fwrapv' is disabled on OpenBSD, since the default compiler does not support this option (thanks to Christian Kellermann) - on Solaris `gcc' is used by default, override `C_COMPILER' to use the Sun compiler instead - declaring a function `notinline' will prevent direct-call optimization for known procedure calls - the implementation of overflow-detection for arithmetic operations on fixnums have been replaced and now allow using the full 63-bit range of fixnums on 64-bit systems - fixed serious inlining-bug (thanks to Sven Hartrumpf) - constant-folding in the compiler has been simplified and is more reliable (thanks to Sven Hartrumpf) - optimization-levels 3 and higher imply `-unboxing -inline-global' - added new declaration `unsafe-specialized-arithmetic' which allows optimizing unboxed floating-point arithmetic in safe mode - removed `scrutinize' declaration - the warning shown when unimported identifiers are used in compiled modules now also shows the name of the procedure where the identifier is referenced (suggested by Alaric Snell-Pym) - Documentation - Added list of installed files to README - Documented remaining "c...r" standard procedures (thanks to Juergen Lorenz) - The manual is now installed in HTML format in PREFIX/share/chicken/doc, many thanks to Jim Ursetto for contributing is excellent `manual-labor' extension which made this possible - Foreign function interface - Added support for missing "(const [XXX-]c-string)" foreign type (thanks to Moritz Heidkamp) - removed deprecated `pointer', `nonnull-pointer', `byte-vector' and `nonnull-byte-vector' types - added missing result-type handling for `unsigned-integer64' (thanks to Moritz Heidkamp) - added `foreign-type-size' macro - added the new foreign type `size_t' (suggested by Moritz Heidkamp) - added the missing `unsigned-integer64' foreign type (thanks to Moritz for catching this) - added new foreign type `pointer-vector' which maps to `void **' and provided a low-level API in the `lolevel' library unit for manipulating pointer vectors - Runtime system - Fixed typo in "runtime.c" (thanks to Sven Hartrumpf) - Little-endian detection on MIPS systems was not correct (thanks to Christian Kellermann) - Fixed bug in handling of runtime-options with arguments (also reported by Christian Kellermann) - `equal?' does not compare procedures recursively anymore - fixed incorrect use of alloca.h on OpenBSD (thanks to Christian Kellermann and Alan Post) - checks for NaN and infinity are now done using ISO C99 operations, which required various changes to `chicken.h' to make the code compile in ISO C99 mode - remaining debris regarding MSVC builds has been removed - fixed bug in argument-type check for 64-bit integer (thanks to Kon Lovett) - increased default trace-buffer size from 10 to 16 - fixed bug in low-level termination routine (thanks to Jeronimo Pellegrini) - the scheduler handles violations of internal invariants regarding threads slightly more gracefully (thanks to Jim Ursetto) - fixed broken sleep-time conversion (thanks to Karel Miklav) - repaired broken handling of multiple finalizers that referred to the same object (reported by Moritz Heidkamp) - fixed problem with reader and escaping of single-char symbols - Syntax expander - For-syntax syntax definitions where not correctly retained inside modules - Peter Bex fixed various critical bugs in the expander - The simplification for quasiquote expressions was unable to handle certain circular data (reported by Moritz Heidkamp) - `syntax-rules' now supports tail-patterns and is now fully SRFI-46 compatible - many thanks to Peter Bex for implementing this - Peter Bex provided a bugfix for resolution of primitive imports - handling of internal definitions with shadowed defining forms is now done correctly - fix once again from Peter Bex - corrected non-standard behaviour of quasiquote with respect to nested quasiquotations - another bugfix by our mighty macro master - removed stub-implementation of `define-macro' - handled case where a global redefinition of `cons' influenced a non-inlined internal use in the expander (thanks to David Steiner) - `define-record' now allows defining SRFI-17 setter procedures for accessing slots - the expansion of DSSSL lambda-lists uses now `let-optionals*' internally instead of `let-optionals' and so allows back-references to earlier formal variables; this also results in faster and more compact code for argument-list destructuring (thanks to Alan Post) - new "implicit renaming" macro facility contributed by Peter Bex (see `ir-macro-transformer') - parameters are now settable and can be modified using `set!' (SRFI-17) - added a SRFI-17 setter to `list-ref' - added literal blob syntax ("#{ ... }") - Tools - chicken-install - option "-deploy" does not compile deployed extensions with "-setup-mode" anymore to avoid problems with dynamic loading on some platforms (specifically Mac OS X) - option "-deploy" option did not copy the correct library (including the version-number) (thanks to Christian Kellermann) - added support for proxy-authentification (thanks to Iruata Souza) - when installing from a local directory `chicken-install' now removes existing `*.so' files in that location to avoid stale binaries when the `make' syntax is used in setup scripts - chicken-bug - removed disabled e-mail support - csc - removed `-static-extension' option - removed deprecated `-windows' option - fixed incorrect use of `chicken.rc' on non-Windows platforms in `-gui' mode (thanks to "ddp") - when compiling in C++ mode, the compiler will be called with the `-Wno-write-strings' option - `-frwapv' has been added to the default C compiler options - csi - the ",m" toplevel command now accepts "#f" to switch back to the initial empty module context (suggested by Christian Kellermann) - fixed broken `,g' toplevel command - deprecated `script' feature identifier (use `chicken-script' instead) - options `-p' and `-P' and `-e' imply `-no-init' - the call-trace reported will not include exception-handler code anymore (suggested by Christian Kellermann) 4.6.0 - the licenses used in all components of the core system have been collected in the LICENSE file (Thanks to Peter Bex) - Added new compiler option `-no-module-registration' which omits generation of module registration code, even when generation of import libraries has not been enabled - running `chicken' without arguments now hints at the existence of `csi' and `csc' - `caar', `cdar' and `cddr' generate faster code - calls to `list', `vector' and the internal structure allocation primitive that take 1 to 8 arguments generate faster code - `chicken-install' now checks the version of the setup configuration file `setup.defaults' - added option `-exact' to `chicken-status' and `chicken-uninstall', which treats the pattern argument as the literal name of the extension to be listed/deinstalled - `assert' shows line-number information, if available (suggested by Alejandro Forero Cuervo) - interpreted code records the lexical-environment at call- sites, which can in case of an error be inspected with the new `,c', `,f' and `,g' csi toplevel commands - the evaluation-result history in `csi' can be inspected and cleared (to reduce memory load) with the toplevel commands `,h' and `,ch' - unit `data-structures': deprecated `left-section' and `right-section' - fixed bug that caused the static syntax-environment of syntax exported by a module to be incomplete - module `setup-api': Documented the `version>=?' and `extension-name-and-version' proceedures - unit `posix': `utc-time->seconds' is considerably faster on Mac OS X (thanks to Jim Ursetto); added new procedure `file-type' - the `time' macro now shows the correct number of minor garbage collections - the immediate-object check inside the marking procedure of the garbage collector has been manually inlined which results in a significant GC speedup, depending on memory load - unit `srfi-18' and `scheduler': various bugfixes (thanks to Joerg Wittenberger) - unit `srfi-4': bugfix in 8-bit vector allocation routines (thanks to Kon Lovett) - added `-:H' runtime option to dump heap state on exit - fixed missing change in Makefile.cygwin (thanks to John Cowan) - fixed bug in `let-optionals' macro that caused problems when the rest-variable was actually named `rest' (thanks to Alejandro Forero Cuervo) - when Scheme files are translated to C++ or Objective-C, `csc' will register the feature-identifiers `chicken-scheme-to-c++'/ `chicken-scheme-to-objc' ar compile-time - fixed bug in expansion of `#!key' parameters in lambda-lists - debug-output for forcing finalizers on exit goes to stderr now (thanks to Joerg Wittenberger) - the installation routines for extensions automatically add version-number information if none is given in the extension property list (suggested by Alejandro Forero Cuervo) - `standard-extension' accepts `#f' now for the version number and will use the version that has been obtained via `chicken-install' - `fifo?', `symbolic-link?', `directory?', `regular-file?', `socket?', `character-device?' and `block-device?' now accepts file-descriptors or filenames - `find-files' takes keyword arguments, now (including the options to process dotfiles and ignore symbolic links); the old argument signature is still supported but deprecated - removed dependency on `symbol-append' in some macros used in srfi-4.scm to be able to compile the system with older chickens - fixed bug in script that generates development snapshot - added build-variable `TARGET_FEATURES', which can be used to pass extra options enabling or disabling fetures for a system configured for cross-compilation - added compiler and interpreter option `-no-feature FEATURENAME' that disables predefined feature identifiers - code compiled with interrupts disabled will not emit inline files for global inlining since they may execute in a context where interrupts are enabled - the `setup.defaults' file that holds download sources for `chicken-install' now allows aliases for locations - CHICKEN systems build from cross-compilation now by default transparently build and install extensions for both the host and target parts of the cross-compilation setup; the options `-host' and `-target' can now be used to selectively build an extensions for the host- and the target system, respectively - also added `-host' and `-target' options to `chicken-status' and `chicken-uninstall' - `chicken-install' now respects the `http_proxy' environment variable (contributed by Stephen Eilert) - the `srfi-4' library unit has been heavily cleaned up and optimized - optimization-level 3 now enables global inlining - fixed the case that declarations listing global identifiers did not correctly rename them - deprecated `-N' option shortcut for `-no-usual-integrations' option in `csc' - `csi' now offers a toplevel command `,e' for invoking an external editor (suggested by Oivind Binde) - the `describe' command in `csi' now detects many circular lists (contributed by Christian Kellermann) - `csi' doesn't depend on the `srfi-69' library unit anymore - when a closing sequence delimiter is missing or incorrect, the reader also reports the starting line of the sequence - the reader signals an error when a file contains certain characters that indicate that it is a binary file - procedure-information shown by the printer for procedures is now corrected for some library procedures that where missing the correct information; `getter-with-setter' copies procedure-information objects into the newly created accessor procedure, if available - calls to some known pure standard- or extended procedures are removed, if the procedures are called with side-effect free arguments and the result is not used (this can also by enabled for user procedures with the `constant' declaration) - fixed some build-system bugs related to installation - fixed a problem in the C runtime code that prevented it to be compileable without a configuration header-file - the makefile-target to build a bootstrapping `chicken' executable performs multi-stage build now - changed error message when required extension is out of date (thanks to Mario Goulart) - documented library units loaded by default in `csi' (thanks to Moritz Heidkamp) - added `boot-chicken' makefile target to simplify bootstrapping the system from sources and documented this in the README (suggested by Jim Ursetto) - CHICKEN can now be built on haiku (contributed by Chris Roberts) - on Solaris, the system can be compiled with the SunPro C compiler (thanks to Semih Cemiloglu) - removed the `-disable-warnings' compiler option and `disable-warnings' declaration specifier - `fx/' and `fxmod' generate now faster code in safe mode - cleaned up manual pages - slightly optimized variable- and procedure-access - in the compiler `-debug-level 2' implies `-scrutinize' - internal compiler-transformation for `for-each' and `map' apply now with any expression as the procedure argument - the compiler warns about non-intrinsic exported toplevel variables which are declared to be safe - `csc' didn't handle the `-verbose' option (thanks to Mario Goulart) - the `,d' command in `csi' now detects circular lists (thanks to Christian Kellermann) - strings passed to C runtime functions and which are converted to 0-terminated C strings are now checked for not containing embedded `\0' characters (thanks to Peter Bex) - errors in user-defined record printers are caught and shown in the output instead of throwing an error to avoid endless recursion when an error message is printed - a feature identifier named `chicken-MAJOR.MINOR' is now defined to simplify conditionalization of code on the CHICKEN version - `getter-with-setter' copies the lambda-information (if available) from the getter to the generated procedure - `time' uses a somewhat more concise output format and outputs timing information to stderr instead of stdout - added a new chapter on cross-development to the manual - added the `safe-globals' declaration specifier - split up manual chapter `Modules and macros' into two chapters (named `Modules' and `Macros', respectively - suggested by Mario Goulart) - the last 5 non-precompiled regular expressions are now internally cached in compiled form, which speeds up repeated matching of the same uncompiled regular expression dramatically - added the new procedure `yes-or-no?' to the `utils' library unit - added a `bench' makefile target that runs some non-trivial benchmark programs - added `install-target' and `install-dev' makefile target for installing only target system libraries in cross-mode and development files (static libraries and headers) - added `[-]no-procedure-checks-for-toplevel-bindings' compiler option and declaration - usage of unimported syntax in modules gives more usable error messages; in particular, used but unimported FFI forms are now detected - invalid syntactic forms (mostly `()') encountered by the compiler or interpreter show the contextual form containing the expression, or, if indicated by the context warns about missing imports - simplified manual pages of all core tools - they now refer to the output shown by invoking ` -help' - added new option `-feature FEATURE' to `chicken-install' tool to pass feature-identifiers to invocations of `csc' - removed deprecated `-host-extension' option from `chicken-install' - `chicken-status' in a system built for cross-compilation now lists extensions installed in the target prefix, unless the new `-host' option is given on the command line - `chicken-uninstall' in a system built for cross-compilation now removes extensions installed in the target prefix, unless the new `-host' option is given on the command line - added missing entry for `finite?' to the `chicken' module exports - added new procedure `port-closed?' to the `library' unit (contributed by Peter Bex) - added new procedure `symbol-append' to the library unit - the compiler-option `-optimize-level 0' is equivalent to `-no-compiler-syntax -no-usual-integrations` - internal rewritings of `map' and `for-each' ensure correct evaluation order of the arguments and does a better job at detecting non-list arguments (thanks to Jim Ursetto) - `void' now takes arbitrary arguments and ignores them - deprecated `noop' (from the `data-structures' unit) which is now replaced by `void' - the `time' macro now performs a major garbage collection before executing the contained expressions and writes the timings in a more compact format to the port given by `(current-error-port)' instead of the standard output port - definitions of the form `(define define ...)' and `(define-syntax define-syntax ...)' now trigger an error, as required by R5RS (thanks to Jeronimo Pellegrini and Alex Shinn) - deprecated `random-seed' from the `extras' unit, since it is identical to `randomize' - added new procedure `create-temporary-directory' to the `files' unit - deprecated the optional path separator argument to `make-pathname' - slightly improved the performance of keyword argument processing - removed the deprecated `canonical-path' and `current-environment' procedures from the `posix' unit - warnings that mostly refer to programming style issues are now coined `notes' and are only shown in the interpreter or when debug-mode is enabled or when scrutiny is enabled when compiling 4.5.0 - internal fixes of handling of alternative installation-prefix in setup-api - certain compiler-warnings that are in really just notes and don't indicate a possible error (like reimport of identifiers) are only shown with -S or in verbose mode - fixed handling of VARDIR in `chicken-install' (thanks to Davide Puricelli) - `chicken-install -test' doesn't runs tests for dependencies - when a non-else clause follows an else-clause in `cond', `case' or `select' a warning (note) is shown in verbose mode - removed the deprecated `define-extension' and `define-compiled-syntax' - `chicken-uninstall' now always asks before removing extensions, unless `-force' is given - improved performance of keyword-argument processing slightly - `export' outside of a module definition has no effect - `number->string' now accepts arbitrary bases between 2 and 16 (thanks to Christian Kellermann) - fixed `standard-extension' in `setup-api' module - literal constants keep their identity, even when inlined - Unit library: added `fxodd?' and `fxeven?' - All hardcoded special forms have been replaced with syntax definitions that expand into internal forms, this allows redefinition and shadowing of all Scheme core forms - faster implementations of `get' and `put!' - faster implementation of `assq' in unsafe mode - the `-sx' option prefixes each output line with `;' - slightly better expansion performance - more documentation of the C API (thanks to Peter Bex) - `module' supports a shorthand form that refers directly to a file to be included as the module body - added runtime option `-:G' to force GUI mode (on platforms that distinguish between GUI and non-GUI applications) - removed the unsafe runtime library (`libuchicken'), this simplifies and speeds up the build and reduces the risk of executables loading library units from different variants of the runtime system - removed the `-unsafe-libraries' option from `chicken' and `csc' - removed bootstrapping target and bootstrapping files from development repository; to bootstrap the system, either use a release or development-snapshot tarball or fetch a statically linked precompiled `chicken' binary from http://chicken.wiki.br/chicken-projects/bootstrap/ - Jim Ursetto provided some fixes for building universal binaries on Mac OS X - `csc' now compiles and links Windows resource (.rc) files when given on the command line - `chicken-install' and `chicken-uninstall' have an embedded manifest that suppresses the elevation dialog on Windows Vista and later when UAC is activated (Thanks to Thomas Chust) - the `install' program is not used in the build on mingw and mingw/MSYS platforms, since this is broken on older mingw versions - line-number-information is now properly handled (in the few places where it is used) correctly for included files; the source file is given in trace-output in addition to the line number - removed compiler warning for shared objects compiled in unsafe mode - unboxing is now only done in unsafe mode - in unsafe mode, pointer-accessors from the `lolevel' unit are now handled intrinsically by the compiler - `chicken-install' accepts now relative pathnames for the `-prefix' option - `define-record-type' now optionally allows using SRFI-17 setters as record-field modifiers - `integer?' returns `#f' for NaN and infinite numbers - `csc' now has an `-no-elevation' option for embedding a manifest that prevents the elevation dialog on Windows Vista and later when IAC is activated - the `,d' csi command displays qualified symbols properly - symbols starting with the `#\#' character trigger an error when encountered by the reader - Unit posix: `glob->regexp' now always returns a regular expression object or optionally an SRE - Unit posix: `terminal-port?' and `terminal-size' have been implemented for Windows, the latter always returns `0 0', though (thanks to Jim Ursetto) - Unit regex: `regexp' now accepts a regular expression object as argument - Unit regex: removed `glob?' - fixed bug in `chicken-install'/`chicken-uninstall' and `chicken-status' that prevented collapsed command-line options to be handled correctly. - disabled runpath-fix for deployed applications for netbsd (but resurrected providing a runpath at all, thanks to Peter Bex) - Peter Bex provided documentation for the `C_closure' C API function 4.4.0 - the system can now be built with llvm-gcc and/or "clang" (the LLVM C compiler which doesn't use the GNU C frontend) - added new option `-trunk' to `chicken-install', which forces building and installing the development version of extensions in combination with `-t local' - added new option `-deploy' to `chicken-install', which builds extension for use in "deployed" applications (see below) - added option `-deploy' to `csc', the compiler driver. With this option `csc' can build fully self-contained application bundles and double-clickable Macintosh GUI apps; see the "Deployment" manual chapter for more information - the directory given to the `-prefix' option of `chicken-install' may now be a relative pathname. - removed GUI-specific runtime library (`libchicken-gui') from Windows build - GUI- and non-GUI applications now use the same runtime library - special forms of the foreign-function interface have been replaced with an internal form and syntax to allow renaming and shadowing of these forms - the new `-private-repository' option in `csc' compiles executables with the extension-repository path set to the directory from which the program was started - `csc': deprecated the `-W' and `-windows' options, added `-gui' as a platform-independent replacement - `require-extension'/`use' accepts now import-specifications - user-defined extension-specifiers and `set-extension-specifier!' have been removed - `delete-file[*]', `rename-file', `create-directory', `file-copy', `file-move', `delete-directory' and `change-directory' return their argument/destination filename on success - added the missing procedure `condition-variable-name' to the srfi-18 library unit (Thanks to Joerg Wittenberger) - the `glob?' function from the `regex' unit has been deprecated - added the procedure `scan-input-lines' to the `utils' library unit - added new runtime option `-:g' which enables GC debugging output - reclamation of unused symbols in "symbol-gc" mode (`-:w') now only takes place for symbols with an empty property-list - on Windows loading of code compiled with [non-]GUI runtime libraries will fail and produce an error message when the loading executable is linked with a different runtime system - on Windows, GUI libraries were not correctly linked by `csc' - unit posix: added setter for `file-modification-time' - the banner shows the branchname of the build, unless it's "master" - the `-no-install' option to `chicken-install' is ignored when building/installing dependencies - `chicken-uninstall' takes a glob instead of a regular expression as argument - the rename and compare functions for low-level macro-definitions accept now arbitrary s-expressions and renames/compares them recursively - `number->string' handles negative-numbers with bases different from 10 correctly (thanks to Peter Danenberg) - removed deprecated `setup-install-flag' and `setup-verbose-flag' from the `setup-api' module - added new option `-repository' to `chicken-install' (Thanks to Christian Kellermann) - removed `chicken-setup' stub program - fix to `csc' to use the correct library when fixing dynamic load paths (Thanks to Derrell Piper) - removed html documentation from distribution (the wiki manual will now be installed) - fixed bug in `reexport' which caused syntax not to be correctly reexported - previous assignments to a toplevel variable that are separated by side effect free expressions are removed - fixed windows version of `find-files' (thanks to Jim Ursetto) - documentation for extensions is not installed automatically by `chicken-install' anymore - changed binary version from "4" to "5", because the new runtime libraries are not binary-compatible with previous releases; this means all eggs have to be reinstalled and existing programs be recompiled! - added unboxing pass to compiler which results in partially dramatical performance improvements for unsafe floating-point-intensive code; unboxing is enabled on optimization levels 4 and 5 - removed rest-argument-vector optimization as it could conflict with inlining (thanks to Sven Hartrumpf) - renamed `pointer-offset' to `pointer+' and deprecated `pointer-offset' - toplevel assignments that have no other side-effects can be eliminated if it can be shown that the value is not used (the compiler will generate a warning in this case) - removed deprecated `-quiet' option in `chicken' program - removed deprecated `run-time-macros' declaration - removed deprecated `-v2' and `-v3' options in `csc' program - removed deprecated `list-of' function (it is exclusively available as `list-of?' now) - removed deprecated `stat-...' functions in posix library unit - removed deprecated `for-each-line' and `for-each-argv-line' procedures in utils library unit - added `fpinteger?' and `fpabs' - deprecated `define-compiled-syntax' - added new floating-point primitives `fpsin', `fpcos', `fptan', `fpasin', `fpacos', `fpatan', `fpatan2', `fpexp', `fplog', `fpexpt' and `fpsqrt' - heavy cleanup of floating math functions which gives much better performance, especially for code compiled in unsafe mode - calling `assert' with a single argument shows the tested expression on failure - various bugfixes and cleaning up 4.3.0 - fixed bug in `move-memory!' that caused negative offsets to be accepted (thanks to Jim Ursetto) - removed tracing facility and apply-hook (see the "trace" egg for a replacement for tracing and breakpoints) - chicken-install(1): renamed `-host-extension' option to `-host' - added support for a make(1) configuration file ("config.make") - `chicken-install' now allows specifiying a proxy for retrieving extensions over HTTP (thanks to Nicolas Pelletier) - fixed bug in `cond-expand' that incorrectly renamed feature-identifiers if the form was the product of a syntax expansion (reported by Thomas Bushnell) - import-libraries are only generated by the compiler if they don't exist yet and if the content has actually changed (this simplifies makefile- rules in some cases) - it is now possible to pass a config-file to `make(1)' instead of specifying all build-options as variables on the command-line (see README) - removed compiler options for "benchmark-mode" and replaced them with a new optimization level (5) (note that `-O5' does not imply fixnum mode anymore) - `hen.el' and `scheme-complete.el' are not bundled with the core system anymore - `hen.el' is currently not maintained, and `scheme-complete.el' has its own release cycle; both files are available, see http://chicken.wiki.br/emacs - removed meaningless benchmark suite and cleaned up - added optional argument to `grep' that allows applying a function to each matched item (contributed by Tony Sidaway) - added extension-property `import-only', which makes it possible to create extensions that have no runtime part - the argument to `seconds->string', `seconds->utc-time' and `seconds->local-time' is now optional and defaults to the value of `(current-seconds)' (suggested by Mario Goulart) - removed read-syntax for `syntax' form - fixed bug in `get-condition-property' - fixed bug in windows version of `process-execute' - TCP timeouts throw exception of kind `timeout' to allow distinguishing between timeouts and other errors - removed some internal functions that manipulate environments - fixed bugs in `standard-extension' (`setup-api' module) and added keyword arguments for building static extensions and adding custom properties - when cross-compiling, `chicken-install(1)' doesn't pass `-setup-mode' (the host tools should not attempt to load target binaries) - `installation-prefix' in the `setup-api' module was not always correctly set - the `-force' option in `chicken-install(1)' overrides the CHICKEN version check - disabled e-mail feature in `chicken-bug(1)', since it doesn't work anyway, in the moment - fixed bug in `reexport' that made it impossible to reexport core library definitions - fix in optimizer that sometimes caused C functions for inlined procedures to be emitted multiple times (Thanks to Joerg Wittenberger) - documented `define-compiler-syntax' and `let-compiler-syntax' - printer for hash-tables shows current number of stores items - when upgrading during installation of a dependency `chicken-install' shows the version to upgrade to (Thanks to Christian Kellermann) - Updated scheme-complete (Thanks to Alex Shinn) - fix for pathnames with whitespace in 'runtests.sh' on Windows - fix for 'normalize-pathname' with absolute pathname argument - added 'decompose-directory' to unit files - fix for 'local-timezone-abbreviation' - wasn't using the current time so tz-name constant - deprecated 'make-pathname' separator argument 4.2.0 - added compiler option `-emit-all-import-libraries' - added `reexport' - added compiler and interpreter option `-setup-mode' - various minor performance improvements - fix for 'create-directory' when parents wanted - `for-each-line' and `for-each-argv-line' have been deprecated - chicken-install tries alternative servers if server responds with error - fixed load bug (ticket #72) - new library procedure `get-condition-property' - many mingw build fixes (thanks tp Fadi Moukayed) - setup-api: deprecated `cross-chicken' (use `cond-expand' or `feature?' instead) - added topological-sort to data-structures unit; chicken-install sorts dependencies before installing them - "-optimize-level 2" enables inlining by default - disable executable stack in assembly code modules (patch by Zbigniew, reported by Marijn Schouten) - csc now always exits with a status code of 1 on errors (patch by Zbigniew) 4.1.0 - The new parameter "parantheses-synonyms" and the command-line option "-no-parantheses-synonyms" allow disabling list-like behaviour of "{ ... }" and "[ ... ]" tokens - The new parameter "symbol-escape" and the command-line option "-no-symbol-escape" allows disabling "| ... |" symbol escape syntax - Added command-line option "-r5rs-syntax" to disable CHICKEN-specific read-syntax - Removed "macro?" and "undefine-macro!" - Support for Microsoft Visual Studio / MSVC has been dropped - The compiler provides now a simple flow-analysis pass that does basic checking of argument-counts and -types for core library procedure calls (new option "-scrutinize") - New compiler-options "-no-argc-checks", "-no-bound-checks", "-no-procedure checks", "-no-procedure-checks-for-usual-bindings", "-types TYPEFILE" and "-consult-inline-file FILENAME" - Added a "chicken-setup" stub-application to catch incorrect use of this tool (which has been replaced in 4.0.0 with "chicken-install") - Changed "setup-install-flag" and "setup-verbose-flag" to "setup-install-mode" and "setup-verbose-mode" in "setup-api" module, the old names are still available but deprecated - Posix unit: added "socket?", "block-device?" and "character-device?", deprecated redundant "stat-..." procedures - Added "directory-exists?" - "(for-each (lambda ...) X)" is compiled as a loop - The argument-count check for format-strings for "[sf]printf" with a constant string argument is done at compile-time 4.0.0 - removed `apropos' and `apropos-list' from the "utils" library unit; available as an extension - removed texinfo and PDF documentation - this will possible be added back later - replaced PCRE regex engine with Alex Shinn's "irregex" regular expression package - removed `-extension' option - removed `-static-extensions' csc option and added `-static-extension NAME' - `regex' unit: removed `regexp*' and `regex-optimize' - added `CHICKEN_new_finalizable_gc_root()' - `length' checks its argument for being cyclic - removed custom declarations and "link-options" and "c-options" declarations - deprecated "-quiet" option to "chicken" program - added "-update-db" option to chicken-install - the compiler now suggests possibly required module-imports - moved non-standard syntax-definitions into "chicken-syntax" library unit - the pretty-printer prints the end-of-file object readably now - alternative conditional execution paths have separate allocation computation (previously the allocation of all alternatives was coalesced) - removed unused "%kmp-search" from "srfi-13" library unit - expander handles syntax-reexports and makes unexported syntax available for exported expanders in import libraries - added checks in some procedures in the "tcp" library unit - the macro system has been completely overhauled and converted to hygienic macros - a macro-aware module system has been added - added "-sx" option to csi - removed the following deprecated functions: [un]shift! andmap ormap byte-vector? byte-vector-fill! make-byte-vector byte-vector byte-vector-set! byte-vector-ref byte-vector->list list->byte-vector string->byte-vector byte-vector->string byte-vector-length make-static-byte-vector static-byte-vector->pointer byte-vector-move! byte-vector-append! set-file-position! set-user-id! set-group-id! set-process-group-id! macro? undefine-macro! - the situation-identifiers "run-time" and "compile-time" have been removed - the compiler options "-check-imports", "-import" and "-emit-exports" have been removed - new procedures: strip-syntax expand - new macros define-syntax module export - the following macros have been removed: define-foreign-record define-foreign-enum define-macro define-extension - "local" mode, in which locally defined exported toplevel variables can be inlined - new options and declarations "[-]local", "[-]inline-global" and "-emit-inline-file" - optimization levels changed to use inlining: -optimize-level 3: enables -inline -local (but *not* -unsafe) -optimize-level 4: enables -inline -local -unsafe - increased default inlining-limit to 20 - support for cross-module inlining - "make bench" runs the benchmark suite - "chicken-setup" has been replaced by new command line tools "chicken-install", "chicken-uninstall" and "chicken-status", which are more flexible and allow greater freedom when creating local or application- specific repositories - extension-installation can be done directly from SVN repositories or a local file tree - enabled chicken mirror site as alternative download location