========================== C M U C L 19 a =============================
The CMUCL project is pleased to announce the release of CMUCL 19a. This is a major release which contains numerous enhancements and bugfixes from the 18e 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:
- Stack overflow checking added for FreeBSD/x86, Linux/x86 and
Solaris. Code that makes the control stack overflow (for
example due to unbounded recursion) will lead to a
STORAGE-ERRORbeing signaled, instead of making CMUCL crash. LISP:FIND-CLASSandLISP:CLASS-OFnow return CLOS classes. The symbolsLISP:STANDARD-CLASS,LISP:BUILT-IN-CLASS, andLISP:STRUCTURE-CLASSname CLOS classes. It is no longer necessary toSHADOWING-IMPORTthese from PCL when doing MOP programming, and it fixes some non-compliances as well.- Package locks: a package whose
EXT:PACKAGE-LOCKis enabled non-NILis protected against changes in its structure (list of exported symbols, use-list etc). Symbols in a package whoseEXT:PACKAGE-DEFINITION-LOCKis enabled are protected against redefinition. - Weak hash tables have been added for x86 systems.
- Local functions are now named
(FLET <name> ...)or(LABELS <name> ...). - Compiler checking control string and number of args to
FORMAT,ERRORandWARN. TRACEautomatically using encapsulation when function-end breakpoints cannot be used.INSPECTworking on CLOS instances.- Callbacks from foreign code to Lisp. Implemented for x86 and sparc.
- Functions like
GETHASHthat are used in the implementation ofTRACEcan now be traced. See alsoDEBUG:*TRACE-ENCAPSULATE-PACKAGE-NAMES*. - New facility for encapsulating functions,
FWRAPPERS; see also the CMUCL User Manual. TRACEandPROFILEhave been reimplemented using fwrappers, with the effect of tracing and profiling now working more nicely together.- When a profiled function is redefined, it is re-profiled.
- A basic implementation of simple-streams added. Some functionality may be missing.
UNIX:UNIX-LSEEKworking with files > 2G on BSDs.- Type declarations on local bindings of special variables no longer being ignored.
DISASSEMBLEdisassembling closure/funcallable instance functions.(SETF EXT:WEAK-POINTER-VALUE)has been added.- CMUCL no longer entering an infinite loop when dumping circular constant lists to fasl files.
COMPILE-FILE-PATHNAME'sBYTE-COMPILEkeyword arg defaulting to*BYTE-COMPILE-DEFAULT*likeCOMPILE-FILE.- Added VOPs for
CHAR=,CHAR<, andCHAR>when the second arg is a constant character. - Added missing VOPs for Sparc for array refs with a constant index.
- Lisp binary will also look at the
PATHenvvar to find out it's own location which is used to find other needed files. - Byte-compiled code being executed ca. 1/3 faster.
- Heap overflow checking for x86 and solaris with gencgc. When the heap is close to overflowing, a heap-overflow condition is signaled. If an overflow happens again while debugging the condition, the user is returned to top-level without warning. Use lisp::*reserved-heap-pages* to set the number of pages to reserve.
- C functions are displayed in backtraces now for x86/linux and sparc. Previously, it just said "Foreign function call land". (From Helmut Eller.)
- Source location recording is done better and handles macros including things defined by defclass, defvar, and defgeneric. From Helmut Eller.
- Modular arithmetic implemented for x86 and sparc. So
- Stack overflow checking added for FreeBSD/x86, Linux/x86 and
Solaris. Code that makes the control stack overflow (for
example due to unbounded recursion) will lead to a
(ldb (byte 32 0) (+ x y))
is a simple machine add instruction if x and y are (unsigned-byte 32).
- Numerous ANSI compliance fixes:
- Many bugs in CMUCL's type system detected by Paul Dietz' ANSI test suite have been fixed.
- Non-keyword keyword names in lambda lists are now accepted.
- Condition slot initialization fixed for the case that two
or more slots have the same
:INITARG. - Initforms are now evaluated once only during condition slot initialization.
USE-VALUE,STORE-VALUE,CONTINUEbehavior corrected in presence of multiple restarts having the same name.RESTART-CASE's interaction with local macros fixed.- Interaction of
COMPUTE-RESTARTSandRESTART-CASEfixed in presence of multiple restarts having the same name. - Condition slot readers/writers are generic functions.
&WHOLE,&REST,&BODYin macro lambda lists can be followed by destructuring patterns. The previous behavior of&BODYwhen followed by(<body> <declarations> <doc>)is available through the new lambda-list keywordEXT:&PARSE-BODY.ELTnow signals an error in safe code when used on lists with an out-of-bounds index.- Accessing arrays in compiled code with out-of-bounds indices
now signals a
TYPE-ERROR. DECLAREno longer being a special operator.DEFINE-CONDITIONaccepts slot option:DOCUMENTATION.- Behavior of
(... &KEY &ALLOW-OTHER-KEYS)fixed forDESTRUCTURING-BINDand macros. - Stricter checking of keyword argument list in CLOS methods.
&ENVIRONMENTvariable bound bound before other vars, regardless of where it appears in a lambda-list.VALUEStypes no longer accepting&KEYor&ALLOW-OTHER-KEYS.- THE conforming to ANSI.
SLOT-EXISTS-Pcan be used with conditions.REMOVE-METHODalways returning the generic function passed to it.Standard methods for STANDARD-OBJECT andSTRUCTURE-OBJECTdefined onMAKE-LOAD-FORM.- Compliant
MAKE-LOAD-FORM-SAVING-SLOTS. DEFSTRUCTrecording slot-names as specified by users.- Generic function call keyword argument checking according to ANSI 7.6.5.
CALL-NEXT-METHODwithout arguments being called with original arguments when method parameters are changed withSETQ.- When
CALL-NEXT-METHODis called with arguments, an error is signaled in safe code when the set of methods applicable toCALL-NEXT-METHOD's arguments is different from the set of methods applicable to the original method arguments. FIND-METHODsignaling an error when called with specializers not corresponding to the number of required arguments of the supplied generic function.TYPE-OFreturningKEYWORDfor keywords,STANDARD-CHARfor standard characters,BOOLEANforT,(INTEGER <N> <N>)for integersN, non-list types for functions, and CLOS classes for instances whose class doesn't have a proper name.- Class precedence list of
NULLnot havingSYMBOLbeforeLIST, precedence list ofSTANDARD-METHODnot havingMETHODbeforeSTANDARD-OBJECT. ADD-METHODreturning its first argument, the generic function.DEFCLASSredefining a class with the given name only if the name is the proper name of an existing class.KEYWORDpackage no longer having nickname "".COMMON-LISP-USERpackage no longer having nicknameUSER.COMMON-LISPpackage no longer having nicknameLISP;LISPandCOMMON-LISPare now separate packages.SLOT-VALUE,(SETF SLOT-VALUE),SLOT-BOUNDP,SLOT-MAKUNBOUNDreturning values specified by the standard whenSLOT-UNBOUNDorSLOT-MISSINGare called and return.NTHandNTHCDRaccepting bignums as first argument.- First arg of
CERRORmay be a function. - Lambda-lists of the form
(X . Y)inDESTRUCTURING-BINDand macros are now equivalent to(X &REST Y). LAST,BUTLAST,NBUTLASTaccepting bignum counts.WITH-OUTPUT-TO-STRINGaccepting:ELEMENT-TYPE.FIXNUMno longer naming a function.MAKE-STRING-OUTPUT-STREAMaccepts:ELEMENT-TYPE.- Numerous
LOOPfixes. - On FreeBSD, CLtS-required floating-point conditions are signaled.
- The minimum rehash-threshold is 0.1, and is enforced silently. This is to prevent overflows and divide-by-zero errors when creating a hash-table with a too-small rehash-threshold.
MACROLETnow accepts declarations, as prescribed by ANSI CL.MAKE-PATHNAMEsignals an error on invalid combinations (:ABSOLUTEor:WILD-INFERIORSfollowed by:BACKor:UP).PEEK-CHARskips whitespace based on the readtable instead of using hard-wired values.PEEK-CHARsignals an end-of-file error if necessary whenRECURSIVE-Pis true.FILE-LENGTHnow signals aTYPE-ERRORwhen the stream is not a stream associated with a file.- Floats are now printed and read accurately, preserving read/print consistency. (Was sometimes off by a bit in the least significant bit.)
- Printing of rationals should generate correct results now for
all cases of
*PRINT-BASE*and*PRINT-RADIX*. - Symbol printer should print better with unusual settings of
*PRINT-CASE*and friends. - Stream element-type can go up to 1024 bits.
- Numerous bugfixes:
NSET-EXCLUSIVE-ORreturns the same results asSET-EXCLUSIVE-ORwrt to duplicate elements.- Forms like
(MULTIPLE-VALUE-BIND 'LIST)no longer trapping an internal compiler error when compiled. PARSE-INTEGERsignalingPARSE-ERROR.- Compiler eliminating some type checks in safe code.
- Byte-compiler and -interpreter not handling
C:&MORE. - Some
TYPE-ERRORs being signaled with unbound slots, which made them undisplayable. - Structure predicates no longer signaling an error when applied to obsolete instances.
- A
DEFTRANSFORMfor array bounds checking had an off-by-1 error. - Compiler was not properly deriving the type of
FTRUNCATEin all cases. - Fixed error wherein certain uses of 2 arg
ATANcaused a compiler error on x86. - Compiler wrongly signaling a type error in
VOLATILE-INFO-LOOKUPorCOMPACT-INFO-LOOKUPfor hash values equal toMOST-POSITIVE-FIXNUM. FFLOORandFCEILINGreturn types sometimes being inferred as being the nil type.PARSE-TIMEaccepting GMT offsets with a leading plus sign.UNIX-MMAPnot accepting a null fd, preventing anonymous mappings.SIGPROFhaving the wrong value on GNU/Linux.- Wrong byte-code being generated for
(APPLY #'+ <X> <Y>)and similar cases. GCDsometimes returning a negative value.LCMsometimes returning a negative value, or signaling division-by-zero.FLOATsometimes returning a float of the wrong type.ROOMshould handle the large heaps now without overflowing internal counters or signaling type errors. Columns should line up better too.READ-SEQUENCEwas returning too soon when reading from files into simple-strings even though there were data available.READ-SEQUENCEwas returning the wrong value when reading into simple-strings and when the:STARTvalue was not zero.- CMUCL was computing the wrong value for some special functions when the argument was on the branch cut for the function.
MULTIPLE-VALUE-BINDaccepts&RESTand friends in the var list.- When constructing logical pathnames, all components will be automatically upcased. Needed for print/read consistency, and fixes an issue with ASDF and logical pathnames.
- Handle things like
[abc]in namestrings better to match Unix-style usage. ATANHwas incorrectly computing the value of 1+i*y.SOFTWARE-VERSIONwould hang on some Linux 2.6 kernels because it was waiting forever reading /proc files. Hopefully fixed for all kernels.- Reloading of shared libraries happened in the wrong order.
- Other changes:
CREATE-REQUEST-SERVERhas an additional:REUSE-ADDRESSkeyword argument.- Removed obsolete alias from
MAKE-VECTORtoMAKE-ARRAY - the signature of
*COMPILER-NOTIFICATION-FUNCTION*has changed; it now has an extra argument that describes the nature of the error or warning. - File versioning occurs when the version component is
:NEWEST, and Emacs style file versions are created: foo.bar.~N~, where the larger N is newer. foo.bar is the newest version. - Converting namestrings to pathnames now get a version component
of
NILinstead of:NEWEST. *DEFAULT-PATHNAME-DEFAULTS*has a version component of:UNSPECIFICinstead of:NEWESTso versioning is disabled by default to preserve current behavior. Set the version to:NEWESTto create versions.LDBbacktrace on x86.DYNAMIC-EXTENTsupport on x86 and sparc. Stack-allocation can be controlled by the setting ofEXT:*TRUST-DYNAMIC-EXTENT-DECLARATIONS*. See also the CMU User Manual. Be warned that all bets are off if a stack-allocated object or parts of it escape; CMUCL might crash or format your hard disk.- Generational GC (gencgc) available for Sparc/Solaris? on an experimental basis. Despite the name and feature, it is not conservative.
- Search in /usr/lib/cmucl for the lisp core file as well, to support x86/Linux
- The trap for floating-point underflow is turned off by default for all platforms now.
- A continuable error is signaled when defining a logical pathname host that has the same name as a search-list host.
- A better sxhash function for string is implemented on sparc. This is based on the one-at-a-time hash from http://burtleburtle.net/bob/hash/doobs.html.
- Numerous improvements to the PCL implementation of CLOS:
- Gerd's PCL has been added, which fixes numerous bugs and ANSI/ AMOP non-compliances, and adds various new optimizations (also see the CMU User Manual).
- PCL's class hierarchy has been changed to conform to AMOP, for
instance,
GENERIC-FUNCTIONis now a subclass ofSTANDARD-OBJECT. ENSURE-CLASS-USING-CLASS's argument list has been changed to conform to AMOP.COMPUTE-EFFECTIVE-SLOT-DEFINITIONnow takes a slot name as argument, for AMOP compliance.SUBTYPEPworks in presence of forward-referenced classes.- Accessing slots of specialized parameters in
(SETF SLOT-VALUE-USING-CLASS)methods works. DIRECT-SLOT-DEFINITION-CLASSandEFFECTIVE-SLOT-DEFINITION-CLASSAMOP compliant.ALLOCATE-INSTANCEworking with structures defined withDEFSTRUCT.- With
(DEFGENERIC FOO (&REST X &KEY))(DEFMETHOD FOO (&REST X) X),(FOO 1)now signals an error. - Methods with
&OPTIONALarguments detecting too many args. DEFMETHODandDEFGENERICdetecting doubled lambda variables.DEFGENERIC:ARGUMENT-PRECEDENCE-ORDERoption checking.SLOT-VALUE,(SETF SLOT-VALUE),SLOT-BOUNDPworking with conditions.(SETF SLOT-VALUE)working on read-only structure slots like in other implementations.- The declaration identifiers
SLOTS,AUTO-COMPILE,NOT-AUTO-COMPILEhave been moved fromPCLtoEXT. - Support for inlining methods in effective methods; see the CMU User Manual.
- Wrong results could be returned from generic functions when all methods returned constant values, and some methods were qualified, or the generic function didn't use the standard method combination.
- For standard method combination and method combinations defined
with the short form of
DEFINE-METHOD-COMBINATION:If there are no applicable primary methods when a generic function is called, the generic functionPCL:NO-PRIMARY-METHODis called. The default method of this generic function signals a continuable error of typePCL:NO-PRIMARY-METHOD-ERROR. - Effective methods are no longer precomputed at method load
time, if the generic function has more than
PCL:*MAX-EMF-PRECOMPUTATION-METHODS*methods (default 100). - The loading of methods with invalid qualifiers no longer signals an error, for standard's conformance. Instead, a warning is printed at method load time. An error is signaled if the generic function is called with arguments such that the method is used.
- Redefining a generic function with a different method combination now recomputes effective methods.
- Slot access and gf-call optimizations are no longer performed for method parameters being assigned to in a method body, because we can't tell what type of object the method parameter actually contains.
- Improvements to Hemlock, the Emacs-like editor:
- Changes to rebuilding procedure:
- When rebuilding CMUCL,
*FEATURES*do not need to be set by hand. As files are loaded, the appropriate*FEATURES*are set so that the resulting build has the same set of*features*. There should also be fewer warnings aboutinternals.hchanging, since that now just contains things inSYS:*RUNTIME-FEATURES*. UseSYS:REGISTER-LISP-FEATUREandSYS:REGISTER-LISP-RUNTIME-FEATUREto set*FEATURES*andSYS:*RUNTIME-FEATURES*, respectively. - Pierre Mai's build-tools have been incorporated. The scripts are in the src/tools directory. These are slightly modified versions of his scripts. Should make building CMUCL easier.
- When rebuilding CMUCL,
- Deprecated features:
EXT:ENCAPSULATEand associated functions; use fwrappers instead.- The sparc port with the Cheney stop-and-copy garbage collector will no longer be supported after this release. The supported GC will be gencgc.
- The sparc port will only be supported on Ultrasparc machines (Sparc V9).
This release is not binary compatible with code compiled using CMUCL 18e; you will need to recompile FASL files.
See 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!
