internal representation of (OR ..) types to accommodate the new
support for (AND ..) types, among other things)
+changes in sbcl-0.6.13 relative to sbcl-0.6.12:
+* a port to the Compaq/DEC Alpha CPU, thanks to Dan Barlow
+* Martin Atzmueller ported Tim Moore's marvellous CMU CL DISASSEMBLE
+ patch, so that DISASSEMBLE output is much nicer.
+* The code in the SB-PROFILE package now seems reasonably stable.
+ I still haven't decided what the final interface should look like
+ (I'd like PROFILE to interact cleanly with TRACE, since both
+ facilities use function encapsulation) but if you have a need
+ for profiling now, you can probably use it successfully with
+ the current CMU-CL-style interface.
+* Pathnames and *DEFAULT-DIRECTORY-DEFAULTS* are much more
+ ANSI-compliant, thanks to various fixes and tests from Dan Barlow.
+ Also, at Dan Barlow's suggestion, TRUENAME on a dangling symbolic
+ link now returns the dangling link itself, and for similar
+ reasons, TRUENAME on a cyclic symbolic link returns the cyclic
+ link itself. (In these cases the old code signalled an error and
+ looped endlessly, respectively.) Thus, DIRECTORY now works even
+ in the presence of dangling and cyclic symbolic links.
+* Compiler trace output (the :TRACE-FILE option to COMPILE-FILE)
+ is now a supported extension again, since the consensus on
+ sbcl-devel was that it can be useful for ordinary development
+ work, not just for debugging SBCL itself.
+* The default for SB-EXT:*DERIVE-FUNCTION-TYPES* has changed to
+ NIL, i.e. ANSI behavior, i.e. the compiler now recognizes
+ that currently-defined functions might be redefined later with
+ different return types.
+* Hash tables can be printed readably, as inspired by CMU CL code
+ of Eric Marsden and SBCL code of Martin Atzmueller.
+* better error handling in CLOS method combination, thanks to
+ Martin Atzmueller porting Pierre Mai's CMU CL patches
+* more overflow fixes for >16Mbyte I/O buffers
+* A bug in READ has been fixed, so that now a single Ctrl-D
+ character suffices to cause end-of-file on character streams.
+ In particular, now you only need one Ctrl-D at the command
+ line (not two) to exit SBCL.
+* fixed bug 26: ARRAY-DISPLACEMENT now returns (VALUES NIL 0) for
+ undisplaced arrays.
+* fixed bug 107 (reported as a CMU CL bug by Erik Naggum on
+ comp.lang.lisp 2001-06-11): (WRITE #*101 :RADIX T :BASE 36) now
+ does the right thing.
+* The implementation of some type tests, especially for CONDITION
+ types, is now tidier and maybe faster, due to CMU CL code
+ originally by Douglas Crosher, ported by Martin Atzmueller.
+* Some math functions have been fixed, and there are new
+ optimizers for deriving the types of COERCE and ARRAY-ELEMENT-TYPE,
+ thanks to Raymond Toy's work on CMU CL, ported by Martin Atzmueller.
+* (There are also some new optimizers in contrib/*-extras.lisp. Those
+ aren't built into sbcl-0.6.13, but are a sneak preview of what's
+ likely to be built into sbcl-0.7.0.)
+* A bug in COPY-READTABLE was fixed. (Joao Cachopo's patch to CMU
+ CL, ported to SBCL by Martin Atzmueller)
+* DESCRIBE now gives more information in some cases. (Pierre Mai's
+ patch to CMU CL, ported to SBCL by Martin Atzmueller)
+* Martin Atzmueller and Bill Newman fixed some bugs in INSPECT.
+* There's a new slam.sh hack to shorten the edit/compile/debug
+ cycle for low-level changes to SBCL itself, and a new
+ :SB-AFTER-XC-CORE target feature to control the generation of
+ the after-xc.core file needed by slam.sh.
+* minor incompatible change: The ENTRY-POINTS &KEY argument to
+ COMPILE-FILE is no longer supported, so that now every function
+ gets an entry point, so that block compilation looks a little
+ more like the plain vanilla ANSI section 3.2.2.3 scheme.
+* minor incompatible change: SB-EXT:GET-BYTES-CONSED now
+ returns the number of bytes consed since the system started,
+ rather than the number consed since the first time the function
+ was called. (The new definition parallels ANSI functions like
+ CL:GET-INTERNAL-RUN-TIME.)
+* minor incompatible change: The old CMU-CL-style DIRECTORY options,
+ i.e. :ALL, :FOLLOW-LINKS, and :CHECK-FOR-SUBDIRS, are no longer
+ supported. Now DIRECTORY always does the abstract Common-Lisp-y
+ thing, i.e. :ALL T :FOLLOW-LINKS T :CHECK-FOR-SUBDIRS T.
+* Fasl file version numbers are now independent of the target CPU,
+ since historically most system changes which required version
+ number changes have affected all CPUs equally. Similarly,
+ the byte fasl file version is now equal to the ordinary
+ fasl file version.
+
+changes in sbcl-0.7.0 relative to sbcl-0.6.13:
+* incompatible change: The default fasl file extension has changed
+ to ".fasl", for all architectures. (No longer ".x86f" and ".axpf".)
+* 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, 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
+ He also pointed out some bogus old entries in BUGS.
+?? 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.
+
planned incompatible changes in 0.7.x:
* 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 ILISP and SBCL got into arguments which left me
- deeply nested in the debugger.)
-* When the profiling interface settles down, it might impact TRACE.
- They both encapsulate functions, and it's not clear yet how
- e.g. UNPROFILE will interact with TRACE and UNTRACE. (This shouldn't
- matter, though, unless you are using profiling. If you never
- profile anything, TRACE should continue to behave as before.)
-* The fasl file extension may change, perhaps to ".fasl".
+ to do this when squabbles between ILISP and SBCL left me
+ very deeply nested in the debugger.)
* The default output representation for unprintable ASCII characters
which, unlike e.g. #\Newline, don't have names defined in the
ANSI Common Lisp standard, may change to their ASCII symbolic
names: #\Nul, #\Soh, #\Stx, etc.
* INTERNAL-TIME-UNITS-PER-SECOND might increase, e.g. to 1000.
+* FASL file extensions change to ".fasl", instead of the various
+ CPU-dependent values (".x86f", ".axpf", etc.) inherited from CMU CL.
* MAYBE-INLINE will probably go away at some point, maybe 0.7.x,
maybe later, in favor of the ANSI-recommended idiom for making
a function optionally inline.
-* FASL file extensions change to ".fasl", instead of the various
- CPU-dependent values (".x86f" etc.) inherited from CMU CL.
+* When the profiling interface settles down, maybe in 0.7.x, maybe
+ later, it might impact TRACE. They both encapsulate functions, and
+ it's not clear yet how e.g. UNPROFILE will interact with TRACE
+ and UNTRACE. (This shouldn't matter, though, unless you are
+ using profiling. If you never profile anything, TRACE should
+ continue to behave as before.)
+* The BYTE-COMPILE &KEY argument for COMPILE-FILE is deprecated,
+ since this behavior can be controlled by (DECLAIM (OPTIMIZE (SPEED 0))).
+ ("An ounce of orthogonality is worth a pound of features.")