>>>>> "Raymond" == Raymond Toy <[EMAIL PROTECTED]> writes:
Raymond> I've attached the release notes for 19d.
No, I didn't. But here they are.
Ray
========================== 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
bugfixes from the 19c 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:
* Feature enhancements:
- Destructive functions like NREVERSE that modify constant args
will produce a compile-time warning.
- Destructive functions like NREVERSE whose results are not used
will produce a compile-time 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.
- LONG-LONG and UNSIGNED-LONG-LONG are recognized types in the
C-CALL package for signed and unsigned 64-bit integers.
- A port of gencgc to Darwin/ppc has been made. This still
needs work, and is known to have some issues, but it compiles
CMUCL without problems and runs maxima just fine.
- 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.
- DISASSEMBLE will disassemble flets/labels functions when
disassembling a function. Set disassem::*disassemble-flets*
to NIL to turn this off.
- Simple errors in socket handling code have been converted to
socket-error's to allow easier distinction of the errors.
- 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:"
search-list.
- 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.
- 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
type.
A DOUBLE-DOUBLE-FLOAT uses two DOUBLE-FLOAT's to represent a
number with >= 106 bits of precision (about 33 digits). Known
issues:
* 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
double-doubles.
* 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.
* 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.)
- 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:
T
For backward compatibility. It is the same as :KEY.
:KEY
The entry exists as long as the key is not
garbage-collected.
:VALUE
The entry exists as long as the value is not
garbage-collected.
:KEY-AND-VALUE
The entry exists as long as the key and the value are
alive.
:KEY-OR-VALUE
The entry exists as long as the key or the value are alive.
These tables are currently experimental, but appear to work.
- 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
function(s).
* 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
accepted.
- Printing a zero using ~E will now include a trailing zero
after the decimal point, as required by CLHS, 22.3.3.2.
- DOCUMENTATION and (SETF DOCUMENTATION) now works for
structures of type list or vector.
- DOTIMES will execute the loop the specified number of times,
independent of what the loop might do to the loop counter.
- Printing of circular objects using logical-blocks is handled
better.
- 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.
- As specified by CLHS 22.1.3.1.3, PRIN1 and friends now produce
a trailing zero if necessary.
- As specified by CLHS 22.3.3.2, ~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.
* 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.
- 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.
- 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.
- DESCRIBE no longer depends on having PCL loaded.
- Tracing with no encapsulation appears to be working now for
ppc.
- A simple interface to sysinfo(2) has been added for sparc.
This is used to provide better values for MACHINE-TYPE and
MACHINE-VERSION.
- PARSE-TIME can parse times like "Tue Sep 7 18:56:57 UTC 2004"
again.
- The pretty-printer for MULTIPLE-VALUE-BIND can handle
malformed MULTIPLE-VALUE-BIND forms now, instead of producing
an error.
- 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.)
- 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.
- (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.
- The pretty printer no longer causes an error on badly formed
slots in defclass forms.
- Document LISP::*IGNORE-WILDCARDS*. When set, namestrings will
not have pathnames with wildcards escaped when parsing
namestrings or when creating namestrings.
- 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.
- The unknown condition type 'LISP:SOCKET-ERROR has been fixed.
It properly signals the EXT:SOCKET-ERROR condition now.
- 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
-0.8278608682708728d0.
- 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
pointers.
- Hash table entries with a key and value of :EMTPY now work as
expected.
- 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.
* 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 ".".
- WITH-SLOTS and WITH-ACCESSORS are now pprinted like
MULTIPLE-VALUE-BIND instead of like WITH-OPEN-FILE.
- 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.
- A warning is printed when creating a weak key hash table with
a test different from EQ.
* 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
19c; 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!