wiki:Release19a
close Warning: Can't synchronize with repository "(default)" ("(default)" is not readable or not a Git repository.). Look in the Trac log for more information.

========================== 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 and LISP:CLASS-OF now return CLOS classes. The symbols LISP:STANDARD-CLASS, LISP:BUILT-IN-CLASS, and LISP:STRUCTURE-CLASS name CLOS classes. It is no longer necessary to SHADOWING-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 whose EXT: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 and WARN.
    • 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 of TRACE can now be traced. See also DEBUG:*TRACE-ENCAPSULATE-PACKAGE-NAMES*.
    • New facility for encapsulating functions, FWRAPPERS; see also the CMUCL User Manual.
    • TRACE and PROFILE 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's BYTE-COMPILE keyword arg defaulting to *BYTE-COMPILE-DEFAULT* like COMPILE-FILE.
    • Added VOPs for CHAR=, CHAR<, and CHAR> 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

(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 and RESTART-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 keyword EXT:&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 for DESTRUCTURING-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.
    • Standard methods for STANDARD-OBJECT and STRUCTURE-OBJECT defined on MAKE-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 with SETQ.
    • When CALL-NEXT-METHOD is called with arguments, an error is signaled in safe code when the set of methods applicable to CALL-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 returning KEYWORD for keywords, STANDARD-CHAR for standard characters, BOOLEAN for 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 NULL not having SYMBOL before LIST, precedence list of STANDARD-METHOD not having METHOD before STANDARD-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 nickname USER.
    • COMMON-LISP package no longer having nickname LISP; LISP and COMMON-LISP are now separate packages.
    • SLOT-VALUE, (SETF SLOT-VALUE), SLOT-BOUNDP, SLOT-MAKUNBOUND returning values specified by the standard when SLOT-UNBOUND or SLOT-MISSING are called and return.
    • NTH and NTHCDR accepting bignums as first argument.
    • First arg of CERROR may be a function.
    • Lambda-lists of the form (X . Y) in DESTRUCTURING-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 when RECURSIVE-P is true.
    • FILE-LENGTH now signals a TYPE-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 as SET-EXCLUSIVE-OR wrt to duplicate elements.
    • Forms like (MULTIPLE-VALUE-BIND 'LIST) no longer trapping an internal compiler error when compiled.
    • PARSE-INTEGER signaling 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 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 or COMPACT-INFO-LOOKUP for hash values equal to MOST-POSITIVE-FIXNUM.
    • FFLOOR and FCEILING 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 to MAKE-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 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-FUNCTION is now a subclass of STANDARD-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 and EFFECTIVE-SLOT-DEFINITION-CLASS AMOP compliant.
    • ALLOCATE-INSTANCE working with structures defined with DEFSTRUCT.
    • 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 and DEFGENERIC 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 from PCL to EXT.
    • 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 function PCL:NO-PRIMARY-METHOD is called. The default method of this generic function signals a continuable error of type PCL: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 about internals.h changing, since that now just contains things in SYS:*RUNTIME-FEATURES*. Use SYS:REGISTER-LISP-FEATURE and SYS:REGISTER-LISP-RUNTIME-FEATURE to set *FEATURES* and SYS:*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.
  • 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!

Last modified 12 years ago Last modified on 06/19/12 04:56:36