-changes in sbcl-0.8alpha.0 relative to sbcl-0.7.14
- * experimental native threads support (on x86 Linux >=2.4 only).
- This is not compiled in by default: you need to add :SB-THREAD to
- the target features. See the "Beyond ANSI" chapter of the manual
- for details.
- * fix for longstanding nonANSIism: The old distinction between
- CL:CLASS objects and SB-PCL:CLASS objects has been eliminated.
- The return value from CL:FIND-CLASS is now a CLOS class, and
- likewise that of CL:CLASS-OF; CL:BUILT-IN-CLASS,
- CL:STRUCTURE-CLASS and CL:STANDARD-CLASS name CLOS classes.
- * An interface to the MetaObject Protocol, as described in Kiczales,
- des Rivieres and Bobrow's "The Art of the Metaobject Protocol",
- MIT Press, 1991, is available from the SB-MOP package.
- * incompatible change: the SB-PCL package should now be considered
- a private implementation detail, and no longer a semi-private MOP
- interface.
- * minor incompatible change: due to rearrangement for threads, the
- control stack and binding stack are now allocated at arbitrary
- addresses instead of being hardcoded per-port. Users affected by
- this probably have to be doing advanced things with shared
- libraries, and will know who they are.
- * minor incompatible change: Previously, all --eval forms used were
- processed with READ before any of them were processed with EVAL.
- Now each --eval form is processed with both READ and EVAL before
- the next --eval form is processed. (Thus package operations like
- sbcl --eval "(defpackage :foo)" --eval "(print 'foo::bar)" now
- work as the user might reasonably expect.)
- * minor incompatible change: *STANDARD-INPUT* is now only an
- INPUT-STREAM, not a BIDIRECTIONAL-STREAM. (thanks to Antonio
- Martinez)
- * minor incompatible change: Y-OR-N-P is now character-oriented,
- not line oriented. Also, YES-OR-NO-P now works without errors.
- (thanks to Antonio Martinez)
- * sb-aclrepl module improvements: an integrated inspector, added
- repl features, and a bug fix to :trace command.
- * Known functions, which cannot be open coded by the backend, are
- considered to be able to check types of their arguments. (fixing
- a bug report by Nathan J. Froyd)
- * fixed a bug in computing method discriminating functions: It is
- now possible to define methods specialized on classes which have
- forward-referenced superclasses. (thanks to Gerd Moellmann)
- * fixed evaluation order in optional entries (reported by Gilbert
- Baumann)
- * SB-MOP:ENSURE-CLASS-USING-CLASS now takes its arguments in the
- specified-by-AMOP order of (CLASS NAME &REST ARGS &KEY).
- * SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION now takes the
- required-by-AMOP NAME argument, as well as CLASS and
- DIRECT-SLOT-DEFINITIONS. (thanks to Kevin Rosenberg)
- * fixed bug 20: DEFMETHOD can define methods using names that are
- not the proper names of classes to designate class specializers.
- * bug fix: INTERACTIVE-STREAM-P now works on streams associated with
- Unix file descriptors, instead of blowing up. (thanks to Antonio
- Martinez)
- * Garbage collection refactoring: user-visible change is that a
- call to the GC function during WITHOUT-GCING will not do garbage
- collection until the end of the WITHOUT-GCING. If you were doing
- this you were probably losing anyway.
- * fixed bug in MEMBER type: (MEMBER 0.0) is not the same as
- (SINGLE-FLOAT 0.0 0.0), because of the existence of -0.0 which is
- TYPEP the latter but not the former.
- * The compiler issues a full WARNING for calls to undefined functions
- with names from the CL package.
- * MAP-INTO for a vector destination is open coded. (reported by
- Brian Downing on c.l.l)
- * bug fix: the long form of DEFINE-METHOD-COMBINATION now accepts a
- documentation string.
- * fixed some bugs revealed by Paul Dietz' test suite:
- ** COPY-ALIST now signals an error if its argument is a dotted
- list.
- ** Condition slots are now accessed more correctly in the presence
- of multiple initargs for a given slot.
- ** The USE-VALUE, CONTINUE and STORE-VALUE functions now correctly
- exclude restarts of the same name associated with a different
- condition.
- ** DEFCLASS of forward-referenced classes with another
- forward-referenced class in the superclasses list no longer
- causes an error.
- ** Condition slots are now initialized once each, not multiple
- times. (thanks to Gerd Moellmann)
- ** CONVERT-MORE-CALL failed on a lambda list (&KEY). (thanks to
- Gerd Moellmann)
- ** &WHOLE and &REST arguments in macro lambda lists are patterns.
- ** NSET-EXCLUSIVE-OR does not return extra elements when its
- arguments contain duplicated elements.
- ** RESTART-CASE understands local macros.
- ** RESTART-CASE associates exactly its own restarts with a condition.
- ** ENDP in safe mode checks its argument to be of type LIST.
- ** COPY-SYMBOL in a threaded build no longer fails when the symbol
- in question is unbound.
- ** Optimized MAKE-INSTANCE functions no longer cause internal
- assertion failures in the presence of duplicate initargs.
- ** SLOT-MAKUNBOUND returns the instance acted upon, not NIL.
- ** Side-effectful :DEFAULT-INITARGS have their side-effects
- propagated even in the ctor optimized implementation of
- MAKE-INSTANCE.
- ** :ALLOW-OTHER-KEYS NIL is now accepted in an initarg list.
+changes in sbcl-0.7.0 relative to sbcl-0.6.13:
+* major incompatible change: The default fasl file extension, i.e. the
+ default extension for files produced by COMPILE-FILE, has changed
+ to ".fasl", for all architectures. (No longer ".x86f" and ".axpf".)
+* compiler changes:
+ ** There are many changes in the implementation of the compiler.
+ SBCL is now essentially a compiler-only implementation of ANSI
+ Common Lisp. EVAL still "interprets" a few special cases, but
+ almost all the interesting cases are handled by creating
+ a LAMBDA expression, calling COMPILE on it, then calling
+ FUNCALL on the result.
+ ** The EVAL-WHEN code has been rewritten to be ANSI-compliant, and
+ various related bugs (IR1-1, IR1-2, IR1-3, IR1-3a) have gone away.
+ Since the code is newer, there might still be some new bugs
+ (though not as many as before Martin Atzmueller's fixes:-). But
+ the new code is substantially simpler and clearer, and hopefully
+ any remaining bugs will be simpler, less fundamental, and more
+ fixable then the bugs in the old code.
+ ** The revised compiler is still a little unsteady on its feet.
+ In particular,
+ *** The debugging information it produces (particularly the names
+ of FUNCTION objects) is sometimes much less useful than what
+ the old compiler produced.
+ *** The support for inlining FOO when you (DECLAIM (INLINE FOO))
+ then do (DEFUN FOO ..) in a non-null lexical environment (e.g.
+ within a MACROLET) has been temporarily weakened.
+ ** There are new compiler optimizations for various functions:
+ *** the sequence functions FIND, POSITION, FIND-IF, POSITION-IF,
+ FIND-IF-NOT, POSITION-IF-NOT, and FILL
+ *** the math functions TRUNCATE, FLOOR, and CEILING
+ *** the function-of-all-trades COERCE
+ Mostly these should be transparent, but there's one
+ potentially-annoying problem (bug 117): when the compiler
+ inline-expands a function and does type analysis on the result,
+ it can create control paths which have type mismatches, and
+ when it can't prove that those control paths aren't taken,
+ it will issue WARNINGs about the type mismatches. This is
+ a particular problem in practice for the new sequence functions.
+ It's not clear how this should be fixed, and for now, a
+ workaround is given in the entry for 117 in the BUGS file.
+ ** (Because of the interaction between the two previous items --
+ occasional inlining problems and new inline expansions -- some
+ of the new sequence function optimizations won't really kick in
+ completely until debugging information, and then inlining, are
+ straightened out in some future version.)
+* minor incompatible changes:
+ ** As part of a bug fix by Christophe Rhodes to DIRECTORY behavior,
+ DIRECTORY no longer implicitly promotes NIL slots of its
+ pathname argument to :WILD. In particular, when you ask for the
+ contents of a directory (which you used to be able to do without
+ explicit wildcards, e.g. (DIRECTORY "/tmp/")) you now need to use
+ explicit wildcards, e.g. (DIRECTORY "/tmp/*.*").
+ ** changes in behavior that ANSI explicitly defines to be
+ implementation dependent:
+ *** The new compiler-only implementation still conforms with ANSI,
+ but acts a little different than before. Besides the obvious
+ changes in performance tradeoffs (that the cost per form passed
+ to EVAL has gone up, and the cost per form executed by EVAL
+ has gone down), the behavior of the system changes a little
+ because there are no longer any interpreted function objects.
+ COMPILED-FUNCTION-P is now synonymous with FUNCTIONP, and
+ e.g. doing COMPILE on the output of interactive DEFUN is
+ now a no-op.
+ *** The value of INTERNAL-TIME-UNITS-PER-SECOND has been increased
+ from 100 to 1000.
+ *** The default for the USE list in MAKE-PACKAGE and DEFPACKAGE
+ has changed from (:CL) to NIL.
+ *** The CHAR-NAME of unprintable ASCII characters which, unlike
+ e.g. #\Newline and #\Tab, don't have names specified in the
+ ANSI Common Lisp standard, is now based on their ASCII symbolic
+ names (#\Nul, #\Soh, #\Stx, etc.) The old CMU-CL-style names
+ (#\Null, #\^a, #\^b, etc.) are still accepted by NAME-CHAR, but
+ are no longer used for output.
+ ** changes in internal implementation constants:
+ *** The default value of *BYTES-CONSED-BETWEEN-GCS* has doubled, to
+ 4 million. (If your application spends a lot of time GCing and
+ you have a lot of RAM, you might want to experiment with
+ increasing it even more.)
+ ** The SB-C-CALL package has been merged into the SB-ALIEN package.
+ However, almost all old code should still continue to work without
+ immediate update, as SB-C-CALL is now a (deprecated) nickname
+ for SB-ALIEN.
+ ** Old operator names in the style DEF-FOO are now deprecated in
+ favor of new corresponding names DEFINE-FOO, for consistency with
+ the naming convention used in the ANSI standard (DEFSTRUCT, DEFVAR,
+ DEFINE-CONDITION, DEFINE-MODIFY-MACRO..). This mostly affects
+ internal symbols, but a few supported extensions like
+ SB-ALIEN:DEF-ALIEN-FUNCTION are also affected. (So e.g.
+ DEF-ALIEN-FUNCTION becomes DEFINE-ALIEN-FUNCTION.)
+ ** The debugger prompt sequence now goes "5]", "5[2]", "5[3]",
+ etc. as you get deeper into recursive calls to the debugger
+ command loop, instead of the old "5]", "5]]", "5]]]"
+ sequence. (I was motivated to do this when squabbles between
+ ILISP and SBCL left me very deeply nested in the debugger. In the
+ short term, this change will probably provoke more ILISP/SBCL
+ squabbles, but hopefully it will be an improvement in the long run.)
+ ** SB-ALIEN:DEFINE-ALIEN-FUNCTION (also known by the old deprecated
+ name DEF-ALIEN-FUNCTION) now does DECLAIM FTYPE for the defined
+ function, since declaiming return types involving aliens is
+ (1) annoyingly messy to do by hand and (2) vital to efficient
+ compilation of code which calls such functions.
+ ** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are no
+ longer reexported by the SB-EXT package. They're solely useful
+ for alien code, so it seems more logical that you should get
+ them from the SB-ALIEN package, not in SB-EXT.
+ ** :SB-CONSTRAIN-FLOAT-TYPE, :SB-PROPAGATE-FLOAT-TYPE, and
+ :SB-PROPAGATE-FUN-TYPE are no longer considered to be optional
+ features. Instead, the code that they used to control is always
+ built into the system.
+* many other bug fixes
+ ** DEFSTRUCT and DEFCLASS have been substantially updated to take
+ advantage of the new EVAL-WHEN stuff and to clean them up in
+ general, and they are now more ANSI-compliant in a number of
+ ways. Martin Atzmueller is responsible for a lot of this.
+ ** Besides the cleanups discussed above, Martin Atzmueller fixed
+ several other bugs:
+ *** fixes in READ-SEQUENCE and WRITE-SEQUENCE
+ *** correct ERROR type for various file operations
+ *** some fixes for Lisp streams
+ *** DEFMETHOD syntax checking
+ *** changing old weird representation of debug information as
+ strings (which, among their other deficiencies, don't transform
+ correctly when you rename packages, and don't change their
+ print representation when you change things like *PACKAGE*
+ and *PRINT-LENGTH*) to symbols and lists of symbols
+ He also made several improvements and fixed several bugs in DESCRIBE.
+ ** Alexey Dejneka fixed many bugs, including classic bugs and bugs he
+ discovered himself:
+ *** misbehavior of WRITE-STRING/WRITE-LINE
+ *** LOOP over keys of a hash table, LOOP bugs 49b and 81 and 103,
+ and several other LOOP problems as well
+ *** DIRECTORY when similar filenames are present
+ *** DEFGENERIC with :METHOD options
+ *** bug 126, in (MAKE-STRING N :INITIAL-ELEMENT #\SPACE))
+ *** bug in the optimization of ARRAY-ELEMENT-TYPE
+ *** argument ordering in FIND with :TEST option
+ *** mishandled package designator argument in APROPOS-LIST
+ *** various problems in the backquote readmacro
+ *** a bug in APROPOS
+ *** probably some others that I'm not describing very well here,
+ since the CVS log documents them by reference to sbcl-devel
+ messages, and the SourceForge archives aren't working well.:-(
+ ** Dan Barlow improved the Alpha port (and is making progress on the
+ PPC port, for those of you who think different).
+ ** Besides the DIRECTORY fixes and changes mentioned elsewhere,
+ Christophe Rhodes cleaned up the system self-test scripts (in tests/*),
+ contributed the optimization of FIND-IF-NOT and POSITION-IF-NOT, and
+ continues to work on the SPARC port (for those of you in a position
+ to look down upon our little PC-compatible boxes from a great height).
+ ** PPRINT-LOGICAL-BLOCK now copies the *PRINT-LINES* value on entry
+ and uses that copy, rather than the current dynamic value, when
+ it's trying to decide whether to truncate output. Thus e.g.
+ (let ((*print-lines* 50))
+ (pprint-logical-block (stream nil)
+ (dotimes (i 10)
+ (let ((*print-lines* 8))
+ (print (aref possiblybigthings i) stream)))))
+ should now truncate the logical block only at 50 lines, instead of
+ often truncating it at 8 lines, as it did before.
+* The doc/cmucl/ directory, containing old CMU CL documentation
+ from the time of the fork, is no longer part of the base system.
+ SourceForge has shut down its anonymous FTP service, and with it
+ my original plan for distributing the old CMU CL documentation
+ there. For now, if you need these files you can download an old
+ SBCL source release and extract them from it.
+* The fasl file version number changed again, for dozens of reasons,
+ some of which are apparent above.
+
+changes in sbcl-0.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.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.)
+* The :SB-PROPAGATE-FLOAT-TYPE and :SB-PROPAGATE-FUN-TYPE features
+ 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)
+* A bug in READ-SEQUENCE for CONCATENATED-STREAM, and a gross
+ 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
+ <http://www-jcsu.jesus.cam.ac.uk/ftp/pub/debian/lisp>.
+ 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)