GCL 2.6.13 RELEASE NOTES

Greetings! The GCL team is happy to announce the release of version 2.6.13, the latest achievement in the 'stable' (as opposed to 'development') series. Please see http://www.gnu.org/software/gcl for downloading information.

This release consolidates several years of work on GCL internals, performance and ansi compliance.

Garbage collection has been overhauled and significantly accelerated. Contiguous block handling is now as fast as or perhaps faster than relblock handling, leading to the now implemented promotion of relblock data to contiguous after a surviving a number of gc calls. Relblock is only written once during gc. Heap allocation is fully dynamic at runtime and controllable with environment variables without recompilation. While SGC is supported, it is found in practice to be less useful with modern large memory cores and is off by default.

GCC on several platforms defaults to code which must lie within a common 2Gb space, now an issue with heaps routinely larger than this. Error protection for code address overflow is in place on most machines. The variable si::*code-block-reserve* can be set to a static array of element type 'character to preallocate a code block early within an acceptable range. On amd64, compile-file takes a :large-memory-model-p keyword (with compiler::*default-large-memory-model-p*) to compile somewhat slower code which can be loaded at an arbitrary address.

The COMMON-LISP package is fixed to the ansi standard. A CLTL1-COMPAT package is defined to support earlier applications, and is used in non-ansi builds.

GCL can optionally manage a single heap load across multiple processes via the GCL_MULTIPROCESS_MEMORY_POOL environment variable. GCL can compile gprof profiling code in non-profiling images using the :prof-p keyword to compile, causing '(si::gprof-start)(...)(si::gprof-quit)' to only report calls to such code. GCL supports riscv4, and 64bit cygwin on Windows in addition to the previous 21 architectures. GCL has extensive support for hardware floating point exception handling via the #'si::break-on-floating-point-exceptions function, taking the floating point errors as keyword arguments.

Several ANSI compliance errors have been fixed, most particularly in pathnames and restarts. Hashtables have been accelerated, supporting caching, static allocation, and 'equalp tests.

Circle detection and handling has been greatly accelerated, using the gc marking algorithm for a copy-less implementation.

The compiler no longer writes data files reordering "package-operations", changing the data file format to one loadable on object file initialization.

Floating point reading and writing has been made more precise. Inf/nan handling matches IEEE specifications.

From the git log: