release-19d.txt 14.1 KB
Newer Older
1 2 3 4 5 6
========================== C M U C L  19 d =============================


The CMUCL project is pleased to announce the release of CMUCL 19d.
This is a major release which contains numerous enhancements and
emarsden's avatar
emarsden committed
bugfixes from the 19c release.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

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:

  * Feature enhancements:

      - Destructive functions like nreverse that modify constant args
        will produce a warning.
      - Destructive functions like nreverse whose results are not used
        will produce a warning.
      - Pathnames that cannot be printed readably using #p"..." will
        now be printed using the CMUCL extension #P(...).  However,
        there are still cases where CMUCL cannot print pathnames
        readably, but these involve search-lists and patterns.
rtoy's avatar
rtoy committed
32 33
      - LONG-LONG and UNSIGNED-LONG-LONG are recognized types in the
        C-CALL package for signed and unsigned 64-bit integers.
rtoy's avatar
rtoy committed
      - A port of gencgc to Darwin/ppc has been made.  This still
rtoy's avatar
rtoy committed
35 36
        needs work, and is known to have some issues, but it compiles
        CMUCL without problems and runs maxima just fine.
rtoy's avatar
rtoy committed
37 38 39
      - TRACE supports tracing of FLET/LABELS functions.  Use (trace
        (labels foo bar)) to trace the labels function FOO in the
        function BAR.  This is currently experimental.
rtoy's avatar
rtoy committed
40 41 42
      - DISASSEMBLE will disassemble flets/labels functions when
        disassembling a function.  Set disassem::*disassemble-flets*
        to NIL to turn this off.
rtoy's avatar
rtoy committed
43 44
      - Simple errors in socket handling code have been converted to
        socket-error's to allow easier distinction of the errors.
rtoy's avatar
rtoy committed
45 46 47 48 49 50 51 52 53 54
      - EXT:LOAD-FOREIGN will use dlopen to try to open a shared
        library, so if dlopen searches in certain places, LOAD-FOREIGN
        will find the shared object.
      - A new search-list "ld-library-path:" has been created and
        contains the value of the environment variable
        LD_LIBRARY_PATH.  This is analogous to the "path:"
      - When a core file is started, any shared libraries that were
        loaded when the core was made will be reloaded on startup.  If
        the library cannot be found, several restarts are available.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
      - Support for the new float type EXT:DOUBLE-DOUBLE-FLOAT.  This
        includes support for complex numbers with this component type
        and simple arrays for this type and complex numbers of this

        A DOUBLE-DOUBLE-FLOAT uses two DOUBLE-FLOAT's to represent a
        number with >= 106 bits of precision (about 33 digits).  Known

	* If you are expecting IEEE-style behavior, you don't get it:
	  - signed zeroes aren't really available.  
	  - overflows don't return infinity but return NaN instead.
	  - rounding might not be quite the same as IEEE
	  - SQRT is not accurate to the last bit, as required by IEEE.
	* Multiplying by a number very close to
	  most-positive-double-float will produce an error even if the
	  result does not overflow.  (This is an artifact of how
	  multiplication is done.  I don't have a solution to this.)
	* Read/write consistency is not working.  (Because conversion
	  from a bignum to a double-double-float doesn't really
	  understand the internal double-double-float format.)
	* INTEGER-DECODE-FLOAT and SCALE-FLOAT aren't "inverses".
	  That is, you can't take the result of integer-decode-float
	  and use scale-float to produce exactly the same number.
	  This is because of how bignums are converted to
	* FLOAT-DIGITS always returns 106 even though there could be
	  more bits.  (Consider the double-double (1d0,1d-200)).  This
	  will show up in PRINT where the printed result will have way
	  more than the normal 33 digits or so.  But reading such a
	  number back won't give the same value.
	* There is probably more consing than is necessary in many of
	  the standard Common Lisp functions like floor, ffloor, etc.
	* The special functions are not fully tested.  I did a few
	  random spot checks for each function and compared the
	  results with maxima to verify them.
	* The branch cuts for the special functions very likely will
	  not match the double-float versions, mostly because we don't
	  have working signed zeroes.
	* Type derivation for double-double-floats might not be
	  working quite right.
	* PI is still a double-float.  If you want a double-double
	  version of pi, it's KERNEL:DD-PI.  (Soon to be EXT:DD-PI.)
	* There are probably still many bugs where double-double-float
	  support was overlooked.
100 101 102
        * The double-double arithmetic operations can be inlined by
          specifying (SPACE 0).  Otherwise, they are not inlined.
          (Each double-double operation is about 20 FP instructions.)
rtoy's avatar
rtoy committed
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
      - Hash tables now support weak value, weak key-and-value, and
        weak key-or-value tables.  The :WEAK-P keyword argument can
        take the following values with the given meanings:

                For backward compatibility.  It is the same as :KEY.
		The entry exists as long as the key is not
		The entry exists as long as the value is not
		The entry exists as long as the key and the value are
	        The entry exists as long as the key or the value are alive.
        These tables are currently experimental, but appear to work.
rtoy's avatar
rtoy committed
122 123 124 125
      - TRACE supports an extra option, :WHEREIN-ONLY.  This is
        similar to the :WHEREIN option, except :WHEREIN-ONLY only
        traces the function if the immediate caller is the specified
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142

  * Numerous ANSI compliance fixes:

      - A reader-error is signaled if the number that is being read is
        too small to be presented.  We used to silently return 0.
      - WITH-INPUT-FROM-STRING no longer modifies the index if
        WITH-INPUT-FROM-STRING is not exited normally.
      - An error is signaled if a declaration is used as the name of a
        deftype, condition, or defstruct, and vice versa.
      - An error is signaled when trying to generate a namestring from
        a pathname with just a version component (other than nil,
        :newest, or :unspecific).  CMUCL cannot print that readably.
      - FLET and LABELS functions will catch errors in keyword
        parameters.  Previously, a keyword of NIL was silently
      - Printing a zero using ~E will now include a trailing zero
        after the decimal point, as required by CLHS,
rtoy's avatar
rtoy committed
143 144
      - DOCUMENTATION and (SETF DOCUMENTATION) now works for
        structures of type list or vector. 
rtoy's avatar
rtoy committed
145 146
      - DOTIMES will execute the loop the specified number of times,
        independent of what the loop might do to the loop counter.
rtoy's avatar
rtoy committed
147 148
      - Printing of circular objects using logical-blocks is handled
rtoy's avatar
rtoy committed
149 150 151 152 153 154 155
      - SET-SYNTAX-FROM-CHAR copies the entire dispatch table of
        reader macro functions if necessary.
      - SET-SYNTAX-FROM-CHAR handles single-escape, multiple-escape
        and # characters correctly now.
      - When CLOSE'ing a file with :ABORT, don't delete the file,
        unless we renamed it.  This preserves any and all changes to
        the file, instead of deleting it.
156 157 158 159 160 161
      - As specified by CLHS, PRIN1 and friends now produce
        a trailing zero if necessary.
      - As specified by CLHS, ~E will produce a single zero
        for the fractional part, if necessary.
      - (FORMAT NIL "~,2F" 0.001) produces "0.00" instead of "0.001".
        Thus, we actually honor the d field now.
162 163 164 165 166 167 168 169 170

  * Numerous bugfixes:

      - LISTEN on DUAL-CHANNEL-SIMPLE-STREAM should work now.
      - Some numerical issues with the two-arg log function have been
        fixed.  (log 17 10f0), (log 17f0 10) and (log 17 10) all
        return the same result now.
      - DESTRUCTURING-BIND no longer causes an error when the list to
        be destructured is circular.
rtoy's avatar
rtoy committed
171 172 173
      - PEEK-CHAR for Gray streams handles end of file correctly now.
      - For the ppc port, the alignment of objects in alien structures
        now matches the PowerOpen ABI for Mac OS X.
rtoy's avatar
rtoy committed
174 175 176 177 178 179 180
      - For Darwin/ppc, CMUCL was not following the ABI when calling
        out to C varargs functions.  Now we always copy any float args
        to the corresponding int regs (or stack) as required by the
        ABI.  This isn't necessary for non-varargs functions, but
        CMUCL doesn't know functions which are varargs functions.
      - Callbacks with long-long args or results should work correctly
        now for Darwin/ppc.
rtoy's avatar
rtoy committed
181 182 183 184 185 186
      - DESCRIBE no longer depends on having PCL loaded.
      - Tracing with no encapsulation appears to be working now for
      - A simple interface to sysinfo(2) has been added for sparc.
        This is used to provide better values for MACHINE-TYPE and
rtoy's avatar
rtoy committed
187 188 189
      - PARSE-TIME can parse times like "Tue Sep 7 18:56:57 UTC 2004"
      - The pretty-printer for MULTIPLE-VALUE-BIND can handle
rtoy's avatar
rtoy committed
        malformed MULTIPLE-VALUE-BIND forms now, instead of producing
rtoy's avatar
rtoy committed
        an error.
rtoy's avatar
rtoy committed
192 193 194
      - Callbacks on Darwin/ppc with a large number of args (more than
        8 integer args) should work correctly now.  (Previous versions
        would signal an error.)
rtoy's avatar
rtoy committed
195 196 197 198 199
      - DESCRIBE no longer says arrays are adjustable when they are
        not, and vice versa.
      - Disassembly of some floating-point instructions on ppc has
        been corrected to display floating-point registers instead of
        integer registers.
rtoy's avatar
rtoy committed
200 201 202 203 204 205
      - (read (make-array 5)) doesn't cause a segfault anymore on
        x86/linux.  An error is now signaled saying the object isn't
        one of the possible stream types.
      - The PPC port no longer runs very slowly on some tests on a G5.
        This was caused by using an instruction (mcrxr) that is
        emulated on a G5 but not earlier.
rtoy's avatar
rtoy committed
206 207
      - The pretty printer no longer causes an error on badly formed
        slots in defclass forms.
rtoy's avatar
rtoy committed
208 209 210
      - Document LISP::*IGNORE-WILDCARDS*.  When set, namestrings will
        not have pathnames with wildcards escaped when parsing
        namestrings or when creating namestrings.
211 212 213 214 215 216
      - Fix PPC bug in fixnum arithmetic that caused overflow.  A trap
        would be triggered, but there's no C support for the trap.
      - Some flet/labels functions were not disassembled at all.
      - (expt 1 <big number>) doesn't trigger a continuable error
        anymore and returns 1 immediately.
      - Disassembling methods doesn't produce a type error anymore.
217 218
      - The unknown condition type 'LISP:SOCKET-ERROR has been fixed.
        It properly signals the EXT:SOCKET-ERROR condition now.
rtoy's avatar
rtoy committed
219 220 221 222
      - The accuracy of the trig functions (sin, cos, tan) for large
        arguments has been improved for x86 and ppc.  Sparc already
        had accurate versions.  Thus, (cos 1d120) is
rtoy's avatar
rtoy committed
223 224 225 226 227 228 229 230
      - ROOM works a bit better with GENCGC's allocation because
        unallocated pages ended up looking like pages of conses.
      - DESCRIBE will indicate if a hash-table is a weak (key)
        hash-table or not.
      - Some issues with GC of weak pointers and weak hash-tables have
        been fixed.  (CMUCL would sometimes crash to ldb about weird,
        invalid objects.)  There are, however, still issues with weak
rtoy's avatar
rtoy committed
231 232
      - Hash table entries with a key and value of :EMTPY now work as
rtoy's avatar
rtoy committed
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
      - EXT:READ-VECTOR can read binary data from streams with element
        type BASE-CHAR or CHARACTER. 

  * Trac Tickets
      3. without-package-locks doesn't work with defmacro
         - DEFMACRO within a WITHOUT-PACKAGE-LOCKS now actually
           disables the package lock.
      4. symbol-macrolet + ignorable causes internal compiler error
         - IGNOREing a symbol in a SYMBOL-MACROLET doesn't cause a
           type error anymore.
      5. Hash table entry with key and value of :EMPTY is treated as
         an empty entry.
         - :EMPTY is allowed now and works as expected.
      6. GCed items in weak hash tables are still accessible (with
         random junk)
	 - When an entry is freed in a weak hash-table, the entry is
	   actually marked as free now.  Previously, MAPHASH and
	   WITH-HASH-TABLE-ITERATOR would still display (potentially
	   incorrect) entry for it.
      7. Bug in ext:read-vector
         - Fixed so that EXT:READ-VECTOR can read binary data from
           streams with element type BASE-CHAR and CHARACTER.  This
           matches the behavior of STREAMS:READ-VECTOR.
rtoy's avatar
rtoy committed

257 258 259 260 261
  * Other changes:

      - CMUCL catches more cases where it cannot print a pathname
        readably.  In particular when the pathname name contains "/"
        or ".", or when the pathname type contains a ".".
rtoy's avatar
rtoy committed
262 263
      - WITH-SLOTS and WITH-ACCESSORS are now pprinted like
        MULTIPLE-VALUE-BIND instead of like WITH-OPEN-FILE.
rtoy's avatar
rtoy committed
264 265 266
      - LOOKUP-HOST-ENTRY now returns a second value.  If
        LOOKUP-HOST-ENTRY succeeds, the second value is T; otherwise,
        the value of h_errno is returned.
rtoy's avatar
rtoy committed
267 268
      - A warning is printed when creating a weak key hash table with
        a test different from EQ.
269 270 271 272 273 274 275 276 277
  * Improvements to the PCL implementation of CLOS:

  * Changes to rebuilding procedure:
      - Build scripts should recognize FreeBSD automatically.
      - Should be able to build on either Mac OS X 10.2 or 10.4 using
        the default version of gcc.

This release is not binary compatible with code compiled using CMUCL
emarsden's avatar
emarsden committed
19c; you will need to recompile FASL files. 
279 280 281 282 283 284 285

See <URL:> for download information,
guidelines on reporting bugs, and mailing list details.

We hope you enjoy using this release of CMUCL!