========================== C M U C L 19 e ============================= [--- WORK IN PROGRESS --- DO NOT DISTRIBUTE ---] The CMUCL project is pleased to announce the release of CMUCL 19e. This is a major release which contains numerous enhancements and bugfixes from the 19d 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: * Supported system: - Support for Mac OS X/Intel has been added. * Feature enhancements: - Support for dynamic-extent added for ppc. However, it suffers from the same problems with dynamic-extent as other platforms, so it is disabled by default. Tests indicate that it does work in simple situations. - PARSE-TIME recognizes the format produced by C asctime/ctime. (This change may break some other less commonly used patterns.) - PARSE-TIME recognizes and discards any microseconds. - PARSE-TIME checks that a specified day of the week matches the actual day of the week given in the date. An error is signaled if they are inconsistent. - New option to SAVE-LISP allows creating executable Lisp images that do not require a runtime loader. Syntax: (save-lisp "filename" :executable t) Currently supported on FreeBSD and Linux; work on a Solaris version is underway. Limitations: depends on files in "library:" to dump new executable images. * ANSI compliance fixes: - BOA constructors with &AUX variables are handled better now. - SHADOW accepts characters now. - Default initargs are now passed correctly to initialize-instance and shared-initialize. * Bugfixes: - Floating-point traps are now handled on ppc. Previously, no traps were signalled and SET-FLOATING-POINT-MODES did nothing. - FILE-POSITION no longer returns negative values for mapped file-simple-stream's. - Potential Version numbers that start with a leading 0 are no longer treated as version numbers. Hence, "foo.~1~" has name "foo", type nil, and version 1, but "foo.~01~" has type "~01~" and version :NEWEST. - A bug in type derivation for EXPT has been fixed. (expt x y) for x of type (double-float (0d0) 1d0) and y of type (double-float (0d0)) now returns (or (member 0d0) (double-float (0d0) 1d0)) instead of (double-float 0d0 1d0), i.e., -0d0 is not in the range. - On sparc, the decoding of a trapping FP instruction is correct now. Previously the wrong instruction was decoded, which produced the wrong operation and operands in the arithmetic error handler. - Fix issue with UNIX:UNIX-MMAP handling of "large" addresses that appeared to be negative numbers. - DOUBLE-DOUBLE-FLOAT fixes: o Converting negative rationals to double-double-float's doesn't produce wrong answers anymore. o Conversion of bignums to double-double-floats preserves more bits of the bignum now. This allows for read/print consistency for this particular case. (The general case is still broken.) o (float 1w0) no longer returns a positive result. o Some issues with creation of DOUBLE-DOUBLE-FLOAT and (COMPLEX DOUBLE-DOUBLE-FLOAT) have been fixed on sparc, ppc, and x86. These seem to work, except there appears to be some bugs on x86 when compiling at speed 3 and safety 0. o (INTEGER-DECODE-FLOAT ) was sometimes returning the wrong integer value because the two components had the wrong sign. o Some issues with debugger printing out DOUBLE-DOUBLE-FLOATs and (COMPLEX DOUBLE-DOUBLE-FLOAT)'s have been fixed. o CLOS now recognizes that (COMPLEX DOUBLE-DOUBLE-FLOAT) is a valid built-in class instead of a random object. o Branch cuts for ASIN and ATANH for double-double-float's should match the branches for double-float's. o ATAN2 should correctly handle signed double-double-float zeroes. o FASL files containing -0w0 are now converted to -0w0 instead of 0w0. o SIN and TAN return -0w0 when the argument is -0w0. Previously, they returned 0w0. o Signed zeroes are handled better for addition, subtraction, and multiplication. That is, the correct signed zero is returned now. o Overflow in addition, multiplication, and division returns infinity if traps are disabled. - The assembler for ppc had some arguments for some instructions in the wrong order, producing the wrong effect. - When making displaced arrays, the element types are checked to see if they are type equivalent. If not, an error is signaled. - The reader for #= and ## has been enhanced to be much faster for cases with a large number of shared objects. However, it is also somewhat slower for simple cases. * Trac Tickets: - #8 fixed so logs of bignums and ratios that won't fit into a float can be computed, instead of signalling an error. - #9 fixed. An error is generated if the number of days doesn't match the number of days in the given month. - #10 fixed. ROUND should now return correct answers for floats bigger than most-positive-fixnum. * Other changes: - UNIX:UNIX-ERRNO accesses errno value instead of the global errno value * Improvements to the PCL implementation of CLOS: - Forward-referenced classes are allowed. * Changes to rebuilding procedure: This release is not binary compatible with code compiled using CMUCL 19d; 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!