========================== 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-CLASSand- LISP:CLASS-OFnow return CLOS classes. The symbols- LISP:STANDARD-CLASS,- LISP:BUILT-IN-CLASS, and- LISP:STRUCTURE-CLASSname CLOS classes. It is no longer necessary to- SHADOWING-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.
- TRACEand- PROFILEhave 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's- BYTE-COMPILEkeyword arg defaulting to- *BYTE-COMPILE-DEFAULT*like- COMPILE-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 keyword- EXT:&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 and- STRUCTURE-OBJECTdefined on- MAKE-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 with- SETQ.
- 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-OFreturning- KEYWORDfor keywords,- STANDARD-CHARfor standard characters,- BOOLEANfor- T,- (INTEGER <N> <N>)for integers- N, 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 nickname- USER.
- COMMON-LISPpackage no longer having nickname- LISP;- LISPand- COMMON-LISPare now separate packages.
- SLOT-VALUE,- (SETF SLOT-VALUE),- SLOT-BOUNDP,- SLOT-MAKUNBOUNDreturning values specified by the standard when- SLOT-UNBOUNDor- SLOT-MISSINGare called and return.
- NTHand- NTHCDRaccepting 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 when- RECURSIVE-Pis true.
- FILE-LENGTHnow signals a- TYPE-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 as- SET-EXCLUSIVE-ORwrt to duplicate elements.
- Forms like (MULTIPLE-VALUE-BIND 'LIST)no longer trapping an internal compiler error when compiled.
- PARSE-INTEGERsignaling- PARSE-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.
- FFLOORand- FCEILINGreturn 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 of- EXT:*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-CLASSand- EFFECTIVE-SLOT-DEFINITION-CLASSAMOP compliant.
- ALLOCATE-INSTANCEworking with structures defined with- DEFSTRUCT.
- With (DEFGENERIC FOO (&REST X &KEY))(DEFMETHOD FOO (&REST X) X),(FOO 1)now signals an error.
- Methods with &OPTIONALarguments detecting too many args.
- DEFMETHODand- DEFGENERICdetecting 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!

