========================== 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-ERROR
being signaled, instead of making CMUCL crash. LISP:FIND-CLASS
andLISP:CLASS-OF
now return CLOS classes. The symbolsLISP:STANDARD-CLASS
,LISP:BUILT-IN-CLASS
, andLISP:STRUCTURE-CLASS
name CLOS classes. It is no longer necessary toSHADOWING-IMPORT
these from PCL when doing MOP programming, and it fixes some non-compliances as well.- Package locks: a package whose
EXT:PACKAGE-LOCK
is enabled non-NIL
is protected against changes in its structure (list of exported symbols, use-list etc). Symbols in a package whoseEXT:PACKAGE-DEFINITION-LOCK
is 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
,ERROR
andWARN
. TRACE
automatically using encapsulation when function-end breakpoints cannot be used.INSPECT
working on CLOS instances.- Callbacks from foreign code to Lisp. Implemented for x86 and sparc.
- Functions like
GETHASH
that are used in the implementation ofTRACE
can now be traced. See alsoDEBUG:*TRACE-ENCAPSULATE-PACKAGE-NAMES*
. - New facility for encapsulating functions,
FWRAPPERS
; see also the CMUCL User Manual. TRACE
andPROFILE
have 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-LSEEK
working with files > 2G on BSDs.- Type declarations on local bindings of special variables no longer being ignored.
DISASSEMBLE
disassembling 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-COMPILE
keyword 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
PATH
envvar 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
,CONTINUE
behavior corrected in presence of multiple restarts having the same name.RESTART-CASE
's interaction with local macros fixed.- Interaction of
COMPUTE-RESTARTS
andRESTART-CASE
fixed in presence of multiple restarts having the same name. - Condition slot readers/writers are generic functions.
&WHOLE
,&REST
,&BODY
in macro lambda lists can be followed by destructuring patterns. The previous behavior of&BODY
when followed by(<body> <declarations> <doc>)
is available through the new lambda-list keywordEXT:&PARSE-BODY
.ELT
now 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
. DECLARE
no longer being a special operator.DEFINE-CONDITION
accepts slot option:DOCUMENTATION
.- Behavior of
(... &KEY &ALLOW-OTHER-KEYS)
fixed forDESTRUCTURING-BIND
and macros. - Stricter checking of keyword argument list in CLOS methods.
&ENVIRONMENT
variable bound bound before other vars, regardless of where it appears in a lambda-list.VALUES
types no longer accepting&KEY
or&ALLOW-OTHER-KEYS
.- THE conforming to ANSI.
SLOT-EXISTS-P
can be used with conditions.REMOVE-METHOD
always returning the generic function passed to it.S
tandard methods for STANDARD-OBJECT andSTRUCTURE-OBJECT
defined onMAKE-LOAD-FORM
.- Compliant
MAKE-LOAD-FORM-SAVING-SLOTS
. DEFSTRUCT
recording slot-names as specified by users.- Generic function call keyword argument checking according to ANSI 7.6.5.
CALL-NEXT-METHOD
without arguments being called with original arguments when method parameters are changed withSETQ
.- When
CALL-NEXT-METHOD
is 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-METHOD
signaling an error when called with specializers not corresponding to the number of required arguments of the supplied generic function.TYPE-OF
returningKEYWORD
for keywords,STANDARD-CHAR
for standard characters,BOOLEAN
forT
,(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
NULL
not havingSYMBOL
beforeLIST
, precedence list ofSTANDARD-METHOD
not havingMETHOD
beforeSTANDARD-OBJECT
. ADD-METHOD
returning its first argument, the generic function.DEFCLASS
redefining a class with the given name only if the name is the proper name of an existing class.KEYWORD
package no longer having nickname "".COMMON-LISP-USER
package no longer having nicknameUSER
.COMMON-LISP
package no longer having nicknameLISP
;LISP
andCOMMON-LISP
are now separate packages.SLOT-VALUE
,(SETF SLOT-VALUE)
,SLOT-BOUNDP
,SLOT-MAKUNBOUND
returning values specified by the standard whenSLOT-UNBOUND
orSLOT-MISSING
are called and return.NTH
andNTHCDR
accepting bignums as first argument.- First arg of
CERROR
may be a function. - Lambda-lists of the form
(X . Y)
inDESTRUCTURING-BIND
and macros are now equivalent to(X &REST Y)
. LAST
,BUTLAST
,NBUTLAST
accepting bignum counts.WITH-OUTPUT-TO-STRING
accepting:ELEMENT-TYPE
.FIXNUM
no longer naming a function.MAKE-STRING-OUTPUT-STREAM
accepts:ELEMENT-TYPE
.- Numerous
LOOP
fixes. - 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.
MACROLET
now accepts declarations, as prescribed by ANSI CL.MAKE-PATHNAME
signals an error on invalid combinations (:ABSOLUTE
or:WILD-INFERIORS
followed by:BACK
or:UP
).PEEK-CHAR
skips whitespace based on the readtable instead of using hard-wired values.PEEK-CHAR
signals an end-of-file error if necessary whenRECURSIVE-P
is true.FILE-LENGTH
now signals aTYPE-ERROR
when 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-OR
returns the same results asSET-EXCLUSIVE-OR
wrt to duplicate elements.- Forms like
(MULTIPLE-VALUE-BIND 'LIST)
no longer trapping an internal compiler error when compiled. PARSE-INTEGER
signalingPARSE-ERROR
.- Compiler eliminating some type checks in safe code.
- Byte-compiler and -interpreter not handling
C:&MORE
. - Some
TYPE-ERROR
s being signaled with unbound slots, which made them undisplayable. - Structure predicates no longer signaling an error when applied to obsolete instances.
- A
DEFTRANSFORM
for array bounds checking had an off-by-1 error. - Compiler was not properly deriving the type of
FTRUNCATE
in all cases. - Fixed error wherein certain uses of 2 arg
ATAN
caused a compiler error on x86. - Compiler wrongly signaling a type error in
VOLATILE-INFO-LOOKUP
orCOMPACT-INFO-LOOKUP
for hash values equal toMOST-POSITIVE-FIXNUM
. FFLOOR
andFCEILING
return types sometimes being inferred as being the nil type.PARSE-TIME
accepting GMT offsets with a leading plus sign.UNIX-MMAP
not accepting a null fd, preventing anonymous mappings.SIGPROF
having the wrong value on GNU/Linux.- Wrong byte-code being generated for
(APPLY #'+ <X> <Y>)
and similar cases. GCD
sometimes returning a negative value.LCM
sometimes returning a negative value, or signaling division-by-zero.FLOAT
sometimes returning a float of the wrong type.ROOM
should handle the large heaps now without overflowing internal counters or signaling type errors. Columns should line up better too.READ-SEQUENCE
was returning too soon when reading from files into simple-strings even though there were data available.READ-SEQUENCE
was returning the wrong value when reading into simple-strings and when the:START
value 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-BIND
accepts&REST
and 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. ATANH
was incorrectly computing the value of 1+i*y.SOFTWARE-VERSION
would 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-SERVER
has an additional:REUSE-ADDRESS
keyword argument.- Removed obsolete alias from
MAKE-VECTOR
toMAKE-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
NIL
instead of:NEWEST
. *DEFAULT-PATHNAME-DEFAULTS*
has a version component of:UNSPECIFIC
instead of:NEWEST
so versioning is disabled by default to preserve current behavior. Set the version to:NEWEST
to create versions.LDB
backtrace on x86.DYNAMIC-EXTENT
support 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-FUNCTION
is now a subclass ofSTANDARD-OBJECT
. ENSURE-CLASS-USING-CLASS
's argument list has been changed to conform to AMOP.COMPUTE-EFFECTIVE-SLOT-DEFINITION
now takes a slot name as argument, for AMOP compliance.SUBTYPEP
works in presence of forward-referenced classes.- Accessing slots of specialized parameters in
(SETF SLOT-VALUE-USING-CLASS)
methods works. DIRECT-SLOT-DEFINITION-CLASS
andEFFECTIVE-SLOT-DEFINITION-CLASS
AMOP compliant.ALLOCATE-INSTANCE
working with structures defined withDEFSTRUCT
.- With
(DEFGENERIC FOO (&REST X &KEY))
(DEFMETHOD FOO (&REST X) X)
,(FOO 1)
now signals an error. - Methods with
&OPTIONAL
arguments detecting too many args. DEFMETHOD
andDEFGENERIC
detecting doubled lambda variables.DEFGENERIC
:ARGUMENT-PRECEDENCE-ORDER
option checking.SLOT-VALUE
,(SETF SLOT-VALUE)
,SLOT-BOUNDP
working with conditions.(SETF SLOT-VALUE)
working on read-only structure slots like in other implementations.- The declaration identifiers
SLOTS
,AUTO-COMPILE
,NOT-AUTO-COMPILE
have been moved fromPCL
toEXT
. - 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-METHOD
is 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.h
changing, since that now just contains things inSYS:*RUNTIME-FEATURES*
. UseSYS:REGISTER-LISP-FEATURE
andSYS:REGISTER-LISP-RUNTIME-FEATURE
to 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:ENCAPSULATE
and 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!