========================== C M U C L 18 e =============================
The CMUCL project is pleased to announce the release of CMUCL 18e. 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 a metaobject protocol; 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 mostly in the public domain.
New in this release:
- Feature enhancements:
- Karatsuba multiplier added to give faster multiplication for big bignums.
- Better support for linking foreign libraries. You can now dump
cores with foreign libraries and reload this core and the
libraries, without having to reload code that uses those
libraries. Available if the feature
:linkage-table
is present. - A cross-referencing facility has been added to the compiler,
providing
WHO-CALLS
,WHO-BINDS
,WHO-REFERENCES
,WHO-SETS
information. See the corresponding chapter of the User's Manual for more information. - Bindings to the POSIX user and group database access functions
(
getpwuid
et al) have been added to theUNIX
package. - Support for Unix sockets and for binding to specific IP addresses has been added to the networking code.
- Support for generalized function names of the form
(<SYMBOL> ...)
has been added. SeeEXT:DEFINE-FUNCTION-NAME-SYNTAX
andEXT:VALID-FUNCTION-NAME-P
. - Access to the hardware cycle counters on Pentium and UltraSPARC
processors has been added, and is reported by the
TIME
macro. - On Linux, it is possible to read and write files larger than 2GiB
(Large File Support implementation) using the low-level functions
in the
UNIX
package. Use of ANSI CL functions to process such files may work, but the code base hasn't been audited for this. Full support for this requires a 2.4 or a 2.2 kernel with LFS patches.
- Numerous ANSI compliance fixes:
SYMBOL-MACROLET
signals an error when an attempt is made to bind a special variable or a constant- the function
COMPILE
no longer coalesces constants, as required by the specification (however,COMPILE-FILE
continues to do so) WITH-OUTPUT-TO-STRING
accepts the:external-format
keyword argument- the function
WRITE-STRING
accepts aNIL
value for the :end argument - the function
CHANGE-CLASS
now accepts initargs - loops of the form
(LOOP FOR I BY (INCF X) FROM ...)
now work - in loop forms, the
INITIALLY
,FINALLY
andDO
keywords must be followed by a compound form - in the loop macro,
PRESENT-SYMBOL
now means both internal and external symbols of a package - the class precedence list of
NULL
has symbol before list - the function
FLOAT-RADIX
signals an error if its argument is not a float - an error is signaled if the lambda keyword &rest is not followed by a variable
- the
GENTEMP
function no longer accepts arguments of type symbol - the function
SHIFTF
supports multiple values - compiler macros recognize calls of the form
(funcall foo args)
(coerce <rational> '(complex float))
now returns a(complex float)
rather than arational
- the
ECASE
andCCASE
macros are allowed to useT
andOTHERWISE
as regular keys, instead of as the otherwise clause. CMUCL prints a warning about this being poor style. - the type
(complex (eql 0))
is accepted now instead of generating an error. - the sequence functions check to make sure sequences are specified and that, if lengths are given, the result matches the given length.
- when the argument to
TRANSLATE-LOGICAL-PATHNAME
is a physical pathname, return it instead of signalling an error. - the function
DEFAULT-DIRECTORY
returns a pathname with an explicit Unix host, instead of leaving it unspecified. - logical pathnames are now externalizable
- bad directives in
FORMAT-LOGICAL-BLOCK
: an error is now signalled if~W
,~_
,~<...~:>
,~I
, or~:T
is used inside~<..~>
(without the colon modifier on the closing syntax). - the
SUBTYPEP
function is more intelligent when dealing with certain hairy types (such as those based onSATISFIES
). - the optional environment argument to the functions
TYPEP
,SUBTYPEP
and friends are now accepted (but ignored). - system classes
FILE-STREAM
andSTRING-STREAM
have been added.
- Numerous bugfixes:
READ-BYTE
on certain types of multi-byte elements was incorrect- fix the treatment of colon package delimiters for the ~/ formatting directive
- correction to CLX's handling of FamilyLocal? authorization cookies (as created by versions of ssh after 3.4)
- fix to CLX handling of :any event-spec
- fix to boa-constructors ??
EXPT
was not correctly handling a zero exponentPROGV
was not handling special variables correctly.MULTIPLE-VALUE-SETQ
andPSETQ
were not handling symbol macros correctly.- index calculations for operations bitvectors of sizes near the
ARRAY-DIMENSION-LIMIT
could overflow - redefining a class with a changed class precedence list didn't update the CMUCL type system
- generated CLOS getter/setter/boundp generic functions are now declared correctly, to eliminate bogus undefined function warnings from the compiler
- method combination options for the long form of the
DEFINE-METHOD-COMBINATION
special form work correctly - executing a defclass form with a metaclass of
STRUCTURE-CLASS
would result in the generation of recursive print-object methods, so that printing such instances would loop - dividing a ratio by zero returned 1/0 instead of signaling an error
PPRINT-LOGICAL-BLOCK
with a numeric prefix no longer causes the system to crash- byte-compiled calls to two-argument
STRING<
andSTRING>
returned incorrect results - the function {{{READ-SEQUENCE}} returned incorrect results for
specialized arrays when the internal
READ-N-BYTES
function read short - when a sequence type specifies a length, CMUCL checks that the length of sequence arguments match the length of the sequence type
- the function
REMOVE
was not correctly handling all possible combinations of the:start
,:end
and:from
options. - the function
COMPILE-FILE-PATHNAME
computes the output file name by merging the input file name and the supplied output file name - the functions
MAKE-BROADCAST-STREAM
,MAKE-TWO-WAY-STREAM
,MAKE-CONCATENATED-STREAM
andMAKE-ECHO-STREAM
check that their argument is an input or output stream, as appropriate STREAM-READ-SEQUENCE
andSTREAM-WRITE-SEQUENCE
were getting called with arguments in the wrong order.- numerous error conditions are signalled using a more specific condition type than a generic error
- many (all?) cases where the unused labels functions were causing a compiler assertion error.
- some cases where the compiler was incorrectly deriving the types of functions have been fixed.
- error reporting in many areas have been improved to be more specific and/or ANSI compliant.
- error detection of defclass options in line with ANSI requirements.
- the compiler now checks type declarations on array elements before believing them.
- Special declarations of the
DOLIST
iteration variable are now honoured when evaluating theDOLIST
result form. - The argument evaluation order of
MAKE-STRING
in compiled code has been fixed.
- Other changes:
- The default value for
EXT:*BYTES-CONSED-BETWEEN-GCS*
has been increased from 2000000 to 12000000, which should improve GC performance for many applications out of the box. Of course people are encouraged to tune the GC parameters to match their application requirements (e.g. interactive response times), and their hardware environment. - The sparc port has experimental support for native 64-bit
integers
(unsigned-byte 64)
and(signed-byte 64)
on sparc v9 (64-bit) architectures. Enabled if the feature {{[:sparc-v8plus}}} is present (you will need to rebuild CMUCL). - The CMUCL release tarballs are now relocatable. The lisp image
(in the lisp.core file) is now searched for relative to the
lisp runtime. The previous search mechanisms still take
precedence: the
-core
commandline option, theCMUCLLIB
environment variable, the default/usr/local/lib/cmucl
search path. - Messages from the compiler are now preceded by a semicolon, for better interaction with environments with syntax highlighting.
- An improved initializer for random state is available (function
KERNEL:INIT-RANDOM-STATE
accepts an argument of type vector). - the function
PROFILE:REPORT-TIME
no longer prints out a long list of functions that were not profiled. The cutoff is user-configurable by setting the new variablePROFILE::*NO-CALLS-LIMIT*
. - reinstated the ability to build small runtime images (excluding the compiler)
DESCRIBE
will print a note if a symbol names a type-specifier- numeric types with empty ranges are accepted silently (instead of signalling an error), and treated as the empty type.
- on Linux, the function
SOFTWARE-VERSION
returns more useful information than in the past, including the kernel version number. - the function
MAKE-DISPATCH-MACRO-CHARACTER
will quietly override existing definitions, instead of signalling an error if a previous binding for a macro character existed. - a number of stale symbols have been deleted from CMUCL images
- The default value for
- Numerous improvements to the PCL implementation of CLOS:
- some unused code has been deleted
- error checking of CLOS functions has been significantly improved
- the hash function for PCL instances has been improved
- superfluous
SLOT-BOUNDP
checking for structure-classes has been removed - the preallocation of caches for generic functions has been removed, since benchmarking indicated that this doesn't provide a noticeable performance increase
- Improvements to Hemlock, the Emacs-like editor:
- a dynamic-abbrev facility has been added (bound to M-/)
- support for C-w (copy work) during incremental search
- Changes to rebuilding procedure:
- the search-list "modules:" tracks the "library:" search-list, instead of being set to whatever "library:subsystems/" is at startup.
- Deprecated features:
- the
HASH-NEW
,NEW-COMPILER
andRANDOM-MT19937
elements of the*FEATURES*
list are deprecated. Starting from the next release of CMUCL, the corresponding code will be included in default CMUCL builds.
- the
This release is not binary compatible with code compiled using CMUCL 18d; you will need to recompile FASL files.
See <URL:http://www.cons.org/cmucl/> for download information, guidelines on reporting bugs, and mailing list details.
We hope you enjoy using this release of CMUCL!