obscure ANSI requirements
changes in sbcl-0.8.4 relative to sbcl-0.8.3:
+ * incompatible change: The --disable-debugger command line
+ option now clobbers the debugger at a more fundamental
+ level, by redefining #'INVOKE-DEBUGGER instead of by
+ rebinding *DEBUGGER-HOOK*. The main difference is that BREAK
+ is specified by ANSI to ignore *DEBUGGER-HOOK* and
+ INVOKE-DEBUGGER regardless. Under the old system, BREAK would
+ enter the debugger REPL and then suffer recursive errors
+ because *DEBUG-IO* is also messed up in --disable-debugger mode;
+ while under the new system, BREAK in --disable-debugger mode
+ terminates the system just as an unhandled error would.
* fixed compiler performance when processing loops with a step >1;
* bug fix: DOCUMENTATION now retrieves generic function
documentation. Also, DOCUMENTATION and (SETF DOCUMENTATION)
* fixed bug 285: TRUNCATE on bignum arguments, and indeed bignum
arithmetic in general, is now much more reliable on the PPC
platform.
+ * bug fix: LOGCOUNT on (UNSIGNED-BYTE 64) objects on the Alpha
+ platform now returns the right answer.
* optimization: restored some effective method precomputation in
CLOS (turned off by an ANSI fix in sbcl-0.8.3); the amount of
precomputation is now tunable.
performance of the compiler by about 20%.
* optimization: performance of FILL (and :INITIAL-ELEMENT) on
simple-base-strings and simple-bit-vectors is improved.
+ * optimization: the optimization of 32-bit logical and arithmetic
+ functions introduced in version 0.8.3 on the x86 has been
+ implemented on the mips, ppc and sparc platforms; an
+ implementation of the same facility, but for 64-bit arithmetic,
+ has been added for the alpha.
* microoptimization: the compiler is better able to make use of the
x86 LEA instruction for multiplication by constants.
* bug fix: in some situations compiler did not report usage of
generic arithmetic in (SPEED 3) policy.
* bug 145b fix: compiler used wrong type specifier while converting
MEMBER-types to numeric.
+ * bug fix: COMPILE-FILE must bind *READTABLE*. (reported by Doug
+ McNaught)
+ * bug fix: (SETF AREF) on byte-sized-element arrays with constant
+ index argument now works properly on the Alpha platform.
+ * bug fix: floating point exception treatment on the Alpha platform
+ is improved.
+ * bug fix: FILE-POSITION works much better on string input and
+ output streams. (thanks to Nikodemus Siivola)
+ * bug fix: many threading/garbage collection symptoms sorted.
+ SB-THREAD:INTERRUPT-THREAD now safe to call on a thread that
+ might be pseudo-atomic.
+ * internal change: Stopping for GC is now done with signals not
+ ptrace. GC is now done in whichever thread wanted it, instead of
+ in the parent.
+ * bug fix: GC hooks (missing since 0.8) reinstated, so finalizers
+ work again.
+ * bug fix: result form in DO is not contained in the implicit
+ TAGBODY.
+ * incompatible change: ICR structure is changed; the value part of
+ CONTINUATION is now called LVAR; corresponding functions are
+ renamed (e.g. SB-C::CONTINUATION-TYPE has become SB-C::LVAR-TYPE).
+ * added type deriver for ISQRT (thanks to Robert E. Brown).
+ * bug fix: better support for loading from the command line when an
+ initialization file sets (READTABLE-CASE *READTABLE*). (thanks
+ to Adam Warner)
* fixed some bugs revealed by Paul Dietz' test suite:
** the RETURN clause in LOOP is now equivalent to DO (RETURN ...).
** ROUND and FROUND now give the right answer when given very
** unsigned addition of a 32-bit constant with the high bit set no
longer causes an internal compiler error on the x86.
** LOGBITP accepts a non-negative bignum as its INDEX argument.
+ ** compiler incorrectly derived types of DPB and DEPOSIT-FIELD
+ with negative last argument.
+ ** byte specifiers with zero size and position no longer cause
+ an error during type derivation.
+ ** bignum multiplication on the Alpha platform now returns the
+ right answer.
+ * porting: The system now builds on SuSE AMD64, although it still
+ generates a 32-bit binary.
+ * .fasl file incompatibility: The fasl file version number has
+ been incremented (because of the changes to internal compiler
+ data structures referred to above).
+
+changes in sbcl-0.8.5 relative to sbcl-0.8.4:
+ * New code in contrib/sb-introspect (still probably not entirely
+ stable yet) provides some support for smart Lisp development
+ environments like SLIME.
+ * The conditions signalled for errors occurring when loading .fasl
+ files have been systematized (inheriting from SB-EXT:INVALID-FASL)
+ in a way which should help ASDF recover gracefully.
+ * The REQUIRE/PROVIDE behavior of *MODULE-PROVIDER-FUNCTIONS*
+ stuff has been cleaned up. If you code contrib/ stuff, this might
+ affect you, and you can look at contrib/README, contrib/STANDARDS,
+ and/or the 0.8.4.27 diff to check.
+ * In full calls the compiler now does not generate checks for declared
+ argument types for all arguments.
+ * various threading fixes
+ ** and some experimental patches which didn't make it into
+ the main tree for this release, but which are shipped in
+ contrib/experimental-thread.patch as a possible fix for some
+ failures (deadlock, spinning...) in GC-intensive multithreaded
+ applications.
+ * fixed PPC build problem (source code incompatibility of different
+ library versions): added offsetof() hackery which attempts to divine
+ where glibc maintainers put uc_mcontext today
+ * fixed bug 282: compiler does not trust type assertions while passing
+ arguments to a full call.
+ * fixed bug 261: compiler allows NIL or "no value" to be accepted for
+ &OPTIONAL VALUES type parameter.
+ * fix bug 214: algorithm for noting rejected templates is now more
+ similar to that of template seletion. (also reported by rydis on
+ #lisp)
+ * fixed bug 141b: printing backquoted information readably and prettily
+ inserts a space where necessary.
+ * bug fix: obviously wrong type specifiers such as (FIXNUM 1) or
+ (CHARACTER 10) are now reported as errors, rather than propagated
+ as unknown types. (reported by piso on #lisp)
+ * bug fix: the :IF-EXISTS argument to OPEN now behaves correctly
+ with values NIL and :ERROR. (thanks to Milan Zamazal)
+ * fixed bug 191c: CLOS now does proper keyword argument checking as
+ described in CLHS 7.6.5 and 7.6.5.1.
+ * bug fix: LOOP forms using NIL as a for-as-arithmetic counter no
+ longer raise an error; further, using a list as a for-as-arithmetic
+ counter now raises a meaningful error.
+ * fixed bug 213a: even fairly unreasonable CONS type specifiers are
+ now understood by sequence creation functions such as MAKE-SEQUENCE
+ and COERCE.
+ * fixed bug 46k: READ-BYTE now signals an error when asked to read from
+ a STRING-INPUT-STREAM.
+ * compiler enhancement: SIGNUM is now better able to derive the type
+ of its result.
+ * type declarations inside WITH-SLOTS are checked. (reported by
+ salex on #lisp)
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** incorrect optimization of TRUNCATE for a positive first
+ argument and negative second.
+ ** compiler failure in let-convertion during flushing dead code.
+ ** compiler failure while deriving type of TRUNCATE on an
+ interval, containing 0.
+ ** ASH of a negative bignum by a negative bignum count now returns
+ -1, not 0.
+ ** intersection of CONS types now canonicalizes properly, fixing
+ inconsistencies in SUBTYPEP.
+
+changes in sbcl-0.8.6 relative to sbcl-0.8.5:
+ * fixed a bootstrapping bug: the build process no longer assumes
+ that the various BOOLE-related constants have the same value in
+ host and target lisps. (noted by Paul Dietz' test suite on an
+ SBCL binary built from CLISP)
+ * The system can now be dynamically linked on the MIPS platform,
+ which enables dynamic loading of foreign code from Lisp. (thanks
+ to Ralf Baechle for discussions on the MIPS ABI)
+ * The system now records debugging information for its own source
+ files in a filesystem-position-independent manner, relative to
+ the "SYS" logical host.
+ * fixed a compiler bug: MV-LET convertion did not check references
+ to the "max args" entry point. (reported by Brian Downing)
+ * tweaked disassembly notes to be less confident about proclaiming
+ some instruction as an LRA. (thanks to Brian Downing)
+ * contrib update: SB-ACLREPL is now threadsafe; multiple listeners
+ now each have their own history, command character, and other
+ characteristics. (thanks to David Lichteblau)
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** compiler failure in compiling LOGAND expressions including a
+ constant 0
+ ** Implementation of ASH-MOD32 on X86 and PPC did not work for the
+ shift greater than 32.
+ ** FLUSH-DEST did not mark blocks for type check regeneration.
+ ** HANDLER-CASE failed to accept declarations in handler clauses
+ in some circumstances.
+
+changes in sbcl-0.8.7 relative to sbcl-0.8.6:
+ * When built with the :SB-FUTEX feature, threaded builds now take
+ advantage of the "fast userspace mutex" facility in Linux kernel 2.6
+ for faster/more reliable mutex and condition variable support.
+ * Incompatible change (but one you probably shouldn't have been using
+ anyway): the interface and code for arbitrating between multiple
+ threads in the same user session has been redesigned.
+ * bug fix: GET-SETF-EXPANSION no longer throws an internal type
+ error when called without an explicit environment argument.
+ (thanks to Nikodemus Siivola)
+ * bug fix: buffered :DIRECTION :IO streams are less likely to become
+ confused about their position. (thanks to Adam Warner and Gerd
+ Moellmann)
+ * bug fix: Pretty printing backquoted forms with unquotations in the
+ argument list position of various code constructs such as LAMBDA
+ now works correctly. (reported by Paul Dietz)
+ * bug fix: Pretty printing unquotations no longer loses all
+ stream position information.
+ * optimization: performance of string output streams is now less
+ poor for multiple small sequence writes.
+ * optimization: performance of CSUBTYPEP in the presence of complex
+ expressions involving CONS and NOT many times has been improved.
+ (reported by Paul Dietz)
+ * ASDF-INSTALL bug fix: now parses *PROXY* properly. (thanks to
+ Sean Ross)
+ * SB-SIMPLE-STREAMS enhancement: simple-streams can now be used as
+ streams for the REPL, for the debugger, and so on. (thanks to
+ David Licteblau)
+ * DEFINE-CODITION is more efficient. (thanks to Brian Mastenbrook)
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** the value of the :REHASH-THRESHOLD argument to MAKE-HASH-TABLE
+ is ignored if it is too small, rather than propagating through
+ to cause DIVIDE-BY-ZERO or FLOATING-POINT-OVERFLOW errors.
+ ** extremely complex negations of CONS types were not being
+ sufficiently canonicalized, leading to inconsistencies in
+ SUBTYPEP.
+ ** VALUES tranformer lost derived type.
+
+changes in sbcl-0.8.8 relative to sbcl-0.8.7:
+ * minor incompatible change: parsing of namestrings on a physical
+ (Unix) host has changed; numbers after the final #\. in a
+ namestring are no longer interpreted as a version field. This is
+ intented to be largely invisible to the user, except that the
+ meaning of the namestring "*.*.*" has changed: it now refers to a
+ pathname with :TYPE :WILD :NAME #<pattern "*.*">. This namestring
+ should usually be replaced by
+ (make-pathname :name :wild :type :wild :version :wild)
+ with the added benefit that this is more likely to be portable.
+ As a consequence of this change, the :IF-EXISTS :NEW-VERSION
+ option to OPEN now signals an error if the file being opened
+ exists; this may have an impact on existing code.
+ * fixed bug 190: RUN-PROGRAM should now work properly, respecting
+ signals received, on the PowerPC platforms (both Linux and
+ Darwin). (thanks to Pierre Mai for pointing out the location of
+ the error)
+ * several fixes on OS X: The system now builds and runs cleanly on
+ Panther (10.3), and works around sigreturn bug (no more SIGFPEs).
+ (thanks to Brian Mastenbrook)
+ * bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with
+ second-resolution: integer multiples of 1/3600 between -24 and 24.
+ (thanks to Vincent Arkesteijn)
+ * bug fix: functions =, /=, <, <=, >, >= did not check the argument
+ type when called with 1 argument; PEEK-CHAR checked type of
+ PEEK-TYPE only after having read first character from a
+ stream. (reported by Peter Graves)
+ * bug fix: the garbage collector now has much better locality
+ behaviour, and in particular no longer treats all memory as being
+ exhausted when many small objects point to each other in a deeply
+ recursive manner.
+ * bug fix: arrays specialized on (UNSIGNED-BYTE 15) are now
+ recognized as being TYPEP their class.
+ * bug fix: the PUSHNEW documentation string has been corrected.
+ (thanks to Vincent Arkesteijn)
+ * bug fix: defaulting of the value for the last of an atypically
+ large number of multiple values being bound was not being
+ performed correctly on the Alpha or PPC platforms
+ * optimization: implemented multiplication as a modular
+ (UNSIGNED-BYTE 32) operation on the x86 backend.
+ * optimization: SEARCH on simple-base-strings can now be open-coded.
+ (see also contrib/compiler-extras.lisp for inspiration for
+ teaching the compiler about the Boyer-Moore algorithm).
+ * value, returned by MAX (and MIN) called with several EQUALP, but
+ not EQL, arguments now does not depend on compiler settings.
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** in stack analysis liveness information is propagated from
+ non-local entry points.
+ ** pathwise CAST removing failed when the CAST node did not start
+ a block.
+ ** INPUT-STREAM-P, OUTPUT-STREAM-P, STREAM-ELEMENT-TYPE and
+ OPEN-STREAM-P signal a TYPE-ERROR if their argument is not a
+ stream.
+ ** LOAD-LOGICAL-PATHNAME-TRANSLATIONS returns NIL if the logical
+ host is already defined.
+ ** RENAME-FILE works on streams instead of signalling an internal
+ type error.
+ ** PEEK-CHAR uses the current readtable when determining whether
+ or not a character is whitespace.
+ ** MERGE-PATHNAMES handles the case when the pathname does not
+ specify a name while the default-pathname specifies a version.
+ ** Pathnames now stand a better chance of respecting print/read
+ consistency.
+ ** Attempting to use standardized file system operators with a
+ pathname with invalid :DIRECTORY components signals a
+ FILE-ERROR.
+ ** OPEN :DIRECTION :IO no longer fails to work on non-existent
+ files.
+ ** DIRECTORY on logical pathnames is more correct.
+ ** CLEAR-INPUT, CLEAR-OUTPUT, FINISH-OUTPUT and FORCE-OUTPUT
+ signal a TYPE-ERROR if their argument is not a stream.
+ ** READ-BYTE and WRITE-BYTE signal a TYPE-ERROR if their stream
+ designator argument does not designate a stream.
+ ** OPEN-STREAM-P and INPUT-STREAM-P on synonym streams work by
+ examining the synonym.
+ ** STREAM-ELEMENT-TYPE and FRESH-LINE on broadcast-streams now
+ work as specified.
+ ** OPEN and WITH-OPEN-STREAM allow opening streams with
+ element-type larger than ([UN]SIGNED-BYTE 32).
+
+changes in sbcl-0.8.9 relative to sbcl-0.8.8:
+ * deprecation of old extension: *DEBUG-PRINT-LEVEL* and
+ *DEBUG-PRINT-LENGTH* are now deprecated in favor of the new, more
+ general SB-DEBUG:*DEBUG-PRINT-VARIABLE-ALIST* mechanism. (This
+ should matter to you only if you rebind the printer control
+ variables and then find you want different bindings in the
+ debugger than in the ordinary execution of your program.)
+ * The runtime build system has been tweaked to support building
+ (on SPARC/SunOS) using a C compiler which invokes Sun's own
+ assembler and linker. (thanks to Nikodemus Siivola)
+ * Unbound, undefined, undeclared variables now trigger full
+ WARNINGs, not just STYLE-WARNINGs, on the assumption that this is
+ more often programmer error than deliberate exploitation of undefined
+ behaviour.
+ * optimization: the hash algorithm for strings has changed to one
+ that is less vulnerable to spurious collisions. (thanks to Juho
+ Snellman)
+ * optimization: VECTOR-POP, VECTOR-PUSH-EXTEND and REPLACE do less
+ needless bounds checking. (thanks to Juho Snellman)
+ * optimization: implemented multiplication as a modular
+ (UNSIGNED-BYTE 32) operation on the PPC backend.
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** ADJUST-ARRAY now copies the datum in a zero rank array if
+ required.
+ ** ADJUST-ARRAY no longer adjusts non-adjustable arrays.
+ ** MAKE-STRING-INPUT-STREAM accepts NIL as a value for :END.
+ ** MAKE-STRING-INPUT-STREAM functions correctly for strings with
+ element-type NIL.
+ ** CLEAR-INPUT accepts NIL and T for its (optional) stream
+ argument.
+ ** Ratios can now be printed correctly with *PRINT-BASE* bound to
+ 2, 8 or 16.
+ ** ECHO-STREAMs no longer attempt to echo the end of file value to
+ their output stream on EOF from read.
+ ** CONCATENATED-STREAM-STREAMS discards constituent streams which
+ have been read to end-of-file.
+ ** CLOSE works as expected on the null CONCATENATED-STREAM, and on
+ STRING-STREAMS.
+ ** Printing symbols with *PRINT-CASE* :CAPITALIZE respects the
+ description of determination of which consecutive characters
+ constitute a word.
+ ** Printing the "Space" character with escaping on now yields "#\\ ",
+ rather than "#\\Space", as mandated by ANSI 22.1.3.2.
+ ** Reading floating-point numbers with *READ-BASE* set to a number
+ less than 10 works correctly.
+ ** Reading floating-point numbers with *READ-BASE* set to a number
+ more than 10 works correctly.
+ ** Printing with *PRINT-READABLY* targets the standard readtable, not
+ the readtable currently in effect.
+
+changes in sbcl-0.8.10 relative to sbcl-0.8.9:
+ * Support for the forthcoming 2.0 version of the NetBSD kernel
+ running on x86 hardware has been added. (thanks to Perry
+ E. Metzger most immediately, and others for their past work)
+ * SBCL now runs on OpenBSD 3.4. (Thanks to Scott Parish; 3.4 is the
+ current release version; SBCL's OpenBSD support had been broken
+ since about the time of OpenBSD's switch to ELF binary format.)
+ * [placeholder for DX summary]
+ ** user code with &REST lists declared dynamic-extent, under high
+ speed or space and low safety and debug optimization policy.
+ * The manual has been converted to Texinfo format and the debugger
+ chapter from the cmucl manual has been added.
+ * A facility has been added to extract documentation strings from
+ sbcl and store them as Texinfo-formatted snippets for inclusion in
+ the manual (via Texinfo's @include directive)
+ * bug fix: compiler emitted division in optimized DEREF. (thanks for
+ the test case to Dave Roberts)
+ * bug fix: multidimensional simple arrays loaded from FASLs had fill
+ pointers. (reported by Sean Ross)
+ * bug fix: PROFILE output is printed nicely even for large numerical
+ values. (thanks to Zach Beane)
+ * bug fix: streams with element-type (SIGNED-BYTE <N>) for <N>
+ greater than 32 handle EOF correctly.
+ * bug fix: on X86 an immediate argument of the IMUL instruction is
+ correctly printed in disassembly. (thanks to Lutz Euler)
+ * bug fix: class slots in redefined classes preserve their old
+ values. (thanks to Bruno Haible and Nikodemus Siivola)
+ * bug fix: compilation of funcalls of CXX+R (e.g. CDDR) now
+ succeeds. (reported by Marco Baringer)
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** READ-SEQUENCE now works on ECHO-STREAMs.
+ ** RATIONALIZE works more according to its specification. (thanks
+ to Bruno Haible)
+
+changes in sbcl-0.8.11 relative to sbcl-0.8.10:
+ * fixed bug 320: Shared to local slot value transfers in class
+ redefinitions now happen corrently from superclasses as
+ well. (reported by Bruno Haible)
+ * fixed bug 316: SHIFTF now accepts VALUES forms. (reported by Bruno
+ Haible)
+ * fixed bug 322: DEFSTRUCT :TYPE LIST type predicates now handle
+ improper lists correctly. (reported by Bruno Haible)
+ * fixed bug 313: source-transform for <fun-name> was erroneously
+ applied to a call of a value of a variable with name <fun-name>.
+ (reported by Antonio Menezes Leitao)
+ * fixed bug 307: The obsolete instance protocol ensures that
+ subclasses are properly obsoleted. (thanks to Nikodemus Siivola)
+ * on X86 fixed bug 298, revealed by Paul F. Dietz' test suite: SBCL
+ can remove dead unknown-values globs from the middle of the stack.
+ * added a new restart to *BREAK-ON-SIGNALS* handling to make it
+ easier to resume long computations after using *BREAK-ON-SIGNALS*
+ to diagnose and fix failures. (thanks to Nikodemus Siivola)
+ * fixed bug reported by PFD in lisppaste #747 (and Bruno Haible from
+ CLISP test suite): WRITE-TO-STRING is not constant-foldable.
+ * fixed bugs in COMPLEX type specifier: UPGRADED-COMPLEX-PART-TYPE
+ is now consistent with (COMPLEX <x>); bugs in treatment of COMPLEX
+ MEMBER and UNION types have likewise been fixed. (thanks to Bruno
+ Haible)
+ * fixed a (fairly theoretical) bug in string printing: if
+ *PRINT-READABLY* is true, signal PRINT-NOT-READABLE if the string
+ does not have array-element-type equal to the most general string
+ type.
+ * fixed bug: SET-PPRINT-DISPATCH does not immediately resolve
+ function name. (thanks to Nikodemus Siivola)
+ * fixed bug: compile-time format string checker failed on
+ non-closed ~{. (reported by Thomas F Burdick)
+ * fixed bug: as reported by Kalle Olavi Niemitalo on #lisp IRC,
+ don't warn on legal loop code involving more than one aggregate
+ boolean. (thanks to Nikodemus Siivola)
+ * optimization: rearranged the expansion of various defining macros
+ so that each expands into only one top-level form in a
+ :LOAD-TOPLEVEL context; this appears to decrease fasl sizes by
+ approximately 10%.
+ * fixed some bugs revealed by Paul Dietz' test suite:
+ ** FILE-POSITION works as specified on BROADCAST-STREAMs.
+ ** CAST optimizer forgot to flush argument derived type.
+ ** print/read consistency on floats is now orders of magnitude
+ more likely. (thanks also to Bruno Haible for a similar report
+ and discussions)
+ ** removed stack cleaning in the cleanup part of UNWIND-PROTECT.
+ ** IMAGPART is specified (infelicitously) to return (* 0 <thing>)
+ for objects of type REAL. Make it so.
+ ** SXHASH is specified (infelicitously) to respect similarity,
+ which means that (SXHASH 0.0) must equal (SXHASH -0.0). Make
+ it so. (thanks to Markus Ziegler)
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles