========================== C M U C L 18 d ============================= March 11, 2002 The CMUCL project is pleased to announce the release of CMUCL 18d. 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 user-defined method combinations; a metaobject protocol based on AMOP; 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 in the public domain. Features new in this release: * Feature enhancements: - a new platform, OpenBSD/x86 is supported - significant performance enhancements: code compiled with this release is approximately 10% faster than with 18c - Logical Pathname Translations can be auto-loaded - The presence of gray streams support is now clearly announced in the herald, and via the :gray-streams feature. - Support for READ- and WRITE-SEQUENCE on Gray streams, via STREAM-READ-SEQUENCE and STREAM-WRITE-SEQUENCE - New :class keyword option for OPEN, which lets it return Gray streams classes wrapped around lisp-streams. - Facility for addition of clean-up hooks, that are called before CMUCL is exited via EXT:QUIT - Added hooks that support the addition of advanced command processing capabilities for user input (similar to functionality in ACL) - support for hierarchical packages, as per ACL, signaled by the :relative-package-names feature. - the modules: pathname is initialized sensibly, to make REQUIRE work correctly out of the box. For example, you can now say (require :clx) to load the precompiled clx-library subsystem. - Report class information when describing symbols that are class names. - Compilation of PCL-generated code is now silent by default. This can be controlled by changing PCL::*COMPILE-LAMBDA-SILENT-P*. - Further ongoing speed tuning to various numerical routines. - LOAD-FOREIGN has added :verbose option that honors *LOAD-VERBOSE* - Support larger FD_SETSIZE on FreeBSD - Debugger short-cuts to invoke available restarts now behave more predictably (all available restarts get a numeric command, and named restarts get their name as a command, unless that is already taken, i.e. as is indicated by the debugger display) - Improvements to disassembly listings on x86 and SPARC: o Sparc v9 instructions are longer so make the opcode column wider. o Allow printing of integer registers to use the Sparc register names instead of the Lisp names. o Add support for printing various notes during disassembly: o Assembler routines, foreign functions, and foreign constants o The value of constants in the code header o References to static symbols o Notes about pseudo-atomic stuff o Some hints on header-word types - Sparc port supports 64-bit integers for parameters and return values when calling foreign functions. - Try to use branch prediction on the sparc port. - Compiler understands the type of the function SIGNUM - Loading of files given by logical pathnames without a type will do a search for possible fasl files instead of just FASL. - Some optimizations to ALIEN-SAP to speed up alien access. * Numerous ANSI compliance fixes: - EVAL-WHEN behaviour should now be in line with ANSI spec - PROCLAIM no longer has a compile-time effect, so many old uses of this should use DECLAIM instead - DEFMACRO no longer has compile-time effect only when at toplevel - The interaction of structure-printing and print-object now matches ANSI spec more closely - Duplicate keyword arguments are now allowed in lambda-list destructuring operators. - READTABLE-CASE is now copied by COPY-READTABLE - fixes to the precedence lists of several error conditions - :CLTL2, :DRAFT-ANSI-CL, :X3J13 features removed - Removed various CLtL1/CLtL2-only exports from the COMMON-LISP package (COMPILER-MACROEXPAND, COMPILER-MACROEXPAND-1, DEFINE-SETF-METHOD, GET-SETF-METHOD, GET-SETF-METHOD-MULTIPLE-VALUE, LOGICAL-PATHNAME-P, SIMPLE-CONDITION-FORMAT-STRING, GENERIC-FLET, GENERIC-LABELS, WITH-ADDED-METHODS, HASH-TABLE-WEAK-P) - changes to logical pathname semantics - LOAD and COMPILE-FILE accept :EXTERNAL-FORMAT as required by ANSI, but ignore its value. * Numerous bugfixes: - fix for bogus warnings based on stale function type information for redefined functions - fix for printing of bit vectors (printer was incorrectly respecting radix and base control vairables). Also bugfixes to pretty printing of vectors - Fix sxhash and equal hash tables for strings with fill-pointers - read-sequence now works with byte-vectors and strings for concatenated-streams - Fix to handling of infinities in floating-point comparisons - Fix bug in handling of certain complex numbers by log - Fixed handling of floating point errors by handler-bind - Fixed broken INVALID-METHOD-ERROR and added stricter checks in standard method combination for the qualifiers on methods - Fixed calling of NO-APPLICABLE-METHOD for GFs with no defined methods - Fixed missing coercion to class in argument processing of the :METHOD-CLASS option to DEFGENERIC, which caused GENERIC-FUNCTION-METHOD-CLASS to return the uncoerced class name, breaking PCL and foreign code - Various fixes to parameters and events in CLX - COMPILE-FILE heeds logical-pathname translations for output file spec - Rewrite of deftransform for concatenate, because the original deftransform could cause the compiler to spend enormous (minutes!) amounts of time trying to derive the type of the START variable. - Allow only one docstring in relevant bodies, as processed by SYSTEM:PARSE-BODY - Several fixes to FORMAT: tilde dollarsign was not printing the correct amount of padding; tilde slash was not accepting a function name prefixed with two colons; ~F was not printing complex and non-numeric arguments correctly - Better error checking for arguments to FILE-LENGTH, FLOAT-RADIX - vector-push-extend works for adjustable arrays of zero length - Respect :order argument to short form of define-method-combination - Fix destructuring in AND sub-clauses of WITH-CLAUSES for LOOP - IGNORE declarations work for symbol-macros now - Changed handling of static libraries as the first argument to load-foreign, so that all archive members are loaded (like the user expects). - Stricter argument checking for ADJUST-ARRAY, which also doesn't shrink non-adjustable vectors in place anymore. - Removed forced defaulting of unsupplied :DIRECT-SUPERCLASSES and :DIRECT-SLOTS arguments by ENSURE-CLASS-USING-CLASS, as required by AMOP. - Fixed shared-initialize for std-class to correctly interpret unsupplied :direct-superclasses. - CATCH now works correctly for immediate fixnum and character tags - Fix some bugs in the ash deftransform. - Fix a bug in printing logical pathnames with a file version given. - Fixed a sparc backend bug where offsets were generated that couldn't fit in an offset field of an instruction. - Complex division vop was wrong (only for Sparc with :complex-vops *feature*) - Stack clearing code is incorporated into the Sparc port - The deprecated branch and taddcctv instructions shouldn't be used at all on V9 builds. * Other changes: - Default for CMUCLLIB on Linux changed to match the default on other Unices, namely /usr/local/lib/cmucl/lib/ - The DEFSYSTEM facility that was distributed as part of the contrib archive (but not maintained by the CMUCL team) has been removed from the source distribution. A more up to date and maintained version is available from CLOCC, at . * Code cleanups: - Changes to PCL (the CLOS implementation included with CMUCL) to remove code for other Common Lisp implementations. - The features propagate-float-type, propagate-fun-type, and constrain-float-type are now the default and only behaviour. Remove those features from your build scripts. * Changes to rebuilding procedure: - the directory src/bootfiles/18c contains a number of files required to bootstrap compilation from the 18c release. See the README in that directory for usage instructions. - the :NO-CLX, :NO-HEMLOCK etc features which are used to control subsystem compilation during the build phase are no longer present in the final cores. - Added new new target 'initial-map' that can make a 'lisp.nm' file from whatever 'lisp' executable is in the "target:lisp/" directory without depending on the rest of the source code being available. Used when setting up a build directory and/or when internals.h doesn't yet exist. - Various minor improvements to the Makefiles This release is not binary compatible with code compiled using CMUCL 18c; you will need to recompile FASL files. See for download information, guidelines on reporting bugs, and mailing list details. We hope you enjoy using this release of CMUCL!