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

The CMUCL project is pleased to announce the release of CMUCL 20a.
This is a major release which contains numerous enhancements and
bug fixes from the 19f release.
rtoy's avatar
rtoy committed
6 7 8 9 10 11

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
rtoy's avatar
rtoy committed
13 14 15 16 17 18
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:

19 20 21 22 23 24 25
  * Known issues:
    - On Linux and FreeBSD, it may not be possible call SAVE-LISP and
      create executables.  This seems to be broken on FreeBSD.  On
      Linux, it seems to depend on what version of Linux is used to
      create the executable.  Redhat Enterprise Linux appears to be
      ok, but Open SuSE 10.x is not.

rtoy's avatar
rtoy committed
  * Feature enhancements:
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
    - Support for Unicode has been added.  You have Unicode support if
      *FEATURES* includes :UNICODE.
      o CHAR-CODE-LIMIT is 65536.  
      o There is only one character type;  CHARACTER and BASE-CHAR are
        the same types.
      o There is only one string type; STRING and BASE-STRING are the
        same type. All strings are UTF-16 strings and therefore
        contain UTF-16 surrogate pairs.  While most string functions
        correctly handle surrogate pairs, not all do.  It is up to the
        user to handle this.  In particular, processing of strings on
        a character-by-character basis will need to handle surrogate
      o External formats are supported.  Functions that need to know
        the external format take an :EXTERNAL-FORMAT keyword argument
        to specify the format.
        + The special variable STREAM:*DEFAULT-EXTERNAL-FORMAT*
          specifies the default format to be used for all streams.
44 45 46 47 48
          The default value is :ISO8859-1. 
        + The standard streams, *STANDARD-INPUT*, *STANDARD-OUTPUT*,
          and *STANDARD-ERROR* all default to
          *DEFAULT-EXTERNAL-FORMAT* (which itself defaults to
          :ISO8859-1).  You can change the encoding used for these
rtoy's avatar
rtoy committed
49 50
          streams by calling STREAM:SET-SYSTEM-EXTERNAL-FORMAT to set
          the encoding for all three streams.  Alternatively, you can
          use (SETF EXTERNAL-FORMAT) to change the format for each
rtoy's avatar
rtoy committed
53 54
        + Many external formats are supported.  The complete list is
          in aliases, but we support at least :ISO-8859-1, :UTF-8,
          :UTF-16, :UTF-32, and the composing external format :CRLF.
56 57 58 59 60 61 62
       o CHAR-LESSP and friends perform case-folding by converting to
         lowercase.  (The non-Unicode version converted to uppercase.)
       o STRING<, STRING>, and friends compare strings in codepoint order.
       o STRING-LESSP, STRING-GREATERP, and friends compare strings in
         codepoint order after doing a case-folding operation on each
         codepoint.  The case-folding operation converts each
         codepoint to the corresponding lowercase codepoint.
63 64 65 66 67
       o LISP:UTF16-STRING-P checks to see if a string is a valid
         UTF-16 encoded string.
       o Unicode normalization forms are supported via
         and LISP:STRING-TO-NFKD.
68 69 70
       o Symbols are always normalized to NFC form.

    - WRITE-VECTOR and READ-VECTOR support vectors of with element
rtoy's avatar
rtoy committed
71 72 73
      sizes of 1 bit, 2 bits and 4 bits.  For :NETWORK-ORDER, the
      bytes are written such that the lowest indexed element is
      written to the most significant part of a byte.
rtoy's avatar
rtoy committed
74 75

  * ANSI compliance fixes:
rtoy's avatar
rtoy committed
76 77 78 79
    - MERGE-PATHNAMES no longer generates pathnames whose directory
      component doesn't start with either :ABSOLUTE or :RELATIVE.
      MERGE-PATHNAMES also signals errors if the generated pathname
      directory is invalid (such as :ABSOLUTE followed by :BACK).
rtoy's avatar
rtoy committed
80 81

  * Bugfixes:
82 83 84 85
    - CMUCL sometimes gets "stuck" during compilation where it is
      trying to simplify the union of a large number of disjoint
      numeric types.  Previously, we handled the case of integer
      types.  Extend this to handle floats as well.
rtoy's avatar
rtoy committed
    - SXHASH was computing the same hash code for upper and lower case
      characters by up-casing the character.  This isn't necessary
