-* 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
- hopefully any remaining bugs will be simpler, less fundamental,
- and more fixable then the bugs in the old IR1 interpreter code.
-* The IR1 interpreter, byte compiler, and byte interpreter are gone.
- It's long been my plan to remove the IR1 interpreter while making
- EVAL-WHEN ANSI-compliant. It turned out that a cascade of changes
- caused by EVAL-WHEN ANSIness would have required fairly simple
- changes to the byte compiler; except they turned out to be quite
- difficult. This, plus the new familiarity with the byte compiler
- in general that I picked up as I worked on this specific problem,
- reduced my opinion of its maintainability enough that I deleted it
- instead of trying to fix it.
-* The compiler, especially the IR1 phase of the compiler, has been
- tweaked somewhat to support the new implementation of DEFUN and
- of the static linking hack used for cold init. In particular,
- the property of "is externally visible" is now orthogonal to
- the property of "is optimized/specialized for being called
- at LOAD time, with no arguments and no argument checking".
- The old FUNCTIONAL-KIND=:TOP-LEVEL type code which
- conflated these two properties has been replaced with the
- FUNCTIONAL-HAS-EXTERNAL-REFERENCES-P flag. This has minor
- beneficial consequences for the logic of #'CL:COMPILE and other
- things. Like the rewrite of EVAL, it has also quite possibly
- introduced some new bugs, but since the new logic is simpler and
- more orthogonal, hopefully it will be easier to clean up bugs
- in the new code than it was in the old code.
-* The rewritten compiler is still a little unsteady on its feet.
- In particular, the debugging information it produces is sometimes
- broken, and the support for inlining FOO when you
- (DECLAIM (INLINE FOO)) then do (DEFUN FOO ..) in a non-null
- lexical environment has been temporarily weakened (because the
- old clever code depended on correct debugging information).
-* There are new compiler optimizations for various functions: FIND,
- POSITION, FIND-IF, POSITION-IF, FILL, COERCE, TRUNCATE, FLOOR, and
- CEILING. Mostly these should be transparent, but there's one
- potentially-annoying problem (bug 117): when the compiler inline
- expands the FIND/POSITION family of functions and does type
- analysis on the result, it can find control paths which have
- type mismatches, and when it can't prove that they're not taken,
- it will issue WARNINGs about the type mismatches. It's not clear
- how to make the compiler smart enough to fix this in general, but
- 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 -- the
- new FIND, POSITION, FIND-IF, and POSITION-IF code won't really
- kick in properly until debugging information is straightened out
- in some future version.)
-* 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.
-* A bug in LOOP operations on hash tables has been fixed, thanks
- to a bug report and patch from Alexey Dejneka.
-* 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 truncate the logical block only at 50 lines, instead of
- often truncating it at 8 lines.
-* Martin Atzmueller fixed several other bugs:
- ** correct ERROR type for various file operations
- ** removing dead code
-* Alexey Dejneka fixed many bugs:
- ** misbehavior of WRITE-STRING/WRITE-LINE
- ** LOOP over keys of a hash table
- ** bogus entries in BUGS
- ** DIRECTORY when similar filenames are present
- ** DEFGENERIC with :METHOD options
- ** problem with (MAKE-STRING N :INITIAL-ELEMENT #\SPACE))
- ?? bugs 49b and 81
-?? 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). This mostly affects
- internal symbols, but a few external symbols like
- SB-ALIEN:DEF-ALIEN-FUNCTION are also affected.
-* :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.
-* The default value of *BYTES-CONSED-BETWEEN-GCS* has been
- 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.)
-* minor incompatible change: 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 (and
- since people writing calls-to-C code aren't likely to be bothered
- by implicit assumptions of static typing).
-* The interpreter, EVAL, has been rewritten. Now it calls the
- native compiler for the difficult cases, where it used to call
- the old specialized IR1 interpreter code.
-* The doc/cmucl/ directory, containing old CMU CL documentation,
- is no longer part of the base system. SourceForge has shut down
- its anonymous FTP service, and with it my original plan for
- distributing them separately. For now, if you need them you can
- download an old sbcl source release and get them from there.
-* lots of other tidying up internally: renaming things so that names
- are more systematic and consistent, converting C macros to inline
- functions, systematizing indentation, making symbol packaging
- more logical, and so forth
-* The fasl file version number changed again, for about a dozen
- reasons, some of which are apparent above.
+* 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.1 relative to sbcl-0.7.0:
+* mostly bug fixes:
+ ** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are set
+ up properly again. (There was a packaging bug in 0.7.0 which
+ left their definitions in SB-SYS::LOAD-FOREIGN and
+ SB-SYS::LOAD-1-FOREIGN. LOAD-FOREIGN and LOAD-1-FOREIGN are
+ vital for most things which interface to C-level interfaces,
+ like extensions working with sockets or databases or
+ Perl-compatible regexes or whatever, and the need to fix
+ this bug is the main reason that 0.7.1 was released so
+ soon after 0.7.0.)
+ ** DEFGENERIC is now choosier about the methods it redefines, so that
+ reLOADing a previously-LOADed file containing DEFGENERICs does
+ the right thing now. Thus, the Lispy edit/reLOAD-a-little/test
+ cycle now works as it should. (thanks to Alexey Dejneka)
+ ** Bug 106 (types (COMPLEX FOO) where FOO is an obscure type) was
+ fixed by Christophe Rhodes. (He actually submitted this patch
+ months ago, and I delayed until after 0.7.0.)
+ ** Bug 111 (internal compiler confusion about runtime checks on
+ FUNCTION types) was fixed by Alexey Dejneka.
+* Some internal cleanups (getting rid of variables which aren't
+ needed now that the byte interpreter is gone) caused the fasl
+ file format number to change again.
+
+changes in sbcl-0.7.2 relative to sbcl-0.7.1:
+ * incompatible change: The compiler is now less aggressive about
+ tail call optimization, doing it only when (> SPACE DEBUG) or
+ (> SPEED DEBUG). (This is an incompatible change because there are
+ programs which relied on the old CMU-CL-style behavior to optimize
+ away their unbounded recursion which will now die of stack overflow.)
+ * minor incompatible change: The default BYTES-CONSED-BETWEEN-GCS
+ for non-GENCGC systems has been increased to 20M (since that
+ seems much closer to the likely performance optimum for modern
+ systems than the old 4M value was)
+ * SBCL runs on SPARC systems now. (thanks to Christophe Rhodes' port
+ of CMU CL's support for SPARC, and various endianness and other
+ SBCL portability fixes due to Christophe Rhodes and Dan Barlow)
+ * new syntactic sugar for the Unix command line: --load foo.bar is now
+ an alternate notation for --eval '(load "foo.bar")'.
+ * bug fixes:
+ ?? The system now detects stack overflow and handles it gracefully,
+ at least for (OR (> SAFETY (MAX SPEED SPACE)) (= SAFETY 3))
+ optimization settings. (This is a good thing in general, and
+ its introduction in this version should be particularly timely
+ for anyone whose code fails because of suppression of tail
+ recursion!)
+ ** The system now hunts for the C variable "environ" in a more
+ devious way, to avoid segfaults when the C library version differs
+ between compile time and run time. (thanks to Christophe Rhodes)
+ ** INTEGER-valued CATCH tags now work. (thanks to Alexey Dejneka,
+ and also to Christophe Rhodes for porting the fix to non-X86 CPUs)
+ ** The compiler no longer issues bogus style warnings for undefined
+ classes in the same source file as the DEFCLASSes which defined
+ them. (thanks to Stig E Sandoe for reporting and Martin Atzmueller
+ for fixing this)
+ * several changes related to debugging:
+ ** suppression of tail recursion, as noted above
+ ** stack overflow detection, as noted above
+ ** The default implementation of TRACE has changed. :ENCAPSULATE T
+ is now the default. (For some time encapsulation has been more
+ reliable than the breakpoint-based :ENCAPSULATE NIL
+ implementation, at least on X86 systems; and I just noticed that
+ encapsulation also seems closer to the spirit of the ANSI
+ specification.)
+ ?? TRACE :ENCAPSULATE T now attaches a more informative debug
+ name to its wrapper function objects than it used to