[f55a2e]: NEWS Maximize Restore History

Download this file

NEWS    1364 lines (1328 with data), 78.4 kB

changes in sbcl-0.6.0 relative to sbcl-0.5.0:

* tidied up "make.sh" script
* tidied up system directory structure
* better "clean.sh" behavior
* many many small tweaks to output format, e.g. removing possibly-confusing
  trailing #\. character in DESCRIBE-INSTANCE
* (EQUALP #\A 'A) no longer signals an error.
* new hashing code, including EQUALP hashing
* tidied up Lisp initialization and toplevel
* initialization files (e.g. /etc/sbclrc and $HOME/.sbclrc)
* command line argument processing
* added POSIX-GETENV function to deal with Unix-ish environment variables
* more-Unixy handling of *STANDARD-INPUT* and other Lisp streams, e.g.
  terminating SBCL on EOF
* non-verbose GC by default
* There is no more "sbcl" shell script; the sbcl file is now the C
  runtime executable (just like CMU CL).
* removed some unused fops, e.g. FOP-UNIFORM-VECTOR, FOP-CHARACTER, and 
* tweaked debug-info.lisp and debug-int.lisp to make the debugger store
  symbol and package information as Lisp native symbol and package objects
  instead of strings naming symbols and strings naming packages. This way,
  whenever packages are renamed (as in warm init), debug information is
  transformed along with everything else.
* tweaked the optimization policy declarations which control the building
  of SBCL itself. Now, among other things, the system no longer saves
  source location debugging information. (This helps two problems at once
  by reducing SBCL size and by keeping SBCL from trying to look for its
  sources -- which may not exist -- when reporting errors.)
* added src/cold/chill.lisp, to let SBCL read its own cold sources for
  debugging and testing purposes
* cleaned up printing, making the printer call PRINT-OBJECT for
  instances, and using PRINT-UNREADABLE-OBJECT for most PRINT-OBJECT
  methods, giving nearly-ANSI behavior
* converted almost all special variables to use *FOO* naming convention
* deleted PARSE-TIME functionality, since it can be done portably
* moved some files out of cold init into warm init
  with (VALUES) forms
* regularized formatting of source files
* added an install.sh script
* fixed ridiculous memory usage of cross-compiler by making
  compiler/alloc.lisp not try to do pooling unless it can hook
  itself into the GC of the cross-compilation host. Now the system
  builds nicely on my old laptop.
* added :SB-ALLOC in target-features.lisp-expr
* deleted mention of :ANSI-DOC from target-features.lisp-expr (since it
  was not implemented)
* re-did condition handling and note reporting in the compiler. Notes
  are no longer handled by signalling conditions. Style warnings
  and warnings are handled more correctly and reported in such a way
  that it's easy to find one or the other in your output (so that you
  can e.g. figure out which of many problems caused COMPILE-FILE to 
  return FAILURE-P).
* changed the severity of several compiler warnings from full WARNING
  to STYLE-WARNING in order to conform with the ANSI spec; also changed
  compiler note reporting so that it doesn't use the condition system
  at all (and hence affects neither FAILURE-P nor WARNINGS-P in the 
  COMPILE-FILE command)
* made PROCLAIM and DECLAIM conform to ANSI. PROCLAIM is now an ordinary
  function. As a consequence, START-BLOCK and END-BLOCK declarations are
  no longer supported, since their implementation was deeply intertwingled
  with the magical, non-ANSI treatment that PROCLAIM received in CMU CL.
