Release Notes for Clozure CL 1.6
Clozure CL 1.6 runs on the following platforms:
- Mac OS X 10.5 and later (x86, x86-64, ppc32, ppc64)
- Linux (x86, x86-64, ppc32, ppc64, armv7l)
- FreeBSD 6.x and later (x86, x86-64)
- Solaris (x86, x86-64)
- Microsoft Windows XP and later (x86, x86-64)
The preferred way to get Clozure CL is via Subversion. For example, to get CCL for Mac OS X on x86, one would run the following command from a shell prompt:
$ svn co http://svn.clozure.com/publicsvn/openmcl/release/1.6/darwinx86/ccl
Versions for other platforms are available by changing the darwinx86 to one of linuxx86, freebsdx86, solarisx86, windows, darwinppc, linuxppc, or linuxarm.
Both 32 bit and 64 bit binaries are included with all versions (except for ARM, which is 32-bit only).
Please use the Trac instance at http://trac.clozure.com/ccl to review existing bug reports and to submit new ones.
The 32-bit Windows lisp still doesn't run on 64-bit Windows.
Setting up a build environment for the 64-bit Windows lisp is more trouble than it ought to be. The WindowsNotes wiki topic outlines how to do it, but newer versions of the mingw-ww64 toolchain appear to have incompatibly changed, and can no longer build the lisp kernel. The win64 toolchain in ftp://ftp.clozure.com/pub/mingw-w64-bin_i686-cygwin-1.5.25-15_4.4.1a.tar.bz2 is known to work.
Several serious bugs in the Windows ports have been fixed since the 1.5 release.
The distributed binaries were built on a Debian 5.0 system. Most distributions should be able to run this binary without any trouble. It's possible that on some (presumably very old) systems, you may get a message like this:
lx86cl: /lib/i686/cmov/libc.so.6: version `GLIBC_2.11' not found (required by lx86cl)
To solve this problem, recompile the lisp kernel binary on your own system:
$ cd ccl/lisp-kernel/linuxx8632 # or linuxx8664, as appropriate $ make
Some (usually larger) PowerPC-based systems use a page size of 64K. The lisp won't run on those systems; it currently expects a page size of 4K.
The ARM port is brand new. It is probably fair to call it beta quality; it can (usually) compile itself, but there are still some bugs.
The port targets the "ARMv6t2" architecture and later. It is often not immediately apparent which ARM cores implement which architecture revision. The chart at http://en.wikipedia.org/wiki/ARM_architecture#ARM_cores may help.
It's intended to run under an ARM Linux distribution that runs in little-endian mode ("armel"), supports the "embedded ABI" ("eabi", sometimes "gnueabi") and "soft-float" FP conventions (where C functions pass floating-point arguments and return floating-point results in general-purpose registers).
The lisp has primarily been run on a few Freescale i.MX515 machines running Ubuntu 9.04,9.10, and 10.04. (See https://www.genesi-usa.com/products, for example.) The Nokia N900 has also seen some use.
The FreeBSD binaries were built on a FreeBSD 8.1 system. If you are running 6.x or 7.x, you should be able recompile the lisp kernel on your own system and run the lisp without any further trouble:
$ cd ccl/lisp-kernel/freebsdx8632 # or freebsdx8664, as appropriate $ make
New exported symbols
The following symbols are now exported from the CCL package:
- get-gc-notification-threshold, set-gc-notification-threshold
- add-feature, remove-feature
The function ccl:delete-directory deletes a directory and all its contents. (Note: versions of cl-fad prior to version 0.6.4 define a conflicting ccl:delete-directory; see ticket:771.)
A new pre-gc notification mechanism is available on the x86 and x86-64 ports. When the heap is a configurable threshold value away from being full enough for a gc, the function of no arguments in ccl:*pending-gc-notification-hook* will be called.
The function ccl:wait-for-signal takes two arguments: a signal number, and a duration in seconds. It will wait until the signal is received, or until the specified number of seconds has passed. If the signal number is one that is used by the lisp internally, an error will be signaled. An error will always be signaled on Windows.
The function ccl:object-direct-size returns the size of a heap-allocated lisp object in bytes, including any headers and alignment overhead. If you squint, it's sort of like C's sizeof operator.
The functions ccl:add-feature and ccl:remove-feature operate on *features* in a thread-safe way.
Background Listener Processes
(gui:background-process-run-function name thunk)
executes the 0-argument function THUNK in a lisp process named NAME with the standard stream variables effectively bound to a stream which references a listener window (with associated Hemlock buffer and infrastructure.) The window is invisible (it's actually created on demand) unless/until an I/O operation is performed on this stream.
When the process is runing, the window's close button (and command-W/the Close menu item) hides the window but doesn't deallocate its resources or kill the process; subsequent I/O operations to the stream cause the window to become visible again.
If a background listener window is visible when the associated process exits, it stays visible (so that its contents can be saved via "Save To..." or otherwise manipulated).
When the window is visible and the process is in a break loop, it behaves like other listener windows/processes: the backtrace and restarts dialogs can be used, and the listener window/process can be used to evaluate selections from editor windows when the listener window is the frontmost listener window.
Other IDE Changes
If the shift key is held down when the IDE application is launched, no init files (neither ccl-init.lisp nor ccl-ide-init.lisp) will be loaded.
The bundled ASDF is now version 2.010.
cl:load uses a primitive built-in http client so that it can load files from a url, e.g., (load " http://beta.quicklisp.org/quicklisp.lisp")
The defstruct macro does more careful type checking.
The way floating-point exceptions are detected in foreign code has changed. (r13952)
On Darwin, ccl:open-shared-library now loads shared libraries in the initial thread by default. See r14155.
The Objective-C bridge allows the user to define Objective-C classes that include lisp slots. The bridge is usually able to arrange for these slots to be removed at #/dealloc time. Sometimes classes will need override the new method objc:remove-lisp-slots; user-defined #/dealloc methods should call objc:remove-lisp-slots as well as calling the next method, after doing class-specific cleanup. See r14202.
Some recent Linux kernels distributed by Ubuntu (at least), including 2.6.32-24.41 and probably others, appear to contain a bug that causes mmap to return an unmapped address in certain cases where the MAP_GROWSDOWN mmap option is used (see ticket:731). This made ccl crash on startup. It turns out that MAP_GROWSDOWN doesn't do what we thought it did in any case, so we no longer use it, and these crashes no longer happen.
Many other minor bug fixes.
Fee-based support for Clozure CL is available from Clozure Associates on a per-incident or contract basis. Please send mail to business@… for more information.