========================== C M U C L 18 d =============================
March 11, 2002
The CMUCL project is pleased to announce the release of CMUCL 18d.
This is a major release which contains numerous enhancements and
bugfixes from the 18d release.
CMUCL is a free, high performance implementation of the Common Lisp
programming language which runs on most major Unix platforms. It
mainly conforms to the ANSI Common Lisp standard. CMUCL provides a
sophisticated native code compiler; a powerful foreign function
interface; an implementation of CLOS; the Common Lisp Object System;
which includes multimethods and user-defined method combinations; a
metaobject protocol based on AMOP; a source-level debugger and code
profiler; and an Emacs-like editor implemented in Common Lisp. CMUCL
is maintained by a team of volunteers collaborating over the Internet,
and is in the public domain.
Features new in this release:
* Feature enhancements:
- a new platform, OpenBSD/x86 is supported
- significant performance enhancements: code compiled with this
release is approximately 10% faster than with 18c
- Logical Pathname Translations can be auto-loaded
- The presence of gray streams support is now clearly announced in the
herald, and via the :gray-streams feature.
- Support for READ- and WRITE-SEQUENCE on Gray streams, via
STREAM-READ-SEQUENCE and STREAM-WRITE-SEQUENCE
- New :class keyword option for OPEN, which lets it return Gray streams
classes wrapped around lisp-streams.
- Facility for addition of clean-up hooks, that are called
before CMUCL is exited via EXT:QUIT
- Added hooks that support the addition of advanced command processing
capabilities for user input (similar to functionality in ACL)
- support for hierarchical packages, as per ACL, signaled by the
:relative-package-names feature.
- the modules: pathname is initialized sensibly, to make REQUIRE work
correctly out of the box. For example, you can now say
(require :clx) to load the precompiled clx-library subsystem.
- Report class information when describing symbols that are class
names.
- Compilation of PCL-generated code is now silent by default. This can
be controlled by changing PCL::*COMPILE-LAMBDA-SILENT-P*.
- Further ongoing speed tuning to various numerical routines.
- LOAD-FOREIGN has added :verbose option that honors *LOAD-VERBOSE*
- Support larger FD_SETSIZE on FreeBSD
- Debugger short-cuts to invoke available restarts now behave more
predictably (all available restarts get a numeric command, and named
restarts get their name as a command, unless that is already taken,
i.e. as is indicated by the debugger display)
- Improvements to disassembly listings on x86 and SPARC:
o Sparc v9 instructions are longer so make the opcode column wider.
o Allow printing of integer registers to use the Sparc register names
instead of the Lisp names.
o Add support for printing various notes during disassembly:
o Assembler routines, foreign functions, and foreign constants
o The value of constants in the code header
o References to static symbols
o Notes about pseudo-atomic stuff
o Some hints on header-word types
- Sparc port supports 64-bit integers for parameters and return
values when calling foreign functions.
- Try to use branch prediction on the sparc port.
- Compiler understands the type of the function SIGNUM
- Loading of files given by logical pathnames without a type
will do a search for possible fasl files instead of just
FASL.
- Some optimizations to ALIEN-SAP to speed up alien access.
* Numerous ANSI compliance fixes:
- EVAL-WHEN behaviour should now be in line with ANSI spec
- PROCLAIM no longer has a compile-time effect, so many old uses of this
should use DECLAIM instead
- DEFMACRO no longer has compile-time effect only when at toplevel
- The interaction of structure-printing and print-object now matches
ANSI spec more closely
- Duplicate keyword arguments are now allowed in lambda-list
destructuring operators.
- READTABLE-CASE is now copied by COPY-READTABLE
- fixes to the precedence lists of several error conditions
- :CLTL2, :DRAFT-ANSI-CL, :X3J13 features removed
- Removed various CLtL1/CLtL2-only exports from the COMMON-LISP package
(COMPILER-MACROEXPAND, COMPILER-MACROEXPAND-1, DEFINE-SETF-METHOD,
GET-SETF-METHOD, GET-SETF-METHOD-MULTIPLE-VALUE, LOGICAL-PATHNAME-P,
SIMPLE-CONDITION-FORMAT-STRING, GENERIC-FLET, GENERIC-LABELS,
WITH-ADDED-METHODS, HASH-TABLE-WEAK-P)
- changes to logical pathname semantics
- LOAD and COMPILE-FILE accept :EXTERNAL-FORMAT as required by
ANSI, but ignore its value.
* Numerous bugfixes:
- fix for bogus warnings based on stale function type information for
redefined functions
- fix for printing of bit vectors (printer was incorrectly
respecting radix and base control vairables). Also bugfixes to
pretty printing of vectors
- Fix sxhash and equal hash tables for strings with fill-pointers
- read-sequence now works with byte-vectors and strings for
concatenated-streams
- Fix to handling of infinities in floating-point comparisons
- Fix bug in handling of certain complex numbers by log
- Fixed handling of floating point errors by handler-bind
- Fixed broken INVALID-METHOD-ERROR and added stricter checks in
standard method combination for the qualifiers on methods
- Fixed calling of NO-APPLICABLE-METHOD for GFs with no defined
methods
- Fixed missing coercion to class in argument processing of the
:METHOD-CLASS option to DEFGENERIC, which caused
GENERIC-FUNCTION-METHOD-CLASS to return the uncoerced class name,
breaking PCL and foreign code
- Various fixes to parameters and events in CLX
- COMPILE-FILE heeds logical-pathname translations for output file spec
- Rewrite of deftransform for concatenate, because the original
deftransform could cause the compiler to spend enormous (minutes!)
amounts of time trying to derive the type of the START variable.
- Allow only one docstring in relevant bodies, as processed by
SYSTEM:PARSE-BODY
- Several fixes to FORMAT: tilde dollarsign was not printing the
correct amount of padding; tilde slash was not accepting a
function name prefixed with two colons; ~F was not printing
complex and non-numeric arguments correctly
- Better error checking for arguments to FILE-LENGTH, FLOAT-RADIX
- vector-push-extend works for adjustable arrays of zero length
- Respect :order argument to short form of define-method-combination
- Fix destructuring in AND sub-clauses of WITH-CLAUSES for LOOP
- IGNORE declarations work for symbol-macros now
- Changed handling of static libraries as the first argument to
load-foreign, so that all archive members are loaded (like the user
expects).
- Stricter argument checking for ADJUST-ARRAY, which also doesn't
shrink non-adjustable vectors in place anymore.
- Removed forced defaulting of unsupplied :DIRECT-SUPERCLASSES and
:DIRECT-SLOTS arguments by ENSURE-CLASS-USING-CLASS, as required by
AMOP.
- Fixed shared-initialize for std-class to correctly interpret
unsupplied :direct-superclasses.
- CATCH now works correctly for immediate fixnum and character tags
- Fix some bugs in the ash deftransform.
- Fix a bug in printing logical pathnames with a file version
given.
- Fixed a sparc backend bug where offsets were generated that
couldn't fit in an offset field of an instruction.
- Complex division vop was wrong (only for Sparc with
:complex-vops *feature*)
- Stack clearing code is incorporated into the Sparc port
- The deprecated branch and taddcctv instructions shouldn't be
used at all on V9 builds.
* Other changes:
- Default for CMUCLLIB on Linux changed to match the default on other
Unices, namely /usr/local/lib/cmucl/lib/
- The DEFSYSTEM facility that was distributed as part of the
contrib archive (but not maintained by the CMUCL team) has
been removed from the source distribution. A more up to date
and maintained version is available from CLOCC, at
.
* Code cleanups:
- Changes to PCL (the CLOS implementation included with CMUCL)
to remove code for other Common Lisp implementations.
- The features propagate-float-type, propagate-fun-type, and
constrain-float-type are now the default and only behaviour. Remove
those features from your build scripts.
* Changes to rebuilding procedure:
- the directory src/bootfiles/18c contains a number of files
required to bootstrap compilation from the 18c release. See the
README in that directory for usage instructions.
- the :NO-CLX, :NO-HEMLOCK etc features which are used to
control subsystem compilation during the build phase are no
longer present in the final cores.
- Added new new target 'initial-map' that can make a 'lisp.nm' file
from whatever 'lisp' executable is in the "target:lisp/" directory
without depending on the rest of the source code being
available. Used when setting up a build directory and/or when
internals.h doesn't yet exist.
- Various minor improvements to the Makefiles
This release is not binary compatible with code compiled using CMUCL
18c; you will need to recompile FASL files.
See for download information,
guidelines on reporting bugs, and mailing list details.
We hope you enjoy using this release of CMUCL!