========================== 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-tableis present. - A cross-referencing facility has been added to the compiler,
providing
WHO-CALLS,WHO-BINDS,WHO-REFERENCES,WHO-SETSinformation. See the corresponding chapter of the User's Manual for more information. - Bindings to the POSIX user and group database access functions
(
getpwuidet al) have been added to theUNIXpackage. - 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-SYNTAXandEXT:VALID-FUNCTION-NAME-P. - Access to the hardware cycle counters on Pentium and UltraSPARC
processors has been added, and is reported by the
TIMEmacro. - On Linux, it is possible to read and write files larger than 2GiB
(Large File Support implementation) using the low-level functions
in the
UNIXpackage. 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-MACROLETsignals an error when an attempt is made to bind a special variable or a constant- the function
COMPILEno longer coalesces constants, as required by the specification (however,COMPILE-FILEcontinues to do so) WITH-OUTPUT-TO-STRINGaccepts the:external-formatkeyword argument- the function
WRITE-STRINGaccepts aNILvalue for the :end argument - the function
CHANGE-CLASSnow accepts initargs - loops of the form
(LOOP FOR I BY (INCF X) FROM ...)now work - in loop forms, the
INITIALLY,FINALLYandDOkeywords must be followed by a compound form - in the loop macro,
PRESENT-SYMBOLnow means both internal and external symbols of a package - the class precedence list of
NULLhas symbol before list - the function
FLOAT-RADIXsignals 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
GENTEMPfunction no longer accepts arguments of type symbol - the function
SHIFTFsupports 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
ECASEandCCASEmacros are allowed to useTandOTHERWISEas 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-PATHNAMEis a physical pathname, return it instead of signalling an error. - the function
DEFAULT-DIRECTORYreturns 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~:Tis used inside~<..~>(without the colon modifier on the closing syntax). - the
SUBTYPEPfunction is more intelligent when dealing with certain hairy types (such as those based onSATISFIES). - the optional environment argument to the functions
TYPEP,SUBTYPEPand friends are now accepted (but ignored). - system classes
FILE-STREAMandSTRING-STREAMhave been added.
- Numerous bugfixes:
READ-BYTEon 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 ??
EXPTwas not correctly handling a zero exponentPROGVwas not handling special variables correctly.MULTIPLE-VALUE-SETQandPSETQwere not handling symbol macros correctly.- index calculations for operations bitvectors of sizes near the
ARRAY-DIMENSION-LIMITcould 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-COMBINATIONspecial form work correctly - executing a defclass form with a metaclass of
STRUCTURE-CLASSwould 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-BLOCKwith 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-BYTESfunction 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
REMOVEwas not correctly handling all possible combinations of the:start,:endand:fromoptions. - the function
COMPILE-FILE-PATHNAMEcomputes 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-STREAMandMAKE-ECHO-STREAMcheck that their argument is an input or output stream, as appropriate STREAM-READ-SEQUENCEandSTREAM-WRITE-SEQUENCEwere 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
DOLISTiteration variable are now honoured when evaluating theDOLISTresult form. - The argument evaluation order of
MAKE-STRINGin 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
-corecommandline option, theCMUCLLIBenvironment variable, the default/usr/local/lib/cmuclsearch 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-STATEaccepts an argument of type vector). - the function
PROFILE:REPORT-TIMEno 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)
DESCRIBEwill 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-VERSIONreturns more useful information than in the past, including the kernel version number. - the function
MAKE-DISPATCH-MACRO-CHARACTERwill 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-BOUNDPchecking 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-COMPILERandRANDOM-MT19937elements 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!
