========================== C M U C L 20 f =============================
The CMUCL project is pleased to announce the release of CMUCL 20f. This is a major release which contains numerous enhancements and bug fixes from the 20e 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:
- Support for x87 has been dropped (effective with the 2014-05 snapshot). All further releases will require an x86 chip that supports sse2. SSE2 was introduced with the Pentium 4 in 2001.
- Feature enhancements
- Trig functions are significantly faster.
- Accuracy of trig functions improved. (Previously, they could be off by one or two ulp.)
RUN-PROGRAM
accepts:ELEMENT-TYPE
to allow specifying the element type for streams that are created forRUN-PROGRAM
. (See ticket:92)
- Changes
- Update to ASDF 3.1.3.
- When
*PRINT-CASE*
is:DOWNCASE
, integers are printed with lowercase letters when needed. - Micro-optimize
KERNEL:DOUBLE-FLOAT-BITS
for x86/sse2. - Add micro-optimization for unary
FTRUNCATE
for x86/sse2. - Compiler can derive the types of the results of
DECODE-FLOAT
. - Main disassembly routines in the
DISASSEMBLE
package accept:BASE
,:CASE
, and:RADIX
keyword arguments, likeDISASSEMBLE:DISASSEMBLE
. - Micro optimizations for sse2 to allow descriptor regs and stack tns for many operations so that the operands can be in memory instead of a register, thereby removing a register load instruction.
- Support for darwin/ppc 10.5 and gcc 4.8.
- Micro-optimization:
(expt -1 power)
just returns -1 or 1 without actually computing the power. - Run-time checks for zero pages on newly allocated pages has been disabled. Lazy zeroing of the heap pages is the default now. which can speed up GC and allocation.
- Add lisp-unit as a contrib. Use (require :lisp-unit) to load it. Precompiled fasls are not included.
- CMUCL now uses fdlibm C functions to implement the special functions. All platforms use this so they should produce identical results everywhere.
- Consing for the trig functions is reduced now since we call out to fdlibm instead of implementing them in Lisp.
- Source location information has been added for
DEFINE-CONDITION
. (From Helmut Eller.) - The lisp executable is now compiled to use SSE2 on x86 machines; CMUCL will not run on chips without SSE2 anymore.
(cosh 1000d0)
signals an overflow error as it should. Previously, it just incorrectly returned infinity.- Deprecating
FLOAT-TRAPPING-NAN-P
in favor ofFLOAT-SIGNALING-NAN-P
. These kinds of numbers are called signaling NaNs?, not trapping NaNs?. - Changed the printer to print "Signaling" instead of "Trapping" when printing a signaling NaN.
- Various issues with the switch to using fdlibm have been fixed. The issues were mostly not signaling floating-point exceptions in places where they were expected.
- Restore the x87 FPU support on Linux; these are required because foreign functions and libraries can still use x87 even if cmucl itself does not. This is not required on Darwin because x87 is not used there.
- On the ppc port, handle FP exceptions a bit better by not failing if cmucl is unable to interpret the instruction that caused the exception.
- Micro-optimization for sparc in rounding a
DOUBLE-FLOAT
to a 32-bit signed integer. - The compiler can now derive the type of
ROUND
. (But more work is needed.) - Fix an issue with multi-processing
DESTROY-PROCESS
doesn't take effect for a schedulable process because it has no run-reason and/or arrest-reason.
- ANSI compliance fixes:
- The values on the branch cuts for the inverse trig and
hyperbolic functions have been updated. Instead of following
the text in the CLHS, the values are defined according to the
definitions in the formulas. In particular
(atanh x)
for x real and on the branch cut is now continuous with different quadrants. This differs from the description of the branch cut foratanh
in the CLHS. CLEAR-OUTPUT
was not actually doing anything. Now,CLEAR-OUTPUT
will discard any buffered data that has not been written out yet.
- The values on the branch cuts for the inverse trig and
hyperbolic functions have been updated. Instead of following
the text in the CLHS, the values are defined according to the
definitions in the formulas. In particular
- Bugfixes:
- Fix error in pi reduction on x87. It was not noticed previously because the returned values were not used optimally.
- Better error message for empty cond clauses.
- Fix serious error in the complex multiply vop for sparc. Incorrect results were returned under some conditions when the result TN was packed in the same location as one of the argument TNs.
- The float constants for various limits are defined for
double-double floats such as
LEAST-POSITIVE-DOUBLE-DOUBLE-FLOAT
. - When reading very small float values, round to least-positive-foo-float if possible.
(log -0w0)
and(log 0w0)
returns values analogous to the double-float versions.- Fix bug in printing
MOST-NEGATIVE-FIXNUM
. - For Gray streams,
CLEAR-OUTPUT
was callingSTREAM-FORCE-OUTPUT
instead ofSTREAM-CLEAR-OUTPUT
, so the output wasn't actually cleared. - In some situations
KERNEL:DOUBLE-FLOAT-BITS
on x86 would cause a segfault. This has been fixed. - For Linux, motifd is no longer a 64-bit app.
(exp 1d0)
now returns the correctly rounded value of- Previously, it was off by one bit.
INTEGER-DECODE-FLOAT
returns the correct values for denormal doubles. As a side-effect of this fix,DECODE-FLOAT
returns the correct values for denormals, andSCALE-FLOAT
scales denormals correctly.EXT:UNIX-NAMESTRING
no longer returnsNIL
if a directory does not exist. This was a regression from at least 18a.
- Trac Tickets:
- Other changes:
- Improvements to the PCL implementation of CLOS:
- Changes to building procedure:
This release is not binary compatible with code compiled using CMUCL 20e; you will need to recompile FASL files.
See <URL:http://www.cmucl.org> or <URL:http://trac.common-lisp.net/cmucl> for download information, guidelines on reporting bugs, and mailing list details.
We hope you enjoy using this release of CMUCL!