* removed bogus "support" for compiler macros named (SETF FOO), and
  removed the compiler macro for SETF INFO (but only after making a fool
  of myself on the cmucl-imp mailing list by posting a bogus patch for
* Compiled files containing forms which have side effects on the Lisp
  reader (such as DEFPACKAGE forms) are now handled more correctly.
  (Compiler queuing of top level lambdas has been suppressed by setting
* deleted various currently-unused source files, e.g. gengc.lisp. They
  may be added back at some point e.g. when porting to other architectures,
  but until they are it's distracting to distribute them and to try to
  maintain them.
* deleted "UNCROSS couldn't recurse through.." style warnings, since 
  there were so many of them they're just distractions, and UNCROSS is
  known to be able to handle the current sources
* moved PROFILE functionality into TRACE, so that it will be clear
  how the wrapping and unwrapping of functions when you profile them
  interacts with the wrapping and unwrapping of functions when you
  trace them. (Actually, the functionality isn't there yet, but at least
  the interface specification is there. Hopefully, the functionality will
  arrive with some future maintenance release.)
* removed host-oops.lisp
* changed signature of QUIT function to allow UNIX-CODE argument
* fixed READ-SEQUENCE bug
* tweaked verbose GC output so that it looks more like the progress
  output that ANSI specifies for functions like LOAD
* set up the system on sourceforge.com, with home pages, mailing lists, etc.
* added <http://sbcl.sourceforge.com> to the banner information printed by
  the sbcl executable

changes in sbcl-0.6.1 relative to sbcl-0.6.0:

* changed build optimization from (SAFETY 1) to (SAFETY 3) as a short-term
  fix for various type-unsafety bugs, e.g. failures with (LENGTH 123) and
  (MAKE-LIST -1). In the longer term, it ought to become true
  that declarations are assertions even at SAFETY 1. For now, it's not
  quite true even at SAFETY 3, but it's at least more nearly true..
  (Note that this change seems to increases the size of the system by
  O(5%) and to decrease the speed of the compiler by 20% or more.)
* changed ALIEN printing to be much more abbreviated, as a short-term fix
  for the problem of printing dozens of lines of distracting information
  about low-level system machinery as part of the top stack frame
  on entry to the debugger when an undefined function was called.
* tweaked the debugger's use of WITH-STANDARD-IO-SYNTAX so that *PACKAGE*
  is not reset to COMMON-LISP-USER. 
* Compilation of stuff related to dyncount.lisp has been made conditional
  on the :SB-DYNCOUNT target feature, so that the ordinary core system is
  smaller. The various dyncount-related symbols have been moved into
  a new "SB-DYNCOUNT" package.
* tty-inspect.lisp has been renamed to inspect.lisp.
* unix-glibc2.lisp has been renamed to unix.lisp, and the :GLIBC2
  feature has gone away. (When we eventually port to other flavors of 
  libc and/or Unix, we'll try to make the differences between flavors
  invisible at the user level.)
* Various other *FEATURES* tags, and/or their associated conditionals,
  have been removed if obsolescent, or given better documentation, or
  sometimes given more-mnemonic names.

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
* 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).

changes in sbcl-0.6.3 relative to sbcl-0.6.2:

* 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.4 relative to sbcl-0.6.3:

* There is now a partial SBCL user manual (with some new text and some
  text cribbed from the CMU CL manual). 
* The beginnings of a profiler have been added (starting with the
  CMU CL profiler and simplifying and cleaning up). Eventually the
  main interface should be through the TRACE macro, but for now, 
  it's still accessed through vaguely CMU-CL-style functions and macros
  exported from the package SB-PROFILE.
* Some problems left over from porting CMU CL to the new
  cross-compilation bootstrap process have been cleaned up:
  ** DISASSEMBLE now works. (There was a problem in using DEFMACRO
     instead of SB!XC:DEFMACRO, compounded by an oversight on my 
     part when getting rid of the compiler *BACKEND* stuff.)
  ** The value of *NULL-TYPE* was screwed up, because it was
     being initialized before the type system knew the final
     definition of the 'NULL type. This screwed up several key
     optimizations in the compiler, causing inefficiency in all sorts
     of places. (I found it because I wanted to understand why
     GET-INTERNAL-RUN-TIME was consing.) 
* fixed a bug in DEFGENERIC which was causing it to overwrite preexisting
  PROCLAIM FTYPE information. Unfortunately this broke binary 
  compatibility again, since now the forms output by DEFGENERIC
  to refer to functions which didn't exist in 0.6.3.
* added declarations so that SB-PCL::USE-CACHING-DFUN-P 
  can use the new (as of 0.6.3) transform for SOME into MAP into 
  inline code
* changed (MOD 1000000) type declarations for Linux timeval.tv_usec slot
  values to (INTEGER 0 1000000), so that the time code will no longer
  occasionally get blown up by Linux returning 1000000 microseconds
* PRINT-UNREADABLE-OBJECT has been tweaked to make the spacing of
  its output conform to the ANSI spec. (Alas, this makes its output
  uglier in the :TYPE T :IDENTITY NIL case, but them's the breaks.)
* A full call to MAP NIL with a single sequence argument no longer conses.
* fixes to problems pointed out by Martin Atzmueller:
  * The manual page no longer talks about multiprocessing as though
    it were currently supported.
  * The ILISP support patches have been removed from the distribution,
    because as of version 5.10.1, ILISP now supports SBCL without us
    having to maintain patches.
* added a modified version of Raymond Toy's recent CMU CL patch for
  EQUALP comparison of HASH-TABLE

changes in sbcl-0.6.5 relative to sbcl-0.6.4:

* Raymond Wiker's patches to port the system to FreeBSD have been merged.
* The build process now looks for GNU make under the default name "gmake",
  instead of "make" as it used to. If GNU make is not available as "gmake"
  on your system, you can change this default behavior by setting the 
  GNUMAKE environment variable.
* Replace #+SB-DOC with #!+SB-DOC in seq.lisp so that the system 
  can build without error under CMU CL.

changes in sbcl-0.6.6 relative to sbcl-0.6.5:

* DESCRIBE no longer tries to call itself recursively to describe
  bound/fbound values, so that it no longer fails on symbols which are
  bound to themselves (like keywords, T, and NIL).
* DESCRIBE now works on generic functions.
* The printer now prints less-screwed-up representations of closures
  (not naively trying to bogusly use the %FUNCTION-NAME accessor on them).
* A private symbol is used instead of the :EMPTY keyword previously 
  used to mark empty slots in hash tables. Thus 
	(MAPHASH (LAMBDA (K V) (FORMAT T "~&~S ~S~%" K V)))
  now does what ANSI says that it should. (You can still get 
  similar noncompliant behavior if bang on the hash table
  implementation with all the symbols you get back from 
  DO-ALL-SYMBOLS, but at least that's a little harder to do.)
  This breaks binary compatibility, since tests for equality to 
  :EMPTY are wired into things like the macroexpansion of 
  WITH-HASH-TABLE-ITERATOR in FASL files produced by earlier
* There's now a minimal placeholder implementation for CL:STEP,
  as required by ANSI.
* An obscure bug in the interaction of the normal compiler, the byte
  compiler, inlining, and structure predicates has been patched
  by setting the flags for the DEFTRANSFORM of %INSTANCE-TYPEP as
  :WHEN :BOTH (as per Raymond Toy's suggestion on the cmucl-imp@cons.org
  mailing list).
* Missing ordinary arguments in a macro call are now detected even
  when the macro lambda list contains &KEY or &REST.
* The debugger no longer complains about encountering the top of the
  stack when you type "FRAME 0" to explicitly instruct it to go to
  the top of the stack. And it now prints the frame you request even
  if it's the current frame (instead of saying "You are here.").
* As specified by ANSI, the system now always prints keywords
  as #\: followed by SYMBOL-NAME, even when *PACKAGE* is the
  KEYWORD package.
* The default initial SIZE of HASH-TABLEs is now smaller.
* Type information from CLOS class dispatch is now propagated
  into DEFMETHOD bodies, so that e.g.
	  (+ X 123.0))
  is now basically equivalent to 
	  (+ X 123.0))
  and the compiler can compile (+ X 123.0) as a SINGLE-FLOAT-only
  operation, without having to do run-time type dispatch.
* The macroexpansion of DEFMETHOD has been tweaked so that it has
  reasonable behavior when arguments are declared IGNORE or IGNORABLE.
* Since I don't seem to be making big file reorganizations very often
  any more (and since my archive of sbcl-x.y.zv.tar.bz2 snapshots
  is overflowing my ability to conveniently back them up), I've finally
  checked the system into CVS. (The CVS repository is on my home system,
  not at SourceForge -- putting it on SourceForge might come later.)
* SB-EXT:*GC-NOTIFY-STREAM* has been added, to control where the 
  high-level GC-NOTIFY-FOO functions send their output. (There's
  still very little control of where low-level verbose GC functions
  send their output.) The SB-EXT:*GC-VERBOSE* variable now controls
  less than it used to -- the GC-NOTIFY-FOO functions are now under
  the control of *GC-NOTIFY-STREAM*, not *GC-VERBOSE*.
* The system now stores the version string (LISP-IMPLEMENTATION-VERSION)
  in only one place in the source code, and propagates it automatically
  everywhere that it's needed. Thus e.g. when I bump the version from
  0.6.6 to 0.6.7, I'll only need to modify the sources in one place.
* The C source files now include boilerplate legalese and documentation
  at the head of each file (just as the Lisp source files already did).
* At Dan Barlow's suggestion, the hyperlink from the SBCL website
  to his page will be replaced with a link to his new CLiki service.

changes in sbcl-0.6.7 relative to sbcl-0.6.6:

* The system has been ported to OpenBSD.
* The system now compiles with a simple "sh make.sh" on the systems
  that it's supported on. I.e., now you no longer need to tweak 
  text in the target-features.lisp-expr and symlinks in src/runtime/
  by hand, the make.sh takes care of it for you.
* The system is no longer so grossly inefficient when compiling code
  involving vectors implemented as general (not simple) vectors (VECTOR T),
  so code which dares to use VECTOR-PUSH-EXTEND and FILL-POINTER, or
  which dares to use the various sequence functions on non-simple 
  vectors, takes less of a performance hit.
  * There is now a primitive type predicate VECTOR-T-P
    to test for the (VECTOR T) type, so that e.g.
    can now be compiled with some semblance of efficiency. (The old code
    turned the type declaration into a full call to %TYPEP at runtime!)
  * AREF on (VECTOR T) is still not fast, since it's still compiled
    as a full call to SB-KERNEL:DATA-VECTOR-REF, but at least the
    ETYPECASE used in DATA-VECTOR-REF is now compiled reasonably
    efficiently. (The old version made full calls to SUBTYPEP at runtime!)
  * (MAKE-ARRAY 12 :FILL-POINTER T) is now executed less inefficiently,
    without making full calls to SUBTYPEP at runtime.
  (Some analogous efficiency issues for non-simple vectors specialized to
  element types other than T, or for non-simple multidimensional arrays,
  have not been addressed. They could almost certainly be handled the
  same way if anyone is motivated to do so.)
* The changes in array handling break binary compatibility, so
  *BACKEND-FASL-FILE-VERSION* has been bumped to 4.
  instead of (VALUES T T).
* By following the instructions that Dan Barlow posted to sbcl-devel
  on 2 July 2000, I was able to enable primitive dynamic object
  file loading code for Linux. The full-blown CMU CL LOAD-FOREIGN
  functionality is not implemented (since it calls ld to resolve
  library references automatically, requiring RUN-PROGRAM for its
  implementation), but a simpler SB-EXT:LOAD-1-FOREIGN (which doesn't
  try to resolve library references) is now supported.
* The system now flushes the standard output streams when it terminates,
  unless QUIT is used with the RECKLESSLY-P option set. It also flushes
  them at several other probably-convenient times, e.g. in each pass of
  the toplevel read-eval-print loop, and after evaluating a form given
  as an "--eval" command-line option. (These changes were motivated by a
  discussion of stream flushing issues on cmucl-imp in August 2000.) 
* The source transform for TYPEP of array types no longer assumes
  that an array whose element type is a not-yet-defined type 
  is implemented as an array of T, but instead punts, so that the 
  type will be interpreted at runtime.
* There is now some support for cross-compiling in make.sh: each of
  the phases of make.sh has its own script. (This should be transparent
  to people doing ordinary, non-cross-compile builds.)
* Since my laptop doesn't have hundreds of megabytes of memory like
  my desktop machine, I became more motivated to do some items on
  my to-do list in order to reduce the size of the system a little:
  ** Arrange for various needed-only-at-cold-init things to be
     uninterned after cold init. To support this, those things have
     been renamed from FOO and *FOO* to !FOO and *!FOO* (i.e., all
     symbols with such names are now uninterned after cold init).
  ** Bind SB!C::*TOP-LEVEL-LAMBDA-MAX* to a nonzero value when building
     fasl files for cold load.
  ** Remove the old compiler structure pooling code (which used to 
     be conditional on the target feature :SB-ALLOC) completely.
  ** Redo the representation of some data in cold init to be more compact.
  (I also looked into supporting byte compiled code at bootstrap time,
  which would probably reduce the size of the system a lot, but that
  looked too complicated, so I punted for now.)
* The maximum signal nesting depth in the src/runtime/ support code has
  been reduced from 4096 to 256. (I don't know any reason for the very
  large old value. If the new smaller value turns out to break something,
  I'll probably just bump it back up.)
* PPRINT-LOGICAL-BLOCK is now pickier about the types of its arguments,
  as per ANSI.
* Many, many bugs reported by Peter Van Eynde have been added to
  the BUGS list; some have even been fixed.
* While enabling dynamic object file loading, I tried to make the 
  code easier to understand, renaming various functions and variables
  with less ambiguous names, and changing some function calling
  conventions to be Lispier (e.g. returning NIL instead of 0 for failure).
* While trying to figure out how to do the OpenBSD port, I tried to 
  clean up some of the code in src/runtime/. In particular, I dropped
  support for non-POSIX signal handling, added various comments, 
  tweaked the code to reduce the number of compilation warnings, and
  renamed some files to increase consistency.
* To support the new automatic configuration functionality in make.sh,
  the source file target-features.lisp-expr has been replaced with the
  source file base-target-features.lisp-expr and the machine-generated
  file local-target-features.lisp-expr.
* fixed a stupid quoting error in make.sh so that using CMU CL
  "lisp -batch" as cross-compilation host works again

changes in sbcl-0.6.8 relative to sbcl-0.6.7:

* The system is now under CVS at SourceForge (instead of the
  CVS repository on my home machine).
* The new signal handling code has been tweaked to treat register
  contents as (UNSIGNED-BYTE 32), as the old CMU CL code did,
  instead of (SIGNED-BYTE 32), as the C header files have it. (Code 
  downstream, e.g. in debug-int.lisp, has implicit dependencies
  on the unsignedness of integer representation of machine words, 
  and that caused the system to bomb out with infinite regress
  when trying to recover from type errors involving signed values,
  e.g. (BUTLAST '(1 2 3) -1).)
* (BUTLAST NIL) and (NBUTLAST NIL) now return NIL as they should.
  (This was one of the bugs Peter Van Eynde reported back in July.)
* The system now uses code inspired by Colin Walters' O(N)
  implementation of MAP (from the cmucl-imp@cons.org mailing
  list, 2 September 2000) when it can't use a DEFTRANSFORM to
  inline the MAP operation, and there is more than one
  sequence argument to the MAP call (so that it can't just
  do ETYPECASE once and for all based on the type of the
  single sequence argument). (The old non-inline implementation
  of the general M-argument sequence-of-length-N case required
  O(M*N*N) time when any of the sequence arguments were LISTs.)
* The QUIT :UNIX-CODE keyword argument has been renamed to 
  QUIT :UNIX-STATUS. (The old name still works, but is deprecated.)
* Raymond Wiker's patches to port RUN-PROGRAM from CMU CL to SBCL
  have been added.
* Raymond Wiker's patches to port dynamic loading from Linux to
  FreeBSD have been added.
* The BUGS file is now more nearly up to date, thanks in large part
  to Martin Atzmueller's review of it.
* The debugger now flushes standard output streams before it begins
  its output ("debugger invoked" and so forth).
* The core version number and fasl file version number have both
  been incremented, because of incompatible changes in the layout
  of static symbols.
* FINISH-OUTPUT is now called more consistently on QUIT. (It
  used to not be called for a saved Lisp image.)
* Martin Atzmueller's version of a patch to fix a compiler crash,
  as posted on sbcl-devel 13 September 2000, has been installed.
* Instead of installing Martin Atzmueller's patch for the
  compiler transform for SUBSEQ, I deleted the compiler transform,
  and transforms for some similar consing operations.
* A bug in signal handling which kept TRACE from working on OpenBSD
  has been fixed.
* added enough DEFTRANSFORMs to allow (SXHASH 'FOO) to be optimized
  away by constant folding
* The system now defines its address space constants in one place
  (in the Lisp sources), and propagates them automatically elsewhere
  (through GENESIS and the sbcl.h file). Therefore, patching the
  address map is less unnecessarily tedious and error-prone. The
  Lisp names of address space constants have also been systematized.
* CVS tags like dollar-Header-dollar have been removed from
  the sources, because they have never saved me trouble and
  they've been source of trouble working with patches and other
  diff-related operations.
* fixed the PROG1-vs.-PROGN bug in HANDLER-BIND (reported by 
  ole.rohne@cern.ch on cmucl-help@cons.org 2000-10-25)

changes in sbcl-0.6.9 relative to sbcl-0.6.8:

* DESCRIBE now works on CONDITION objects.
* The debugger now handles errors which arise when trying to print
  *DEBUG-CONDITION*, so that it's less likely to fall into infinite
* The build system now uses an additional file, customize-target-features.lisp,
  to allow local modifications to the target *FEATURES* list. (The point of
  this is that now I can set up a custom configuration, e.g. with :SB-SHOW
  debugging features enabled, without having to worry about propagating it
  into everyone's system when I do a "cvs update".) When no
  customize-target-features.lisp file exists, the target *FEATURES* list
  should be constructed the same way as before.
* fixed bugs in DEFCONSTANT ANSI-compatibility:
  ** DEFCONSTANT now tests reassignments using EQL, not EQUAL, in order to 
     warn about behavior which is undefined under the ANSI spec. Note: This
     is specified by ANSI, but it's not very popular with programmers.
     If it causes you problems, take a look at the new SB-INT:DEFCONSTANT-EQX
     macro in the SBCL sources for an example of a workaround which you
     might use to make portable ANSI-standard code which does what you want.
  ** DEFCONSTANT's implementation is now based on EVAL-WHEN instead of on
     pre-ANSI IR1 translation magic, so it does the ANSI-specified thing
     when it's used as a non-toplevel form. (This is required in order
     to implement the DEFCONSTANT-EQX macro.)
  ** (DEFCONSTANT X 1) (DEFVAR X) (SETF X 2) no longer "works".
  ** Unfortunately, non-toplevel DEFCONSTANT forms can still do some
     funny things, due to bugs in the implementation of EVAL-WHEN
     (bug #IR1-3). This probably won't be fixed until 0.7.x. (Fortunately,
     non-toplevel DEFCONSTANTs are uncommon.)
* The core file version number and fasl file version number have been 
  incremented, because the old noncompliant DEFCONSTANT behavior involved
  calling functions which no longer exist, and because I also took the
  opportunity to chop an unsupported slot out of the DEBUG-SOURCE structure.
* fixed bug 1 (error handling before read-eval-print loop starts), and
  redid debugger restarts and related debugger commands somewhat while
  doing so:
  ** The QUIT debugger command is gone, since it did something
     rather different than the SB-EXT:QUIT command, and since it never
     worked properly outside the main toplevel read/eval/print loop.
     Invoking the new TOPLEVEL restart provides the same functionality.
  ** The GO debugger command is also gone, since you can just invoke
     the CONTINUE restart directly instead.
  ** The TOP debugger command is also gone, since it's redundant with the
     FRAME 0 command, and since it interfered with abbreviations for the
     TOPLEVEL restart.
* The system now recovers better from non-PACKAGE values of the *PACKAGE*
* The system now understands compound CONS types (e.g. (CONS FIXNUM T))
  as required by ANSI. (thanks to Douglas Crosher's CMU CL patches, with
  some porting work by Martin Atzmueller)
* Martin Atzmueller reviewed the CMU CL mailing lists and came back
  with a boatload of patches which he ported to SBCL. Now that those
  have been applied,
  ** The system tries to make sure that its low-priority messages
     are prefixed by semicolons, to help people who like to use
     syntax highlighting in their ILISP buffer. (This patch
     was originally due to Raymond Toy.)
  ** The system now optimizes INTEGER-LENGTH better, thanks to more
     patches originally written by Raymond Toy.
  ** The compiler understands coercion between single-value and 
     multiple-VALUES type expressions better, getting rid of some very
     weird behavior, thanks to patches originally by Robert MacLachlan
     and Douglas Crosher.
  ** The system understands ANSI-style non-KEYWORD &KEY arguments in 
     lambda lists, thanks to a patch originally by Pierre Mai.
  ** The system no longer bogusly warns about "abbreviated type
  ** The compiler gets less confused by inlining and RETURN-FROM,
     thanks to some patches originally by Tim Moore.
  ** The system no longer hangs when dumping circular lists to fasl
     files, thanks to a patch originally from Douglas Crosher.
* Martin Atzmueller also fixed ROOM, so that it no longer fails with an
  undefined function error.
* gave up on fixing bug 3 (forbidden-by-ANSI warning for type mismatch
  in structure slot initforms) for now, documented workaround instead:-|
* fixed bug 4 (no WARNING for DECLAIM FTYPE of slot accessor function)
* fixed bug 5: added stubs for various Gray stream functions called
  in the not-a-CL:STREAM case, so that even when Gray streams aren't
  installed, at least appropriate type errors are generated
* fixed bug 8: better reporting of various PROGRAM-ERRORs
* fixed bug 9: IGNORE and IGNORABLE now work reasonably and more
  consistently in DEFMETHOD forms. 
* removed bug 21 from BUGS, since Martin Atzmueller points out that 
  it doesn't seem to affect SBCL after all
* The C runtime system now builds with better optimization and many
  fewer warnings, thanks to lots of cleanups by Martin Atzmueller.

changes in sbcl-0.6.10 relative to sbcl-0.6.9:

* A patch from Martin Atzmueller seems to have solved the SIGINT
  problem, and as far as we know, signal-handling now works cleanly.
  (If you find any new bugs, please report them!)
* The system no longer defaults Lisp source file names to types
  ".l", ".cl", or ".lsp", but only to ".lisp". 
* The compiler no longer uses special default file extensions for
  byte-compiled code. (The ANSI definition of COMPILE-FILE-PATHNAME
  seems to expect a single default extension for all compiled code,
  and there's no compelling reason to try to stretch the standard
  to allow two different extensions.) Instead, byte-compiled files
  default to the same extension as native-compiled files.
* Fasl file format version numbers have increased again, because
  a rearrangement of internal implementation packages made some 
  dumped symbols in old fasl files unreadable in new cores.
* DECLARE/DECLAIM/PROCLAIM logic is more nearly ANSI in general, with
  many fewer weird special cases.
* Bug #17 (differing COMPILE-FILE behavior between logical and 
  physical pathnames) has been fixed, and some related misbehavior too,
  thanks to a patch from Martin Atzmueller.
* Bug #30 (reader problems) is gone, thanks to a CMU CL patch
  by Tim Moore, ported to SBCL by Martin Atzmueller.
* Martin Atzmueller fixed several filesystem-related problems,
  including bug #36, in part by porting CMU CL patches, which were
  written in part by Paul Werkowski.
* More compiler warnings in src/runtime/ are gone, thanks to 
  more patches from Martin Atzmueller.
* Martin Atzmueller pointed out that bug 37 was fixed by his patches
  some time ago.

changes in sbcl-0.6.11 relative to sbcl-0.6.10:
* Martin Atzmueller pointed out that bugs #9 and #25 are gone in
  current SBCL.
* bug 34 fixed by Martin Atzmueller: dumping/loading instances works
  and UPGRADED-COMPLEX-PART-TYPE now work better with of compound
  types built from undefined types, e.g. '(VECTOR SOME-UNDEF-TYPE).
* DESCRIBE now works on structure objects again.
* Most function call argument type mismatches are now handled as
  STYLE-WARNINGs instead of full WARNINGs, since the compiler doesn't
  know whether the function will be redefined before the call is
  executed. (The compiler could flag local calls with full WARNINGs,
  as per the ANSI spec " Semantic Constraints", but right now
  it doesn't keep track of enough information to know whether calls
  are local in this sense.)
* Compiler output is now more verbose, with messages truncated
  later than before. (There should be some supported way for users
  to override the default verbosity, but I haven't decided how to 
  provide it yet, so this behavior is still controlled by the internal
* Fasl file format version numbers have increased again, because
  support for the Gray streams extension changes the layout of the
  system's STREAM objects.
* The Gray subclassable streams extension now works, thanks to a 
  patch from Martin Atzmueller.
* The full LOAD-FOREIGN extension (not just the primitive
  LOAD-FOREIGN-1) now works, thanks to a patch from Martin Atzmueller.
* The default behavior of RUN-PROGRAM has changed. Now, unlike CMU CL
  but like most other programs, it defaults to copying the Unix
  environment from the original process instead of starting the
  new process in an empty environment.
* Extensions which manipulate the Unix environment now support
  an :ENVIRONMENT keyword option which doesn't smash case or 
  do other bad things. The CMU-CL-style :ENV option is retained
  for porting convenience.
* LOAD-FOREIGN (and LOAD-1-FOREIGN) now support logical pathnames,
  as per Daniel Barlow's suggestion and Martin Atzmueller's patch

changes in sbcl-0.6.12 relative to sbcl-0.6.11:
* incompatible change: The old SB-EXT:OPTIMIZE-INTERFACE declaration
  is no longer recognized. I apologize for this, because it was
  listed in SB-EXT as a supported extension, but I found that
  its existing behavior was poorly specified, as well as incorrectly
  specified, and it looked like too much of a mess to straighten it
  out. I have enough on my hands trying to get ANSI stuff to work..
* many patches ported from CMU CL by Martin Atzmueller, with 
  half a dozen bug fixes in pretty-printing and the debugger, and
  half a dozen others elsewhere
* fixed bug 13: Floating point infinities are now supported again.
  They might still be a little bit flaky, but thanks to bug reports
  from Nathan Froyd and CMU CL patches from Raymond Toy they're not
  as flaky as they were.
* The --noprogrammer command line option is now supported. (Its
  behavior is slightly different in detail from what the old man
  page claimed it would do, but it's still appropriate under the
  same circumstances that the man page talks about.)
  are now supported, and enabled by default. Thus, the compiler can
  handle many floating point and complex operations much less
  inefficiently. (Thus e.g. you can implement a complex FFT
  without consing!)
* The compiler now detects type mismatches between DECLAIM FTYPE 
  and DEFUN better, and implements CHECK-TYPE more correctly, and
  SBCL builds under CMU CL again despite its non-ANSI EVAL-WHEN,
  thanks to patches from Martin Atzmueller.
* various fixes to make the cross-compiler more portable to
  ANSI-conforming-but-different cross-compilation hosts (notably
  Lispworks for Windows, following bug reports from Arthur Lemmens)
  ANSI noncompliance in DEFMACRO &KEY argument parsing, have been
  fixed thanks to Pierre Mai's CMU CL patches.
* fixes to keep the system from overflowing internal counters when
  it tries to use i/o buffers larger than 16M bytes
* fixed bug 45a: Various internal functions required to support
  complex special functions have been merged from CMU CL sources.
  (When I was first setting up SBCL, I misunderstood a compile-time
  conditional #-OLD-SPECFUN, and so accidentally deleted them.)
* improved support for type intersection and union, fixing bug 12
  (e.g., now (SUBTYPEP 'KEYWORD 'SYMBOL)=>T,T) and some other
  more obscure bugs as well
* some steps toward byte-compiling non-performance-critical
  parts of the system, courtesy of patches from Martin Atzmueller
* Christophe Rhodes has made some debian packages of sbcl at
  From his sbcl-devel e-mail of 2001-04-08 they're not completely
  stable, but are nonetheless usable. When he's ready, I'd be happy
  to add them to the SourceForge "File Releases" section. (And if
  anyone wants to do RPMs or *BSD packages, they'd be welcome too.)
* new fasl file format version number (because of changes in 
  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 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
* 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
* 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:
* 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,
     *** 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.
  ** 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.
     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-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:
     up properly again. (There was a packaging bug in 0.7.0 which
     left their definitions in SB-SYS::LOAD-FOREIGN and 
     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)
  * minor incompatible change: new larger values for *DEBUG-PRINT-LENGTH*
  * 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
    ** 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)
    ** fixes in CONDITION class precedence list for undefined function
       errors (thanks to Alexei Dejneka)
    ** *DEFAULT-PATHNAME-DEFAULTS* is used more consistently and 
       correctly. (thanks to Dan Barlow)
    ** portability fixes aiming at bootstrapping under CLISP (thanks
       to Dave McDonald and Christophe Rhodes)
    ** FORMAT fixes (thanks to Robert Strandh and Dan Barlow)
    ** fixes in type translation and and type inference (thanks to
       Christophe Rhodes)
    ** fixes to optimizer internal errors (thanks to Alexei Dejneka)
    ** various fixes in the new ports (thanks to Dan Barlow)
  * 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

changes in sbcl-0.7.3 relative to sbcl-0.7.2:
  * ANSI's DEFINE-SYMBOL-MACRO is now supported. (thanks to Nathan
    Froyd porting CMU CL code originally by Douglas Thomas Crosher)
  * SBCL now runs on the PPC archtiecture under Linux. It actually did
    this as of, but was left out of the previous news section
    (thanks to Dan Barlow)
  * SBCL now runs on the Solaris operating system on SPARC architectures
    (thanks to Christophe Rhodes's port of the CMUCL runtime)
  * cleanups to the runtime on SPARC, both Linux and Solaris, and for
    gcc>=3 (thanks to Nathan Froyd and Ingvar Mattsson)
  * SPARC backend cleanups, allowing builds of cores optimized for V8
    and V9 SPARCS, and also emission of code targeted to a particular
    backend chosen at runtime (thanks to Christophe Rhodes and Raymond
  * SBCL is closer to bootstrapping under CLISP, thanks to various
    fixes by Christophe Rhodes.
  * The fasl file format has changed again, to allow the compiler's
    INFO database to support symbol macros.
  * The user manual (in doc/) is formatted into HTML more nicely.
    (thanks to coreythomas)
  * The system is smarter about SUBTYPEP relationships, especially
    those involving NOT types (including types such as ATOM which are
    represented internally using NOT types). Thus SUBTYPEP is less
    likely to return (VALUES NIL NIL) in general, and in particular
    bugs 58 and (the remaining bits of) bug 50 are fixed. (thanks to
    Christophe Rhodes)
  * The fasl file format has changed again, because the internal
    representation of types now includes a new slot to support the new
    SUBTYPEP-of-NOT-types logic.
  * (not a change in the main branch of SBCL, but a related prototype
    which can hopefully be merged into the main branch of SBCL in the
    future:) Brian Spilsbury has produced a Unicode-enabled variant of
    sbcl-0.7.0, available as a patch against sbcl-0.7.0 at
  * Bug 151 fixed: GET-DISPATCH-MACRO-CHAR now returns NIL for undefined
    dispatch macro character combinations. (thanks to Alexey Dejneka)
  * Bugfix in PARSE-NAMESTRING: we now correctly parse unix namestrings 
    that superficially look like logical namestrings correctly.
  * USER-HOMEDIR-PATHNAME now returns a (physical) pathname that SBCL
    can deal with.
  * Bugfix in DEFSTRUCT: BOA constructor lambda lists now accept (name
    default supplied-p) for &optional and &key arguments. (thanks to
    Martin Atzmueller)

changes in sbcl-0.7.4 relative to sbcl-0.7.3:
  * bug 147 fixed: The compiler preserves its block link/count
    invariants more correctly now so that it doesn't crash. (thanks
    to Alexey Dejneka)
  * Dynamic loading of object files in OpenBSD is now supported. (thanks
    to Pierre Mai)
  * COMPILE now works correctly on macros. (thanks to Matthias Hoelzl)
    no-value-for-this-character as NIL (as specified by ANSI).
  * HOST-NAMESTRING on physical pathnames now returns a string that is
    valid as a host argument to MERGE-PATHNAMES and to MAKE-PATHNAME.
    (thanks to Christophe Rhodes)
  * The Alpha port handles icache flushing more correctly. (thanks to
    Dan Barlow)
  * More progress has been made toward bootstrapping under CLISP. (thanks
    to Christophe Rhodes)
  * The fasl file format has changed again, because dynamic loading
    on OpenBSD (which has non-ELF object files) motivated some cleanups
    in the way that foreign symbols are transformed and passed around.
  * minor incompatible change: The ASCII RUBOUT character, (CHAR-CODE 127),
    is no longer treated as whitespace by the reader, but instead as
    an ordinary character. Thus e.g. (READ-FROM-STRING "AB") returns
    |AB|, instead of A as it used to.

changes in sbcl-0.7.5 relative to sbcl-0.7.4:
  * SBCL now builds with OpenMCL (version 0.12) as the
    cross-compilation host; also, more progress has been made toward
    bootstrapping under CLISP.
  * SBCL now runs on the Tru64 (aka OSF/1) operating system on the
    Alpha architecture.
  * bug 158 fixed: The compiler can now deal with integer loop
    increments different from 1; fixing this turned out also to fix
    bug 164.
  * bug 169 fixed: no more bogus warnings about using lexical bindings
    despite the presence of perfectly good SPECIAL declarations (thanks
    to David Lichteblau)
  * bug 175 fixed: CHANGE-CLASS is now more ANSI-conforming,
    accepting initargs. (thanks to Espen Johnsen and Pierre Mai)
  * bug 179 fixed: DIRECTORY can now deal with filenames with pattern
    characters in them.
  * bug 180 fixed: Method combination specifications no longer ignore
    the :MOST-SPECIFIC-LAST option. (thanks to Pierre Mai)
  * bug fix: Structure type predicate functions now check their argument
    count as they should.
  * bug fix: Classes with :METACLASS STRUCTURE-CLASS now print
    correctly. (thanks to Pierre Mai)
  * minor incompatible change: The --noprogrammer option is deprecated
    in favor of the new --disable-debugger option, which is very similar.
    (The major difference is that it takes effect at a slightly different
    time at startup, causing handling of errors in --sysinit and
    --userinit files will be affected differently.) The
    been added to allow this functionality to be controlled from ordinary
    Lisp code. (ENABLE-DEBUGGER should help people like the Debian
    maintainers, who might want to run non-interactive scripts to
    build SBCL cores which will later be used interactively.)
  * minor incompatible change: The LOAD function no longer, when given
    a wild pathname to load, loads all files matching that pathname.
    Instead, an error of type FILE-ERROR is signalled.

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.)

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.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
  * 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
  * fixed bug: printing of FILE-ERROR (thanks to Antonio
  * 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
  * 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.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
    ** 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
  * 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

planned incompatible changes in 0.7.x:
* 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.)
* Inlining can now be controlled the ANSI way, without
  MAYBE-INLINE, since the idiom
	(DEFUN FOO (..) ..)
	(DEFUN BAR (..) (FOO ..))
  now does what ANSI says it should. The CMU-CL-style 
  SB-EXT:MAYBE-INLINE declaration is now deprecated and ignored.