-changes in sbcl-0.8.1 relative to sbcl-0.8.0:
- * minor incompatible change: some nonsensical specialized lambda
- lists (used in DEFMETHOD) which were previously ignored now signal
- errors.
- * minor incompatible change: the system is now aware of the types of
- variables in the COMMON-LISP package, and will signal errors for
- most violations of these type constraints (where previously they
- were silently accepted).
- * minor incompatible change: COMPILE-FILE now uses the freedom
- afforded (ANSI 3.2.2.3) to use derived function types for
- functions defined in the same file. This also permits the system
- to warn on static type mismatches and function
- redefinition. (Currently it does not work with high DEBUG level.)
- * minor incompatible change: VALUES declaration is disabled.
- * When issuing notes, the compiler now signals a condition of type
- SB-EXT:COMPILER-NOTE, and provides an associated MUFFLE-WARNING
- restart for use in user handlers. It is expected that the
- COMPILER-NOTE condition will eventually become a condition
- supertype to a hierarchy of note types, which will then be
- handleable in a similar fashion. However, at the moment, no such
- note subtypes yet exist. (SB-INT:SIMPLE-COMPILER-NOTE exists,
- but it's an implementation detail, not a classification for the
- purpose above.)
- * Changes in type checking closed the following bugs:
- ** type checking of unused values (192b, 194d, 203);
- ** template selection based on unsafe type assertions (192c, 236);
- ** type checking in branches (194bc).
- * A short form of VALUES type specifier has ANSI meaning (it has
- increased the number of situations when SBCL cannot perform type
- checking).
- * fixed bug in DEFSTRUCT: once again, naming structure slots with
- keywords or constants is permissible.
- * STREAM-READ-SEQUENCE and STREAM-WRITE-SEQUENCE now have methods
- defined on the relevant FUNDAMENTAL-BINARY-{INPUT,OUTPUT}-STREAM
- classes. (thanks to Antonio Martinez)
- * improved ANSIness in DESCRIBE: The DESCRIBE function no longer
- outputs FRESH-LINE or TERPRI, and no longer converts its stream
- argument to a pretty-print stream. Instead, it leaves any such
- operations to DESCRIBE-OBJECT methods.
- * bug fix: APROPOS now respects the EXTERNAL-ONLY flag. (reported
- by Teemu Kalvas)
- * bug fix: NIL is now a valid destructuring argument in DEFMACRO
- lambda lists. (thanks to David Lichteblau)
- * bug fix: Defining a generic function with a :METHOD-CLASS being a
- subclass of STANDARD-METHOD no longer causes stack exhaustion.
- (thanks to Gerd Moellmann)
- * fixed bug 246: increased compilation speed of long
- MULTIPLE-VALUE-BIND (and likewise of NTH-VALUE with a constant
- integer argument)
- * a contributed module implementing COMPILER-LET and MACROEXPAND-ALL
- has been included.
- * DEFCONSTANT now throws a condition of type
- SB-EXT:DEFCONSTANT-UNEQL if it is being asked to redefine a
- constant to a non-EQL value; CONTINUE and ABORT restarts
- respectively change and preserve the value.
- * fixed bug 63: The code walker, part of the implementation of CLOS,
- is now better at handling symbol macros.
- * bug fix: There is no longer an internal implementation type named
- CL:LENGTH. (reported by Raymond Toy)
- * bug fix: In macro-like defining macros/special operators the
- implicit block does not enclose the lambda list.
- * fixed bugs 10 and 43: Bare VALUES, AND, OR and MEMBER symbols (not
- enclosed in parentheses) are not suitable as type specifiers, and
- their use properly signals an error now.
- * bug fix: An argument count mismatch for a type specifier in code
- being compiled no longer causes an unhandled error at compile
- time, but signals a compile-time warning.
- * fixed simple vector readable printing
- * bug fix: DESCRIBE takes more care over whether the class
- precedence list slot of a class is bound before accessing it.
- (reported by Markus Krummenacker)
- * bug fix: FORMATTER can successfully compile pretty-printer format
- strings which use variants of the ~* directive inside.
- * bug fix: SEARCH now applies its TEST predicate to the elements of
- the arguments in the correct order. (thanks to Wolfhard Buss)
- * fixed bug 235b: The compiler uses return types of MAPCAR and friends
- in type inference. (thanks to Robert E. Brown)
- * bug fix: Reading in symbols with an explicit package name of ""
- (e.g. '||::FOO) now works correctly. (reported by Henrik Motakef)
- * fixed some bugs revealed by Paul Dietz' test suite:
- ** NIL is now allowed as a structure slot name.
- ** Arbitrary numbers, not just REALs, are allowed in certain
- circumstances in LOOP for-as-arithmetic clauses.
- ** Multiple class redefinitions before slot access no longer
- causes a type error.
- ** (SETF FIND-CLASS) now accepts NIL as an argument to remove the
- association between the name and a class.
- ** Generic functions with non-standard method-combination and over
- five methods all of which return constants no longer return NIL
- after the first few invocations. (thanks to Gerd Moellmann)
- ** CALL-NEXT-METHOD with no arguments now passes the original
- values of the arguments, even in the presence of assignment.
- ** Functions [N]SUBST*, LAST, NRECONC, [N]SUBLIS may return any
- object.
- ** DISASSEMBLE works with closures and funcallable instances.
- ** ADD-METHOD now returns the generic function, not the new method.
- ** FIND-METHOD signals an error if the lengths of the specializers
- is incompatible with the generic function, even if the ERRORP
- argument is true.
- ** TYPE-OF returns recognizeable subtypes of all built-in-types of
- which its argument is a member.
- ** DEFCLASS only redefines the class named by its class-name
- argument if that name is the proper name of the class;
- otherwise, it creates a new class.
- ** SLOT-UNBOUND now correctly initalizes the CELL-ERROR-NAME slot
- of the UNBOUND-SLOT condition to the name of the slot.
- ** (SETF (AREF bv 0) ...) did not work for bit vectors.
- ** SLOT-UNBOUND and SLOT-MISSING now have their return values
- treated by SLOT-BOUNDP, SLOT-VALUE, (SETF SLOT-VALUE) and
- SLOT-MAKUNBOUND in the specified fashion.
+* The system still can't cross-compile itself with
+ *TYPE-SYSTEM-INITIALIZED* (and all the consistency checks that
+ entails), but at least it can compile more of itself that way
+ than it used to be able to, and various buglets which were uncovered
+ by trying to cross-compile itself that way have now been fixed.
+* This release breaks binary compatibility again. This time
+ at least I've incremented the FASL file format version to 2, so that the
+ problem can be detected reliably instead of just causing weird errors.
+* various new style warnings:
+ ** using DEFUN, DEFMETHOD, or DEFGENERIC to overwrite an old definition
+ ** using the deprecated EVAL/LOAD/COMPILE situation names in EVAL-WHEN
+ ** using the lexical binding of a variable named in the *FOO* style
+* DESCRIBE has been substantially rewritten. It now calls DESCRIBE-OBJECT
+ as specified by ANSI.
+* *RANDOM-STATE* is no longer automatically initialized from
+ (GET-UNIVERSAL-TIME), but instead from a constant seed. Thus, the
+ default behavior of the system is to repeat its behavior every time
+ it's run. If you'd like to change this behavior, you can always
+ explicitly set the seed from (GET-UNIVERSAL-TIME); whereas under the
+ old convention there was no comparably easy way to get the system to
+ repeat its behavior every time it was run.
+* Support for the pre-CLTL2 interpretation of FUNCTION declarations as
+ FTYPE declarations has been removed, in favor of their ANSI
+ interpretation as TYPE FUNCTION declarations. (See p. 228 of CLTL2.)
+* The quantifiers SOME, EVERY, NOTANY, and NOTEVERY no longer cons when
+ the types of their sequence arguments can be determined at compile time.
+ This is done through a new open code expansion for MAP which eliminates
+ consing for (MAP NIL ..), and reduces consing otherwise, when sequence
+ argument types can be determined at compile time.
+* The optimizer now transforms COERCE into an identity operation when it
+ can prove that the coerced object is already of the correct type. (This
+ can be a win for machine generated code, including the output of other
+ optimization transforms, such as the MAP transform above.)
+* Credit information has been moved from source file headers into CREDITS.
+* Source file headers have been made more standard.
+* The CASE macro now compiles without complaining even when it has
+ no clauses.
+
+changes in sbcl-0.6.2 relative to sbcl-0.6.1:
+
+* (Note that the way that the PCL macroexpansions were rewritten
+ to accommodate the change in DEFGENERIC below breaks binary
+ compatibility. That is, fasl files compiled under sbcl-0.6.1 may
+ not run under sbcl-0.6.2. Once we get out of alpha releases,
+ i.e. hit release 1.0.0, we'll probably try to maintain binary
+ compatibility between maintenance releases, e.g. between sbcl-1.4.3
+ and sbcl-1.4.4. Until then, however, it might be fairly common
+ for maintenance releases to break binary compatibility.)
+* A bug in the calculation of WARNINGS-P and FAILURE-P in COMPILE-FILE
+ has been fixed.
+* The reporting of unhandled signals has been changed to print some
+ explanatory text as well as the report form. (Previously only
+ the report form was printed.)
+* The macroexpansion for DEFGENERIC now DECLAIMs the function that
+ it defines, so that the compiler no longer issues undefined function
+ warnings for compiled-but-not-yet-loaded generic functions.
+* The CLTL-style "LISP" and "USER" nicknames for the "COMMON-LISP"
+ and "COMMON-LISP-USER" packages have been removed. Now only the "CL"
+ and "CL-USER" standard nicknames from the "11.1.2 Standardized Packages"
+ section of the ANSI spec are supported.
+* The "" nickname for the "KEYWORD" package has been removed.
+ The reader still handles symbol tokens which begin with a package marker
+ as keywords, but it doesn't expose its mechanism for doing so in the
+ (PACKAGE-NICKNAMES (FIND-PACKAGE "KEYWORD")) list.
+* The system now issues STYLE-WARNINGs for contradictory TYPE
+ proclamations. (Warnings for contradictory FTYPE proclamations would
+ be nice too, but those can't be done usefully unless the type system
+ is made smarter about FUNCTION types.)
+* The names of source files "*host-*.lisp" and "*target-*.lisp" have been
+ systematized, so that "*target-*.lisp is supposed to exist only on the
+ target and imply that there's a related file which exists on the
+ host, and *host-*.lisp is supposed to exist only on the host and imply
+ that there's a related file which exists on the target. This involves a
+ lot of renaming. Hopefully the acute confusion caused by the renaming
+ will be justified by the reduction in chronic confusion..
+ ** runtime-type.lisp -> early-target-type.lisp
+ ** target-type.lisp -> late-target-type.lisp
+ ** early-host-format.lisp -> early-format.lisp
+ ** late-host-format.lisp -> late-format.lisp
+ ** host-error.lisp -> misc-error.lisp
+ ** early-error.lisp -> early-target-error.lisp
+ ** late-error.lisp -> late-target-error.lisp
+ ** host-defboot.lisp -> early-defboot.lisp
+ ** code/misc.lisp -> code/target-misc.lisp
+ ** code/host-misc.lisp -> code/misc.lisp
+ ** code/numbers.lisp -> code/target-numbers.lisp
+ ** code/early-numbers.lisp -> numbers.lisp
+ ** early-host-type.lisp -> early-type.lisp
+ ** late-host-type.lisp -> late-type.lisp
+ ** host-typep.lisp -> typep.lisp
+ ** load.lisp -> target-load.lisp
+ ** host-load.lisp -> load.lisp
+ ** host-disassem.lisp -> disassem.lisp
+ ** host-insts.lisp -> insts.lisp
+ ** byte-comp.lisp -> target-byte-comp.lisp
+ ** host-byte-comp.lisp -> byte-comp.lisp
+ ** host-signal.lisp -> signal.lisp
+ ** host-defstruct.lisp -> defstruct.lisp
+ ** late-target-type.lisp -> deftypes-for-target.lisp
+ Furthermore, several other previously target-only files foo.lisp (e.g.
+ hash-table.lisp and random.lisp) have been split into a target-and-host
+ foo.lisp file and a target-only target-foo.lisp file, with their key type
+ definitions in the target-and-host part, so that the cross-compiler will
+ know more about target types.
+* DEFSTRUCT BACKEND, and the BACKEND-valued *BACKEND* variable, have
+ gone away. In their place are various *BACKEND-FOO* variables
+ corresponding to the slots of the old structure.
+* A bug which caused the SB-COLD bootstrap-time package to be propagated
+ into the target SBCL has been fixed.
+* The chill.lisp system for loading cold code into a running SBCL
+ now works better.
+* Support for the CMU CL "scavenger hook" extension has been removed.
+ (It was undocumented and unused in the CMU CL sources that SBCL was
+ derived from, and stale in sbcl-0.6.1.)
+* Various errors in the cross-compiler type system were detected
+ by running the cross-compiler with *TYPE-SYSTEM-INITIALIZED*
+ (enabling various consistency checks). Many of them were fixed,
+ but some hard problems remain, so the compiler is back to
+ running without *TYPE-SYSTEM-INITIALIZED* for now.
+* As part of the cross-compiler type system cleanup, I implemented
+ DEF!TYPE and got rid of early-ugly-duplicates.lisp.
+* I have started adding UNCROSS calls throughout the type system
+ and the INFO database. (Thus perhaps eventually the blanket UNCROSS
+ on cross-compiler input files will be able to go away, and various
+ kludges with it).
+* CONSTANTP now returns true for quoted forms (as explicitly required
+ by the ANSI spec).