release-20b.txt 13 KB
Newer Older
rtoy's avatar
rtoy committed
1 2 3 4
========================== C M U C L  20 b =============================

The CMUCL project is pleased to announce the release of CMUCL 20b.
This is a major release which contains numerous enhancements and
rtoy's avatar
rtoy committed
bug fixes from the 20a release.
rtoy's avatar
rtoy committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19

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:
rtoy's avatar
rtoy committed
20 21 22
    - 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. 
rtoy's avatar
rtoy committed
23 24

  * Feature enhancements:
25 26 27
    - 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.
rtoy's avatar
rtoy committed
    - ASCII external format added.
rtoy's avatar
rtoy committed
29 30 31 32
    - 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 to MAKE-ARRAY.  Currently,
33 34 35
      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.
36 37 38
    - FROUND and FTRUNCATE 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.
rtoy's avatar
rtoy committed
39 40 41 42
    - 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).
rtoy's avatar
rtoy committed
43 44 45
    - 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.
rtoy's avatar
rtoy committed
46 47 48 49 50 51 52 53
    - ASDF2 and MK-DEFSYS have been added as contrib modules.  Use
      (require 'asdf) or (require 'defsystem) to load these,
    - 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.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
    - 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 to OPEN.  The default is the previous

      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

      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.
75 76 77
    - 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
rtoy's avatar
rtoy committed
      specified external format.  To support this, the macros
rtoy's avatar
rtoy committed
79 80
    - The sparc port now supports the :executable feature.
rtoy's avatar
rtoy committed
    - The Mac OS X port now support the :executable feature.
rtoy's avatar
rtoy committed
83 84 85 86 87
    - 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.
rtoy's avatar
rtoy committed
88 89

  * ANSI compliance fixes:
rtoy's avatar
rtoy committed
90 91 92 93 94
    - COMPILE will update the macro-function if the specified name
      names a macro.  (Previously, the fdefinition of the name was
    - WITH-STANDARD-IO-SYNTAX uses the standard pprint dispatch table
      now instead of the current table.
95 96
    - PRINC-TO-STRING binds *PRINT-READABLY* to NIL as required.
      Previously, it used the current value of *PRINT-READABLY*.
rtoy's avatar
rtoy committed
97 98
    - DEFCLASS signals an error if the class name already names a
rtoy's avatar
rtoy committed
99 100
    - The :METHOD-CLASS argument to ENSURE-GENERIC-FUNCTION can be a
      class object as well as a name.
rtoy's avatar
rtoy committed
101 102
    - Recognize but ignore the :DECLARE argument to
rtoy's avatar
rtoy committed
103 104
    - Default documentation for short form of
rtoy's avatar
rtoy committed
105 106
    - DEFINE-COMPILER-MACRO no longer sets the wrong block name for
      SETF functions.  We also check that the name is a valid function
rtoy's avatar
rtoy committed
      name; an error is signalled if it's invalid.
rtoy's avatar
rtoy committed
108 109 110
      FILE-WRITE-DATE, and OPEN now merge the given pathname with
      *DEFAULT-PATHNAME-DEFAULTS* as required by CLHS sec 19.2.3.
rtoy's avatar
rtoy committed
111 112

  * Bugfixes:
113 114
    - On Unicode builds, printing of '|\|| and '|`| was incorrect
      because no escapes were printed.  This is fixed now.
rtoy's avatar
rtoy committed
    - Fixed issue with SSE2 support.  The vops for complex +/- float
rtoy's avatar
rtoy committed
      would add random junk to the imaginary part of the result.
rtoy's avatar
rtoy committed
117 118
    - UNIX-SYSINFO was broken for Unicode builds, which affected
rtoy's avatar
rtoy committed
119 120
    - Type predicates for double-double float and complex
      double-double float arrays are now done inline.
rtoy's avatar
rtoy committed
121 122 123 124 125
    - 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
rtoy's avatar
rtoy committed
      absolute value of the power to used as the new limit.
rtoy's avatar
rtoy committed
    - FILE-POSITION was returning incorrect values for file streams on
rtoy's avatar
rtoy committed
      Unicode builds.  This is fixed now.
rtoy's avatar
rtoy committed
129 130 131 132 133 134
    - The error-output and trace-file files for COMPILE-FILE are now
      opened using the same external format as specified in
      COMPILE-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.
rtoy's avatar
rtoy committed
    - Handling of source files in the debugger is better now for
rtoy's avatar
rtoy committed
      Unicode builds.  The source files are opened using the same
rtoy's avatar
rtoy committed
137 138 139 140 141 142 143 144 145
      format as used to compile them.  Previously, the default format
      was used, which would be wrong if the file is in a different
    - 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
rtoy's avatar
rtoy committed
146 147 148 149 150 151 152 153 154 155
    - COMPILE-FILE was generating an error when compiling COMPILE
      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
    - Fix issue where CMUCL does not correctly handle FLETs in
      DEFMETHOD bodies which use the same name as that of the generic
      function.   The generic function was called instead of the local
    - CMUCL would fail to compile external formats if *readtable* was
rtoy's avatar
rtoy committed
156 157 158 159 160
      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 and PP commands.  Help for the DESCRIBE command
      has been added.
rtoy's avatar
rtoy committed
161 162 163 164 165
    - CMUCL now signals a cerror when attempting to redefine a slot
      accessor via DEFUN or COMPILE.  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.
rtoy's avatar
rtoy committed
166 167 168
    - 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.
rtoy's avatar
rtoy committed
169 170
    - GCD of positive integers no longer returns a negative result for
      certain arguments.
171 172 173
    - 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. 
174 175 176
    - 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.
rtoy's avatar
rtoy committed
    - A critical bug in the fast Unicode stream buffering routine has
179 180 181
      been fixed.  This bug manifests itself by causing valid
      sequences to be incorrectly decoded, resulting in a replacement
182 183
    - UTF-8 correctly catches overlong sequences now.  Previously,
      overlong sequences were missed.
rtoy's avatar
rtoy committed
184 185 186 187 188
    - 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
rtoy's avatar
rtoy committed
189 190
      untested).  GC could incorrectly move the PC and other
      registers, causing a segfault.
rtoy's avatar
rtoy committed
191 192 193 194
    - 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
195 196
    - With SSE2, the imaginary part of a (complex single-float) is now
      returned correctly.
rtoy's avatar
rtoy committed
197 198
    - The method used to create executable images for Linux has been
      cleaned up and should be far more robust against different
rtoy's avatar
rtoy committed
199 200
      versions of the OS.  The same is true on sparc as well as Mac OS
rtoy's avatar
rtoy committed
201 202
    - It is possible to hash NaNs now.  (Previously gave an invalid
      operation exception.)
rtoy's avatar
rtoy committed
203 204
    - For SSE2 builds, = no longer signals an error if one operand is
      NaN.  This matches what happens for x87.
rtoy's avatar
rtoy committed
    - For SSE2 builds, SIGCONTEXT-FLOAT-REGISTER returned the wrong
rtoy's avatar
rtoy committed
      value for single-floats.  Easily noticed when tracing a
rtoy's avatar
rtoy committed
      function with single-float arguments.
208 209 210
    - The table for Unicode 1.0 names was constructed incorrectly.
      Thus, UNICODE-1.0-NAME would return the wrong names for many
      (all?) codepoints.
rtoy's avatar
rtoy committed

rtoy's avatar
rtoy committed
  * Trac Tickets:
213 214 215
    #33: get-dispatch-macro-character doesn't signal errors in
      compiled code
rtoy's avatar
rtoy committed
216 217 218
    #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.
rtoy's avatar
rtoy committed
219 220
    #39: non-standard lexical syntax
      The reader macros are no longer installed by default.
rtoy's avatar
rtoy committed
221 222 223
    #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.
rtoy's avatar
rtoy committed
224 225

  * Other changes:
rtoy's avatar
rtoy committed
226 227 228 229 230 231 232 233
    - :freebsd4 is no longer a *feature*
      in the UNIX package to allow access to these C functions.
    - OCTETS-TO-STRING has changed.
      o The output string is no longer automatically extended.
      o 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.)
rtoy's avatar
rtoy committed
    - UNIX-GETRLIMIT added for solaris and darwin/x86.
rtoy's avatar
rtoy committed
235 236
    - TRANSLATE-PATHNAMES now creates the resulting path to be an
      absolute or relative path according to whether the TO pathname
rtoy's avatar
rtoy committed
      is absolute or relative.  Previously, the result was taken from
rtoy's avatar
rtoy committed
238 239
      the SOURCE pathname, except if TO were absolute, in which case
      the result was absolute.
rtoy's avatar
rtoy committed
    - Add MAC as an alias to the CR composing external format.
rtoy's avatar
rtoy committed

rtoy's avatar
rtoy committed
242 243 244 245 246 247 248 249 250 251 252 253 254
  * 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:> for download information,
guidelines on reporting bugs, and mailing list details.

We hope you enjoy using this release of CMUCL!