Greetings! The GCL team is happy to announce the release of version 2.6.14, the latest achievement in the 'stable' (as opposed to 'development') series. Please see http://www.gnu.org/software/gcl for downloading information.
This is a cleanup release with respect to 2.6.13, with the primary goal of supporting current gcc-12 signed integer tree-vrp optimizations, on by default at -O2 or higher.
There are a few portability fixes: X86_64_RELOC_SIGNED_1 support on macosx, centos readline/configure fixes, and R_RISCV_CALL_PLT support on riscv64.
A fix to decode-universal-time is included, which is backward
incompatible with a workaround in currently released maxima. The
gcl_cleanup... and/or master maxima branches in git have been adjusted accordingly.
'si::help has been imported into the "USER" package.
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.
Greetings! The GCL team is happy to announce the release of version
2.6.12, the latest achievement in the 'stable' (as opposed to
'development') series. Please see http://www.gnu.org/software/gcl for
downloading information.
This release was largely motivated to accelerate closure construction
and compiler hash table performance for ACL2(h). Along the way,
support was added for ACL2 static-consing, making GCL at present one
of two lisps offering this optimization for very large and heavy jobs.
This release also features a TAGS target in make, a variety of
compiler speed improvements, an overhaul and standardization of the
error, conditions, and restart systems, protection of system and fork
from SIGPROF, and getc/putc from SIGINT, faster l2 list functions and
nani/address, proper handling of missing objdump and generic TMP
environment variables, processing of mismatched fast-link calls slowly
without error, ppc64le and aarch64 fixes, support for the
si::*link-list* fast-linking diagnostic, more robust segfault
trapping, and full pathname fixes to the unradomize/re-exec
mechanism.
Greetings! The GCL team is happy to announce the release of version
2.6.11, the latest achievement in the 'stable' (as opposed to
'development') series. Please see http://www.gnu.org/software/gcl for
downloading information.
This release features better floating point precision processing,
support for cygwin, arm64, ppc64, ppc64le and solaris, more robust
SGC, exact vararg initialization, SIGFPE trapping via
#'si::break-on-floating-point-exceptions, x86 support for libopcode
instruction disassembly via #'si::disassemble-instruction, simplified
build dependencies, faster gcd, lcm, typep, coerce, 1+-, predicates,
pcl cache, SGC, fast-linking, closure calls and compiled bignums,
compilation of top level closure forms by default, memoization of
array type handling, support for machines handling long and object
returns in different registers, a much smaller cmpinclude.h, prelink
support, default Debian compiler flag support (especially
stack-guard), new linking and fast-linking diagnostic functions, some
selinux support via READ_IMPLIES_EXEC personality, and many
miscellaneous bug fixes and support for bugs in various external
systems.
Greetings! The GCL team is happy to announce the release of version
2.6.10, the latest achievement in the 'stable' (as opposed to
'development') series. Please see http://www.gnu.org/software/gcl for
downloading information.
This release addresses many of the issues introduced by the 2.6.9
developments, in addition to using gmp for random number generation,
adding fast immediate fixnum operations for most functions, and
accelerating garbage collection and hash table lookups.
GCL has moved to the git version control system. The 2.6.8 and 2.6.9
branches and tags are identical in cvs and git. Henceforward,
modifications will be made to git only. As of the present writing, git
contains a merge of experimental into master, and a port of most 2.6.x
improvements into master. This will form the basis of a 2.7.0 release
sometime in the future.
For those unfamiliar with git:
git clone git://git.sv.gnu.org/gcl.git
cd gcl
git checkout master, or git checkout Version_2_6_9, etc.
cd gcl
./configure && make
git can of course provide much more. I'm currently using Egg, an emacs
interface to git, with increasing success. Merging, logging, bisecting,
branching, and uploading appear much simpler. I recommend this tool to
would-be gcl contributors.
Greetings! The GCL team is happy to announce a pair of stable releases.
The 2.6.8 release represents several years worth of fixes and
enhancements, notably a great extension of GCL's native object file
relocation support.
2.6.9 is released concurrently as it contains a number of structural
improvements which, while passing all our tests, may cause issues for
some people. These improvements are chiefly a two word cons, immediate
fixnum support, word sized fixnums (64bits on 64bit machines), and a
'dynamic maxpage' implementation, which removes all compile time limits
to the heap size and auxiliary typing and marking tables. 2.6.9 will
attempt to manage the heap given the apparent constraints of the running
system, with the goal of eliminating allocation failures and handling
out of memory conditions in advance with a modicum of grace. As this
involves a runtime startup probe of brk, which has varying degrees of
significance in different operating systems, one might still experience
overallocation of memory (notably on hurd). In such cases,
gcl -eval '(si::set-log-maxpage-bound x)'
will limit the heap to 2^x bytes as a workaround.
All gcl, maxima, acl2, axiom, and hol88 builds and self tests pass for
the following platforms, with noted exceptions(*) itemized below:
debian: amd64 armel armhf hurd-i386 i386 ia64 kfreebsd-amd64
kfreebsd-i386 mips mipsel powerpc s390 s390x sparc
debian-ports: alpha hppa m68k powerpcspe ppc64 sh4 sparc64 x32
macosx, windows
*exceptions
1) all systems use native object relocation by default now but ia64 and
ppc64, which use dlopen. Thus there is a typical limit of 1024 files
that can be loaded, and the current acl2 build exceeds this limit. As
this bound is runtime configurable with root access, this is not an
insurmountable obstacle.
2) kfreebsd-i386 systems do not appear to allow one to brk more than
500M of memory, and the acl2 certification process needs 1Gb. A
solution here is as yet unknown but may be forthcoming shortly.
3) windows builds have been performed on win95. There is an as yet
unidentified runtime error running the 2.6.9 images on win7. More
information here will be forthcoming shortly.
Windows installers can be found at ftp://ftp.gnu.org/gnu/gcl.
4) macosx builds have been tested on snow leopard. More recent versions
appear to have a linker bug which prevents configure from detecting the
provided profil() routine. A workaround here should be to
echo "#undef NO_PROFILE >>h/config.h"
after configure and before make.
Greetings! The GCL team is happy to announce the release of version
2.6.6, the latest achievement in the 'stable' (as opposed to
'development') series. Please see http://www.gnu.org/software/gcl for
downloading information.
This release is a minor modification of 2.6.5,
incorporating the known bug fixes that had accumulated on the GCL
errata page together with a few other fixes required for building axiom
on Windows. From the changelog:
gcl (2.6.6-1) unstable; urgency=high
* New upstream release
* Allow .data section to be first in executable, as on solaris. Also
allow for new bfd section size semantics
* Don't try to write map file when not using GNU ld. Also allow
compile-file to process pathnames with whitespace on Windows
* Fix corner case fixnum arithmetic on 64bit machines
* Rework gmp_wrappers semantics for older gcc
* Explicitly mprotect loaded code pages PROT_EXEC on x86 Linux, as FC3
now requires it.
* lisp-implementation-version is GCL
* Reader extension patch allowing for foo::(bar foobar) semantics
* a shell script variable fix in "unixport/makefile" for MSYS
* _MINGW32_ malloc initialization fix in "o/alloc.c"
* Windows file/directory fixes in "o/unixfsys.c"
* MinGW32 -march in configure - removes deprecation warnings
* MinGW32 directory fix - "o/mingfile.c".
* Allow for sysconf to determine clock granularity at compile time to
fix time errors on the Itanium
* Disable SGC on macosx until the sgc/save problem can be fixed.
* Fix fixnum print bug on 64bit
* Fix nil types in room report
* 64bit fixes to fixnum_add and fixnum_sub
* Fix Mac SGC/save bug, at least in part
For the latest information, capabilities, and status of GCL stable,
please see http://www.gnu.org/software/gcl/RELEASE-2.6.2.html.
The GCL team is happy to announce the release of version 2.6.5, the
latest achievement in the 'stable' series. This release is a minor
modification to version 2.6.4. From the changelog:
* New gmp_wrappers.{c,h} files that prevent all GBC within gmp,
obviating the need for gmp patches and a local gmp
configure. FIXME -- extend to all gmp functions in a systematic
way, and write header information for future use in the
compiler, making sure that plt.c carries the needed gmp symbols
at this point
* dynsysgmp on by default; configure backs off to local gmp
configure and build automatically if needed either because gmp
not present or patched symbols are needed
* autodetect and set the _start symbol when using gprof
* Fix (setf (get ...) ...) return bug when interpreted
* Fix overwrite end of sgc_type_map bug
* Versioned depends on binutils-dev manually installed by Debian build process
As an example of the recent performance enhancements in GCL, Matt Kaufmann, one
of the ACL2 co-authors, reports significantly improved timings for the ACL2
regression suite. When ACL2 2.8 was released, GCL was in pre-release mode for
2.6.2, and provided the following regression suite timings as reported on
http://www.cs.utexas.edu/users/moore/acl2/v2-8/installation.html:
* Gnu Common Lisp (GCL), Version 2.6.1-34 (unreleased):
11005.520u 99.530s 3:10:45.33 97.0% 0+0k 0+0io 9555249pf+0w
* Allegro Common Lisp, Version 6.2:
12289.340u 134.340s 3:35:22.82 96.1% 0+0k 0+0io 9540266pf+0w
* CMU Common Lisp (CMUCL), Version 18e:
11303.590u 246.730s 3:29:11.40 92.0% 0+0k 0+0io 8906120pf+0w
* Lispworks Common Lisp, Version 4.2.7:
[No time available, but at one time was tested at about 72% slower than GCL.]
CLISP, Version 2.33:
52591u 611s 15:31 98%
* Times above for CLISP are approximate [you don't want to know...]
Since version 2.6.3, a reasonably comparable calculation on the same machine
takes about 7800 user seconds (on a slightly updated ACL2).
This is a significant upgrade from 2.5.3 in many respects. Please read the release notes at
http://www.gnu.org/software/gcl/RELEASE-2.6.2.html
and the errata page at
http://www.gnu.org/software/gcl/ERRATA-2.6.2.html.
A few highlights:
* The development of a 'lisp compiler torture tester' by GCL developer Paul Dietz which repeatedly compiles randomly generated forms of specifiable length to test the compiler for correctness.
* The application of several significant corrections to the GCL lisp compiler to remove every known instance of miscompilation uncovered by this tester. To our knowledge, GCL is alone with CLISP in passing this torture test for runs of effectively indefinite length.
* Major performance improvements were applied to the lisp compiler to enable it to complete random tests of great length in a reasonable amount of time.
* Corrections to the GCL core files to enable very large image sizes in 64 bits, in which more than a billion cons cells can be allocated. Current 64bit options include amd64, ia64, and alpha running most flavors of GNU/Linux.
* Corrections to the heap scaling behavior of the garbage collector, resulting in significant performance gains in many instances.
* Support for the latest gcc and binutils versions on all platforms but mingw
* The elimination of many instances of unnecessary internal garbage generation bringing the associated performance gains
* Native support for execstack protected linux kernels, such as on Fedora core systems
* Native support for FreeBSD, OpenBSD, and MacOSX
* Static function pointer support to stabilize dynamic library usage on Itanium systems
* Transparent readline initialization
* Support for profiling via gprof
* Automatic disabling of SGC (stratified garbage collection) if the image is executed on a kernel not supporting fault address recovery
* Remove a memory leak associated with heavy bignum usage via the introduction of SGC contiguous pages
* Several significant internal bug fixes, epecially in the mingw port.
* Alter the build process to perform a full self compile with full function proclamation at build time.
* GCL now compiles Axiom from scratch and carries it to all supported platforms with the current exception of mingw
* GCL's ANSI build now in use for its first end-user application -- maxima (current cvs)
* New 64bit platform support -- amd64, with full native object relocation
This is a minor bugfix release, primarily reintroducing object_to_float and object_to_double required in general C interfacing, and in Axiom in particular. Also removed references to the obsolete multiply-bignum-stacks from the documentation.