Release Notes for CMUCL 20b
The CMUCL project is pleased to announce the release of CMUCL 20b. This is a major release which contains numerous enhancements and bug fixes from the 20a 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 multi-methods and a meta-object 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:
- Known issues:
- Executable images on Linux may not be able to be created on some versions of Linux. The problem is in GNU ld which doesn't allocate enough phdrs to create an executable.
- Feature enhancements:
- Read operations using an external format of utf8 are now much faster. Some simple tests on Linux shows that read-line now only takes 40% as much time. Sparc shows 60% as much time.
- ASCII external format added.
- Support for static arrays added. These are allocated in foreign
space and are never moved by GC. When the arrays are no longer
referenced, they are properly freed. To create an array, use
new the
:ALLOCATION :MALLOC
parameter toMAKE-ARRAY
. Currently, only arrays of character; 8, 16, and 32-bit integers (signed and unsigned); single and double floats; and complex single and double floats are supported. FROUND
andFTRUNCATE
are much faster for single and double float numbers. This is not currently available for x87 (due to potential roundoff errors), but is available everywhere else.- Support for internationalization/localization added. Messages from CMUCL can be translated, but currently only a few messages in Korean are translated. For fun, there is a full Pig Latin translation (done by machine).
- Source information (file) for defstructs and deftypes is now
provided.
DESCRIBE
will now print out the name of the file where the defstruct/deftype was defined. - ASDF2 and MK-DEFSYS have been added as contrib modules. Use
(require 'asdf)
or(require 'defsystem)
to load these, respectively. - The previous cmu-contrib module no longer exists. Just use
(require 'module-name)
to load the desired contrib module. - A new switch,
-help
, has been added. These print out brief summary of the available command line switches and then exits. You may also use--help
, which is an alias for-help
. - Error handling has been added to external formats. Previously,
all external formats would silently replace bad encodings with a
suitable replacement character. Now, the user can specify how
the errors are handled by using the
:DECODING-ERROR
and:ENCODING-ERROR
parameters toOPEN
. The default is the previous behavior.- For
DECODING-ERROR
, a character, symbol, or function can be given. If a character, then that character is used as the replacement character. For a symbol or function, it must be a function of 3 arguments: a message string, the offending octet (or nil), and the number of octets read in the encoding. If the function returns, it must be the codepoint of the desired replacement. - For
ENCODING-ERROR
, a character, symbol, or function can be given. If a character, then that character is used as the replacement character. For a symbol or function, it must be a function of 2 arguments: a message string and the offending codepoint. If the function returns, it must be the codepoint of the desired replacement.
- For
- Add
EXT:LIST-ALL-EXTERNAL-FORMATS
to list all known external formats and their aliases. - Add
EXT:DESCRIBE-EXTERNAL-FORMAT
to print a description of the specified external format. To support this, the macrosDEFINE-EXTERNAL-FORMAT
andDEFINE-COMPOSING-EXTERNAL-FORMAT
have changed. - The sparc port now supports the
:executable
feature. - The Mac OS X port now support the
:executable
feature. - Try to return the operation and the operands for arithmetic errors on x86 with SSE2 like what is done on Sparc. Operands in memory are not extracted, though, and for packed operations, the operands are returned as a list of the "real" and "imaginary" parts of the packed number.
- ANSI compliance fixes:
COMPILE
will update the macro-function if the specified name names a macro. (Previously, the fdefinition of the name was set.)WITH-STANDARD-IO-SYNTAX
uses the standard pprint dispatch table now instead of the current table.PRINC-TO-STRING
binds*PRINT-READABLY*
toNIL
as required. Previously, it used the current value of*PRINT-READABLY*
.DEFCLASS
signals an error if the class name already names aDECLARATION
.- The
:METHOD-CLASS
argument toENSURE-GENERIC-FUNCTION
can be a class object as well as a name. - Recognize but ignore the
:DECLARE
argument toENSURE-GENERIC-FUNCTION
. - Default documentation for short form of
DEFINE-METHOD-COMBINATION
isNIL
, not "". DEFINE-COMPILER-MACRO
no longer sets the wrong block name forSETF
functions. We also check that the name is a valid function name; an error is signalled if it's invalid.DELETE-FILE
,ENSURE-DIRECTORIES-EXIST
,FILE-AUTHOR
,FILE-WRITE-DATE
, andOPEN
now merge the given pathname with*DEFAULT-PATHNAME-DEFAULTS*
as required by CLHS sec 19.2.3.
- Bugfixes:
- On Unicode builds, printing of
|\||
and|`|
was incorrect because no escapes were printed. This is fixed now. - Fixed issue with SSE2 support. The vops for complex +/- float would add random junk to the imaginary part of the result.
UNIX-SYSINFO
was broken for Unicode builds, which affectedMACHINE-TYPE
andMACHINE-VERSION
.- Type predicates for double-double float and complex double-double float arrays are now done inline.
UNIX:UNIX-EXECVE
was not converting Lisp strings to C strings on Unicode builds.- When continuing from the
INTEXP-LIMIT-ERROR
condition (for raising an integer to a large integer power) and setting a new limit, the limit was set to the power. We really wanted the absolute value of the power to used as the new limit. FILE-POSITION
was returning incorrect values for file streams on Unicode builds. This is fixed now.- The error-output and trace-file files for
COMPILE-FILE
are now opened using the same external format as specified inCOMPILE-FILE
. Previously, they were opened using the default external format. This meant that these files could lose information if the default format could not represent the characters in the source file. - Handling of source files in the debugger is better now for Unicode builds. The source files are opened using the same format as used to compile them. Previously, the default format was used, which would be wrong if the file is in a different format.
- CMUCL no longer segfaults on Linux when running on a kernel without COMPAT_BRK. CMUCL will set the personality appropriately and re-exec itself.
GET-MACRO-CHARACTER
would return the wrong second value because*READTABLE*
was always being used instead of the specified readtable.COMPILE-FILE
was generating an error when compilingCOMPILE
forms. This is fixed.- A critical bug in SSE2 support has been fixed. Multiplying a complex single-float by a single-float produced the wrong result.
- Fix issue where CMUCL does not correctly handle
FLET
s inDEFMETHOD
bodies which use the same name as that of the generic function. The generic function was called instead of the local function. - CMUCL would fail to compile external formats if
*READTABLE*
was not the standard readtable. This is fixed by using the standard I/O syntax when compiling the external format. - The debugger help message is updated to reflect the actual
options for
L
andPP
commands. Help for theDESCRIBE
command has been added. - CMUCL now signals a cerror when attempting to redefine a slot
accessor via
DEFUN
orCOMPILE
. If continued, the accessor is redefined, and CMUCL assumes the new definition is usable as a slot accessor. Previously, CMUCL would print a warning and undefine the structure. - An issue with SSE2 and GC hooks has been fixed. This shows up when doing arithmetic with GC hooks that use the SSE registers. The SSE state is saved along with the x87 state.
GCD
of positive integers no longer returns a negative result for certain arguments.- CMUCL no longer crashes on Mac OS X if the dynamic space size is too large. This was caused by an erroneous value for the maximum dynamic space size.
- When printing out argument values in the debugger and also
during
TRACE
, the incorrect values were returned for the SSE2 core. This was caused by using the x87 values instead of the sse2 values in the sigcontext. This is fixed now. - A critical bug in the fast Unicode stream buffering routine has been fixed. This bug manifests itself by causing valid sequences to be incorrectly decoded, resulting in a replacement character.
- UTF-8 correctly catches overlong sequences now. Previously, overlong sequences were missed.
- When UTF-8 decoder encounters an overlong sequence, a surrogate code point, or a too-large codepoint, the entire sequence is converted to the replacement character. Previously, all of the octets except the first were put back, and the data read again.
- Some GC improvements for sparc and ppc. (Changes for ppc untested). GC could incorrectly move the PC and other registers, causing a segfault.
- A bug inadvertently introduced in the 2010-04 non-unicode snapshot has been fixed. The bug prevented the non-unicode versions of CMUCL from loading the external format aliases file.
- With SSE2, the imaginary part of a (complex single-float) is now returned correctly.
- The method used to create executable images for Linux has been cleaned up and should be far more robust against different versions of the OS. The same is true on sparc as well as Mac OS X.
- It is possible to hash NaNs? now. (Previously gave an invalid operation exception.)
- For SSE2 builds, = no longer signals an error if one operand is NaN. This matches what happens for x87.
- For SSE2 builds,
SIGCONTEXT-FLOAT-REGISTER
returned the wrong value for single-floats. Easily noticed when tracing a function with single-float arguments. - The table for Unicode 1.0 names was constructed incorrectly.
Thus,
UNICODE-1.0-NAME
would return the wrong names for many (all?) codepoints.
- On Unicode builds, printing of
- Trac Tickets:
#33:
get-dispatch-macro-character
doesn't signal errors in
compiled code Fixed.
#22: sun4_solaris_sunc config uses gcc to build motif
This is fixed. If Sun C is used to build lisp, it is also used to build motifd.
#39: non-standard lexical syntax
The reader macros are no longer installed by default.
#36: file-position broken for utf16 and utf32.
FILE-POSITION
returns the correct value for UTF16 and UTF32 when there is a BOM in the file.
- Other changes:
- :freebsd4 is no longer a *feature*
- Added
UNIX-GETENV
,UNIX-SETENV
,UNIX-PUTENV
, andUNIX-UNSETENV
, in the UNIX package to allow access to these C functions. OCTETS-TO-STRING
has changed.- The output string is no longer automatically extended.
- Parameters can be given to specify the start and end of the octet array and for the start and end of the string. (These all default to the beginning and end of the arrays.)
UNIX-GETRLIMIT
added for solaris and darwin/x86.TRANSLATE-PATHNAMES
now creates the resulting path to be an absolute or relative path according to whether the TO pathname is absolute or relative. Previously, the result was taken from the SOURCE pathname, except if TO were absolute, in which case the result was absolute.- Add MAC as an alias to the CR composing external format.
- Improvements to the PCL implementation of CLOS:
- Changes to building procedure:
This release is not binary compatible with code compiled using CMUCL 20a; you will need to recompile FASL files.
See <URL: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!