-changes in sbcl-0.7.0 relative to sbcl-0.6.13:
-* major incompatible change: The default fasl file extension, i.e. the
- default extension for files produced by COMPILE-FILE, has changed
- to ".fasl", for all architectures. (No longer ".x86f" and ".axpf".)
-* compiler changes:
- ** There are many changes in the implementation of the compiler.
- SBCL is now essentially a compiler-only implementation of ANSI
- Common Lisp. EVAL still "interprets" a few special cases, but
- almost all the interesting cases are handled by creating
- a LAMBDA expression, calling COMPILE on it, then calling
- FUNCALL on the result.
- ** The EVAL-WHEN code has been rewritten to be ANSI-compliant, and
- various related bugs (IR1-1, IR1-2, IR1-3, IR1-3a) have gone away.
- Since the code is newer, there might still be some new bugs
- (though not as many as before Martin Atzmueller's fixes:-). But
- the new code is substantially simpler and clearer, and hopefully
- any remaining bugs will be simpler, less fundamental, and more
- fixable then the bugs in the old code.
- ** The revised compiler is still a little unsteady on its feet.
- In particular,
- *** The debugging information it produces (particularly the names
- of FUNCTION objects) is sometimes much less useful than what
- the old compiler produced.
- *** The support for inlining FOO when you (DECLAIM (INLINE FOO))
- then do (DEFUN FOO ..) in a non-null lexical environment (e.g.
- within a MACROLET) has been temporarily weakened.
- ** There are new compiler optimizations for various functions:
- *** the sequence functions FIND, POSITION, FIND-IF, POSITION-IF,
- FIND-IF-NOT, POSITION-IF-NOT, and FILL
- *** the math functions TRUNCATE, FLOOR, and CEILING
- *** the function-of-all-trades COERCE
- Mostly these should be transparent, but there's one
- potentially-annoying problem (bug 117): when the compiler
- inline-expands a function and does type analysis on the result,
- it can create control paths which have type mismatches, and
- when it can't prove that those control paths aren't taken,
- it will issue WARNINGs about the type mismatches. This is
- a particular problem in practice for the new sequence functions.
- It's not clear how this should be fixed, and for now, a
- workaround is given in the entry for 117 in the BUGS file.
- ** (Because of the interaction between the two previous items --
- occasional inlining problems and new inline expansions -- some
- of the new sequence function optimizations won't really kick in
- completely until debugging information, and then inlining, are
- straightened out in some future version.)
-* minor incompatible changes:
- ** As part of a bug fix by Christophe Rhodes to DIRECTORY behavior,
- DIRECTORY no longer implicitly promotes NIL slots of its
- pathname argument to :WILD. In particular, when you ask for the
- contents of a directory (which you used to be able to do without
- explicit wildcards, e.g. (DIRECTORY "/tmp/")) you now need to use
- explicit wildcards, e.g. (DIRECTORY "/tmp/*.*").
- ** changes in behavior that ANSI explicitly defines to be
- implementation dependent:
- *** The new compiler-only implementation still conforms with ANSI,
- but acts a little different than before. Besides the obvious
- changes in performance tradeoffs (that the cost per form passed
- to EVAL has gone up, and the cost per form executed by EVAL
- has gone down), the behavior of the system changes a little
- because there are no longer any interpreted function objects.
- COMPILED-FUNCTION-P is now synonymous with FUNCTIONP, and
- e.g. doing COMPILE on the output of interactive DEFUN is
- now a no-op.
- *** The value of INTERNAL-TIME-UNITS-PER-SECOND has been increased
- from 100 to 1000.
- *** The default for the USE list in MAKE-PACKAGE and DEFPACKAGE
- has changed from (:CL) to NIL.
- *** The CHAR-NAME of unprintable ASCII characters which, unlike
- e.g. #\Newline and #\Tab, don't have names specified in the
- ANSI Common Lisp standard, is now based on their ASCII symbolic
- names (#\Nul, #\Soh, #\Stx, etc.) The old CMU-CL-style names
- (#\Null, #\^a, #\^b, etc.) are still accepted by NAME-CHAR, but
- are no longer used for output.
- ** changes in internal implementation constants:
- *** The default value of *BYTES-CONSED-BETWEEN-GCS* has doubled, to
- 4 million. (If your application spends a lot of time GCing and
- you have a lot of RAM, you might want to experiment with
- increasing it even more.)
- ** The SB-C-CALL package has been merged into the SB-ALIEN package.
- However, almost all old code should still continue to work without
- immediate update, as SB-C-CALL is now a (deprecated) nickname
- for SB-ALIEN.
- ** Old operator names in the style DEF-FOO are now deprecated in
- favor of new corresponding names DEFINE-FOO, for consistency with
- the naming convention used in the ANSI standard (DEFSTRUCT, DEFVAR,
- DEFINE-CONDITION, DEFINE-MODIFY-MACRO..). This mostly affects
- internal symbols, but a few supported extensions like
- SB-ALIEN:DEF-ALIEN-FUNCTION are also affected. (So e.g.
- DEF-ALIEN-FUNCTION becomes DEFINE-ALIEN-FUNCTION.)
- ** The debugger prompt sequence now goes "5]", "5[2]", "5[3]",
- etc. as you get deeper into recursive calls to the debugger
- command loop, instead of the old "5]", "5]]", "5]]]"
- sequence. (I was motivated to do this when squabbles between
- ILISP and SBCL left me very deeply nested in the debugger. In the
- short term, this change will probably provoke more ILISP/SBCL
- squabbles, but hopefully it will be an improvement in the long run.)
- ** SB-ALIEN:DEFINE-ALIEN-FUNCTION (also known by the old deprecated
- name DEF-ALIEN-FUNCTION) now does DECLAIM FTYPE for the defined
- function, since declaiming return types involving aliens is
- (1) annoyingly messy to do by hand and (2) vital to efficient
- compilation of code which calls such functions.
- ** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are no
- longer reexported by the SB-EXT package. They're solely useful
- for alien code, so it seems more logical that you should get
- them from the SB-ALIEN package, not in SB-EXT.
- ** :SB-CONSTRAIN-FLOAT-TYPE, :SB-PROPAGATE-FLOAT-TYPE, and
- :SB-PROPAGATE-FUN-TYPE are no longer considered to be optional
- features. Instead, the code that they used to control is always
- built into the system.
-* many other bug fixes
- ** DEFSTRUCT and DEFCLASS have been substantially updated to take
- advantage of the new EVAL-WHEN stuff and to clean them up in
- general, and they are now more ANSI-compliant in a number of
- ways. Martin Atzmueller is responsible for a lot of this.
- ** Besides the cleanups discussed above, Martin Atzmueller fixed
- several other bugs:
- *** fixes in READ-SEQUENCE and WRITE-SEQUENCE
- *** correct ERROR type for various file operations
- *** some fixes for Lisp streams
- *** DEFMETHOD syntax checking
- *** changing old weird representation of debug information as
- strings (which, among their other deficiencies, don't transform
- correctly when you rename packages, and don't change their
- print representation when you change things like *PACKAGE*
- and *PRINT-LENGTH*) to symbols and lists of symbols
- He also made several improvements and fixed several bugs in DESCRIBE.
- ** Alexey Dejneka fixed many bugs, including classic bugs and bugs he
- discovered himself:
- *** misbehavior of WRITE-STRING/WRITE-LINE
- *** LOOP over keys of a hash table, LOOP bugs 49b and 81 and 103,
- and several other LOOP problems as well
- *** DIRECTORY when similar filenames are present
- *** DEFGENERIC with :METHOD options
- *** bug 126, in (MAKE-STRING N :INITIAL-ELEMENT #\SPACE))
- *** bug in the optimization of ARRAY-ELEMENT-TYPE
- *** argument ordering in FIND with :TEST option
- *** mishandled package designator argument in APROPOS-LIST
- *** various problems in the backquote readmacro
- *** a bug in APROPOS
- *** probably some others that I'm not describing very well here,
- since the CVS log documents them by reference to sbcl-devel
- messages, and the SourceForge archives aren't working well.:-(
- ** Dan Barlow improved the Alpha port (and is making progress on the
- PPC port, for those of you who think different).
- ** Besides the DIRECTORY fixes and changes mentioned elsewhere,
- Christophe Rhodes cleaned up the system self-test scripts (in tests/*),
- contributed the optimization of FIND-IF-NOT and POSITION-IF-NOT, and
- continues to work on the SPARC port (for those of you in a position
- to look down upon our little PC-compatible boxes from a great height).
- ** PPRINT-LOGICAL-BLOCK now copies the *PRINT-LINES* value on entry
- and uses that copy, rather than the current dynamic value, when
- it's trying to decide whether to truncate output. Thus e.g.
- (let ((*print-lines* 50))
- (pprint-logical-block (stream nil)
- (dotimes (i 10)
- (let ((*print-lines* 8))
- (print (aref possiblybigthings i) stream)))))
- should now truncate the logical block only at 50 lines, instead of
- often truncating it at 8 lines, as it did before.
-* The doc/cmucl/ directory, containing old CMU CL documentation
- from the time of the fork, is no longer part of the base system.
- SourceForge has shut down its anonymous FTP service, and with it
- my original plan for distributing the old CMU CL documentation
- there. For now, if you need these files you can download an old
- SBCL source release and extract them from it.
-* The fasl file version number changed again, for dozens of reasons,
- some of which are apparent above.
+changes in sbcl-0.7.10 relative to sbcl-0.7.9:
+ * Support for building SBCL for MIPS platforms running in
+ little-endian mode has now been checked in, and basic
+ functionality on said platforms verified.
+ * minor incompatible change: PCL now records the pathname of a file
+ in which methods and the like are defined, rather than its
+ truename.
+ * minor incompatible change: TRUENAME now considers the truename of
+ a file naming a directory to be the pathname with :DIRECTORY
+ component indicating that directory.
+ * minor incompatible change: a NAMED clause in the extended form of
+ LOOP no longer causes a BLOCK named NIL to surround the LOOP. The
+ reason for the previous behaviour is unclear.
+ * more systematization and improvement of CLOS and MOP conformance
+ in PCL (thanks to Gerd Moellman and Pierre Mai):
+ ** the standard ANSI CL generic function NO-NEXT-METHOD is now
+ implemented;
+ ** DEFINE-METHOD-COMBINATION no longer signals an error for
+ primary methods with no specializers;
+ ** the MOP generic function GENERIC-FUNCTION-DECLARATIONS is now
+ implemented;
+ ** the Readers for Class Metaobjects methods CLASS-DIRECT-SLOTS
+ and CLASS-DIRECT-DEFAULT-INITARGS have been implemented for
+ FORWARD-REFERENCED-CLASSes; error reporting on
+ CLASS-DEFAULT-INITARGS, CLASS-PRECEDENCE-LIST and CLASS-SLOTS
+ has been improved;
+ ** SXHASH on CLOS instances now uses a slot internal to the
+ instance to return different numbers on distinct instances,
+ while preserving the same return value through invocations of
+ CHANGE-CLASS;
+ ** DEFMETHOD signals errors when methods with longer incongruent
+ lambda lists are added to generic functions;
+ ** COMPUTE-CLASS-PRECEDENCE-LIST now has a method specialized on
+ CLASS, as specified in AMOP;
+ ** COMPUTE-SLOTS :AROUND now assigns locations sequentially based
+ on the order returned by the primary method for classes of
+ class STANDARD-CLASS;
+ ** DEFINE-METHOD-COMBINATION now works with the :ARGUMENTS option.
+ * fixed some bugs shown by Paul Dietz' test suite:
+ ** DOLIST puts its body in TAGBODY;
+ ** SET-EXCLUSIVE-OR sends arguments to :TEST function in the
+ correct order;
+ ** MULTIPLE-VALUE-SETQ evaluates side-effectful places before
+ value producing form;
+ ** if more variables are given to PROGV than values, extra
+ variables are bound and made to have no value;
+ ** NSUBSTITUTE on list arguments gets the right answer with
+ :FROM-END;
+ ** ELT signals an error of type TYPE-ERROR when the index argument
+ is not a valid sequence index;
+ ** LOOP signals (at macroexpansion time) an error of type
+ PROGRAM-ERROR when duplicate variable names are found;
+ ** LOOP supports DOWNTO and ABOVE properly; (thanks to Matthew Danish)
+ ** FUNCALL of special-operators now cause an error of type
+ UNDEFINED-FUNCTION;
+ ** PSETQ now works as required in the presence of side-effecting
+ symbol-macro places;
+ ** NCONC accepts any object as its last argument;
+ ** :COUNT argument to sequence functions may be BIGNUM; (thanks to
+ Gerd Moellman)
+ ** loop-for-as-package does not require a package to be explicitely
+ specified;
+ ** LOOP WITH now treats NIL in the d-var-spec correctly as an
+ ignored binding.
+ * fixed bug 166: compiler preserves "there is a way to go"
+ invariant when deleting code.
+ * fixed bug 172: macro lambda lists with required arguments after
+ &REST arguments now cause an error to be signalled. (thanks to
+ Matthew Danish)
+ * fixed Entomotomy PEEK-CHAR-WRONGLY-ECHOS-TO-ECHO-STREAM
+ bug. (thanks to Matthew Danish)
+ * fixed bug 225: STRING-STREAM is now a class. (reported by Gilbert
+ Baumann)
+ * fixed bug 136: CALL-NEXT-METHOD no longer gets confused when
+ arguments are lexically rebound. (thanks to Gerd Moellmann and
+ Pierre Mai)
+ * fixed bug 194: error messages are now more informative when there
+ is no primary method applicable in a call to a generic
+ function. (thanks to Gerd Moellmann)
+ * fixed bug in command line argument checking (thanks to Julian
+ Fondren)
+ * fixed bug in COUNT-IF, making it handle :FROM-END correctly
+ (thanks to Matthew Danish)
+ * incremented fasl file version number, because of the
+ SXHASH-related changes in the layout of CLOS data structures
+
+changes in sbcl-0.7.9 relative to sbcl-0.7.8:
+ * minor incompatible change: The runtime (the Unix executable named
+ "sbcl") is now much pickier about the .core files it will load.
+ Essentially it now requires .core files to descend from the same
+ build (not just the same sources or LISP-IMPLEMENTATION-VERSION)
+ as the runtime does. (The intent is to prevent the crashes which
+ can occur, and which can even be reported as mysterious failures,
+ when people patch the sources or change the build parameters
+ without changing LISP-IMPLEMENTATION-VERSION, then mix and match
+ sbcl and .core files.)
+ * fixed bug: VALUES-LIST is no longer optimized away.
+ * fixed bug 142: The FFI conversion of C string values to Lisp
+ string values no longer conses excessively. (thanks to Nathan
+ Froyd porting Raymond Toy's fix to CMU CL)
+ * began to systematize and improve MOP conformance in PCL (thanks to
+ Nathan Froyd, Gerd Moellman and Pierre Mai):
+ ** SLOT-DEFINITION-ALLOCATION now returns :CLASS, not the class
+ itself;
+ ** GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER is now implemented;
+ ** FINALIZE-INHERITANCE is now called on class finalization;
+ ** DOCUMENTATION and (SETF DOCUMENTATION) now have the correct
+ argument precedence order.
+ * fixed bug 202: The compiler no longer fails on functions whose
+ derived types contradict their declared type.
+ * DEFMACRO is implemented via EVAL-WHEN instead of IR1 translation,
+ so it can be non-toplevel.
+ * The fasl file version number has changed (because of the new
+ implementation of DEFMACRO).
+ * (mostly) fixed bugs 46b and 46c: sequence functions now check, in
+ safe code, that any length requirement by their type-specifier
+ argument is valid. The exceptions to this are described in bug
+ 213.
+ * fixed bugs 46h and 46i: TWO-WAY- and CONCATENATED-STREAM creation
+ functions now check the types of their inputs as required by ANSI.
+ * fixed bug 48c: SYMBOL-MACROLET signals PROGRAM-ERROR when an
+ introduced symbol is DECLAREd to be SPECIAL.
+ * fixed reading of (COMPLEX DOUBLE-FLOAT) literals from fasl files
+ * fixed bug: :COUNT argument to sequence functions may be negative
+ * fixed bug: body of DO-SYMBOLS may contain declarations
+ * fixed bug: PUSHNEW now evaluates its arguments from left to right
+ (reported by Paul F. Dietz, fixed by Gerd Moellman)
+ * fixed bug: PUSH, PUSHNEW and POP now evaluate a place given by a
+ symbol macro only once
+ * fixed printing of call frame when argument list is unavailable
+ * fixed bug: :ALLOW-OTHER-KEYS is an allowed keyword name
+ * compiler no longer signals WARNING on unknown keyword
+ :ALLOW-OTHER-KEYS
+
+changes in sbcl-0.7.8 relative to sbcl-0.7.7:
+ * A beta-quality port to the mips architecture running Linux,
+ based on the old CMUCL backend, has been made. It has been tested
+ on a big-endian kernel, and works sufficiently well to be able to
+ rebuild itself; it has not been tested in little-endian mode.
+ * fixed an inconsistency between gencgc.c and purify.c which made
+ dumping/loading .core files unreliable
+ * fixed bug 120a: The compiler now deals correctly with IFs where
+ the consequent is the same as the alternative, instead of
+ misderiving the return type. (thanks to Alexey Dejneka)
+ * fixed bug 113: Logical pathnames are now dumpable (the logical
+ host is resolved at load-time, throwing an error if it is not
+ found).
+ * fixed bug 174: FORMAT's error message is slightly clearer when a
+ non-printing character is used in a format directive.
+ * fixed several bugs in compiler checking of type declarations, i.e.
+ violations of the Python "declarations are assertions" principle
+ (thanks to Alexey Dejneka)
+ * fixed several bugs in PCL's error checking (thanks to Gerd
+ Moellmann)
+ * fixed bug: printing of FILE-ERROR (thanks to Antonio
+ Martinez-Shotton)
+ * fixed bug in compilation of functions as first class values
+ (thanks to Antonio Martinez-Shotton)
+ * The compiler's handling TYPE-ERRORs which it can prove will
+ inevitably happen at runtime has been cleaned up and corrected
+ in several ways. (thanks to Alexey Dejneka)
+ * improved argument type checking for various basic arithmetic
+ operations (MAX, +, LOGXOR, etc.) which have had so much TLC
+ lavished on them in the past that they can be compiled in many
+ ways in different special cases
+ * fixed bug 181: compiler checks validity of user supplied type
+ specifiers
+ * cleaned up code flushing in optimization: Function calls which
+ should signal errors for safety purposes (e.g. which ANSI says
+ should signal errors when their arguments are of incorrect type)
+ are no longer optimized away.
+ * added new extension: SB-DEBUG:BACKTRACE-AS-LIST
+ * incremented fasl file version number, because changes in the
+ implementation of sequence functions like COERCE caused
+ internal utility functions like COERCE-TO-SIMPLE-VECTOR (used
+ in old inline expansions) to become undefined. (Actually these
+ changes were later undone, so we might very well be binary
+ compatible with 0.7.7 after all, but leaving the version number
+ incremented seemed like the simplest and most conservative
+ thing to do.)
+
+changes in sbcl-0.7.7 relative to sbcl-0.7.6:
+ * An alpha-quality port to the parisc architecture running Linux,
+ based on the old CMUCL backend, has been made. This, even more so
+ than the other backends, should be considered still a work in
+ progress; known problems include that the Linux kernel in 64-bit
+ mode does not propagate the correct sigcontext structure to
+ userspace, and consequently SBCL on a parisc64 kernel will not
+ work yet.
+ * fixed bug 189: The compiler now respects NOTINLINE declarations for
+ functions declared in FLET and LABELS. (I.e. "LET conversion" is
+ suppressed.) Also now that the compiler is looking at declarations
+ in the environment, it checks optimization declarations as well,
+ and suppresses inlining when (> DEBUG SPEED).
+ * More fixes have been made to treatment of floating point exception
+ treatment and other Unix signals. In particular, floating point
+ exceptions no longer cause Bus errors on the SPARC/Linux platform.
+ * The detection and handling of control stack exhaustion (infinite
+ or very deeply nested recursion) has changed. Stack exhaustion
+ detection is now done by write-protecting pages at the OS level
+ and applies at all optimization settings; when found, a
+ SB-KERNEL:CONTROL-STACK-EXHAUSTED condition (subclass of
+ STORAGE-CONDITION) is signalled, so stack exhaustion can no longer
+ be caught using IGNORE-ERRORS.
+ * Bugs 65, 70, and 109 fixed: The compiler now preserves invariants
+ correctly when transforming recursive LABELS functions to LETs.
+ (thanks to Alexey Dejneka)
+ * Bug 48a./b. fixed: SYMBOL-MACROLET now refuses to bind symbols
+ that are names of constants or global variables.
+ * Bug fix: DEFINE-ALIEN-ROUTINE now declaims the correct FTYPE for
+ alien routines with docstrings.
+ * Bug 184 fixed: Division of ratios by the integer 0 now signals an
+ error of type DIVISION-BY-ZERO. (thanks to Wolfhard Buss and
+ Raymond Toy)
+ * Bug fix: Errors in PARSE-INTEGER are now of type PARSE-ERROR.
+ (thanks to Eric Marsden)
+ * Bug fix: COERCE to (COMPLEX FLOAT) of rationals now returns an
+ object of type (COMPLEX FLOAT). (thanks to Wolfhard Buss)
+ * Bug fix: The SPARC backend can now compile functions involving
+ LOGAND and stack-allocated arguments. (thanks to Raymond Toy)
+ * Bug fix: We no longer segfault on passing a non-FILE-STREAM stream
+ to a functions expecting a PATHNAME-DESIGNATOR.
+ * Bug fix: DEFGENERIC now enforces the ANSI restrictions on its
+ lambda lists. (thanks to Alexey Dejneka)
+ * Bug fix: changed encoding of PCL's internal MAKE-INSTANCE
+ functions so that EXPORTing the name of the class doesn't cause
+ MAKE-INSTANCE functions from earlier DEFCLASSes to get lost (thanks
+ to Antonio Martinez for reporting this)
+ * Bug 192 fixed: The internal primitive DATA-VECTOR-REF can now be
+ constant-folded without failing an assertion. (thanks to Einar
+ Floystad Dorum for reporting this)
+ * Bugs 123 and 165 fixed: array specializations on as-yet-undefined
+ types are now dealt with more correctly by the compiler.
+ * Minor incompatible change: COMPILE-FILE-PATHNAME now merges its
+ OUTPUT-FILE argument with its INPUT-FILE argument, resulting in
+ behaviour analogous to RENAME-FILE. This puts its behaviour more
+ in line with ANSI's wording on COMPILE-FILE-PATHNAME. (thanks to
+ Marco Antinotti)
+ * The fasl file version number has changed again. (because of the
+ bug fix involving the names of PCL MAKE-INSTANCE functions)
+
+changes in sbcl-0.7.6 relative to sbcl-0.7.5:
+ * bug fix: Floating point exceptions are treated much more
+ consistently on the x86/Linux and PPC/Linux platforms.
+ * Array initialization with :INITIAL-ELEMENT is now much faster for
+ cases when the compiler cannot open code the array creation, but
+ does know what the UPGRADED-ARRAY-ELEMENT-TYPE will be. General
+ array accesses have also seen a speed increase.
+ * bug fix: LOAD :IF-DOES-NOT-EXIST NIL now works when file type is
+ specified. (This was at the root of some bad interactions between
+ SBCL and ILISP: thanks to Gregory Wright for diagnosing this and
+ reporting the bug.)
+ * bug fix: Internal error arguments for undefined functions are now
+ computed correctly on the PPC/Linux platform.
+ * bug fix: Bad &REST syntax is now checked correctly. (thanks to
+ Raymond Toy's patch for CMU CL)
+ * Support for the Solaris 9 operating environment has been included
+ (thanks to Daniel Merritt)
+ * A very ugly but hopefully complete draft of the missing FFI chapter
+ of the manual has been created by reformatting the corresponding
+ CMU CL manual chapter into (currently very ugly and incoherent)
+ DocBook and bringing it up to date for SBCL behavior. Thus, the
+ manual is now essentially complete, at least by my extreme
+ once-and-only-once standards, whereby it's acceptable to refer to
+ the doc strings of SB-EXT functions as the primary documentation.
+ * The fasl file version number has changed again, due to cleanup of
+ (user-invisible) bitrotted stuff. (E.g. *!INITIAL-FDEFN-OBJECTS*
+ is no longer a static symbol.)