rtoy's avatar
rtoy committed
88 89
      since the characters are not EQUAL, so make SXHASH return
      different values for upper and lower case letter.
rtoy's avatar
rtoy committed
90 91 92 93
    - WRITE-VECTOR was not writing out enough data when no
      byte-swapping is needed and the end index was not given.
      (Confusion about the length of the vector versus the index as an
      octet count, not element count.)
    - Motif (CLM) should work with Unicode.
rtoy's avatar
rtoy committed
95 96 97
    - The stream created by WITH-INPUT-FROM-STREAM was not properly
    - SXHASH was returning different values for -0f0 and -0d0 for
      compiled and interpreted code.  They both return the same value
rtoy's avatar
rtoy committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112
    - Some issues with potential spurious floating-point exceptions
      with complex arithmetic on x86 with SSE2 have been fixed.
      (Random junk in unused parts of an sse2 register could cause
      spurious FP exceptions.)
    - Numeric contagion for complex + real and complex - real was not
      done correctly in compiled code.  Proper contagion is now done
      by converting the real to a complex before performing the
    - CMUCL can now handle the X11 local Unix display connection on
      Mac OS X.
    - SETF-SLOT-VALUE-USING-CLASS-DFUN no longer signals errors when
      checking the new value against the declared slot type when the
      declared slot type was too hairy for TYPEP.
rtoy's avatar
rtoy committed
113 114
    - GENTEMP no longer generates the wrong symbol if the
      pretty-printer is used.
115 116 117 118 119 120 121
    - Some issues with slow allocation with gencgc have been worked
      around.  Certain allocation sequences were causing all
      allocations to be done out-of-line into an almost full
      allocation region.  This was especially evident on sparc and ppc
      when running the ansi test suite from gcl on a unicode build.
      CMUCL will attempt to detect this and abandon the region,
      allowing inline allocation to be done again.
rtoy's avatar
rtoy committed
122 123 124
    - For x86 builds, the floating-point precision was incorrectly set
      to 64 bits (long-float) instead of 53 bits (double-float).  This
      is fixed now.
rtoy's avatar
rtoy committed
125 126

  * Trac Tickets:
127 128 129
    #31: pathname bug with :case :common
    Fixed.  The common case is applied to each part of the directory,
    not to the directory as a whole.
rtoy's avatar
rtoy committed
130 131

  * Other changes:
rtoy's avatar
rtoy committed
132 133 134
    - SOFTWARE-VERSION may return different results than previously.
      UNIX:UNIX-UNAME is now used to obtain the software version on
      Linux and Solaris.
    - User's manual updated with a section on internationalization
rtoy's avatar
rtoy committed
136 137 138 139
    - DESCRIBE on characters includes the character's code and name.
    - CLX updated to the portable clx version from Christophe Rhodes
      darcs repository of 2009-06-16.
rtoy's avatar
rtoy committed
140 141
    - will also install the source code in the specified
      directory if -I and -S are given.
rtoy's avatar
rtoy committed
142 143 144 145 146 147 148 149 150
    - CMUCL contribs (in the src/contribs directory) are now
      distributed as part of extras package.  The contribs can be
      loaded by first using (require "cmu-contribs").  Then the
      individual contribs can be loaded with require.  The available
      contribs are, "contrib-demos", "contrib-follow-mouse",
      "contrib-games-feebs", "contrib-hist", "contrib-psgraph",
      "contrib-ops", "contrib-embedded-c", "contrib-sprof".  The names
      must be given as lower case strings.  These are not officially
      supported as part of CMUCL, but users may find them useful.
rtoy's avatar
rtoy committed
151 152 153 154

  * Improvements to the PCL implementation of CLOS:

  * Changes to building procedure:
    - The sparc config files are now named sparc_gcc and sparc_sunc,
rtoy's avatar
rtoy committed
156 157 158
      which use gcc and Sun C, respectively, for the C compiler.  Only
      Solaris is supported.  The old sun4_solaris_gcc and
      sun4_solaris_sunc configs are deprecated.
159 160 161 162
    - The Linux config file is x86_linux, which supports gencgc.  The
      old cgc config is no longer supported.
    - The FreeBSD config file is x86_freebsd, which supports gencgc.  The
      old cgc config is no longer supported.
rtoy's avatar
rtoy committed
163 164 165 166 167 168 169 170 171 172

This release is not binary compatible with code compiled using CMUCL
19f; 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!