mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
Quiet. Too quiet. Fix bug in pprinting backquotes, introduced *sigh* when fixing the last bug... ... we need to print once to a string stream, to look at the first character to make sure that it's not a @ or a . ... and then we need to print again, but this time to the real stream (which is at a different logical block position) ... yes, possibly there is a better way. Also put identity where mouth is: add self to SUPPORT
2251 lines
125 KiB
Plaintext
2251 lines
125 KiB
Plaintext
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
|
||
* added doc/FOR-CMUCL-DEVELOPERS
|
||
* 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
|
||
FOP-POP-FOR-EFFECT
|
||
* 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
|
||
* deleted DEFUN UNDEFINED-VALUE, replaced (UNDEFINED-VALUE) forms
|
||
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
|
||
DEFINE-COMPILER-MACRO..)
|
||
* 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
|
||
*TOP-LEVEL-LAMBDA-MAX* to 0. )
|
||
* 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
|
||
(PACKAGE-NICKNAMES (FIND-PACKAGE "KEYWORD")) list.
|
||
* 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
|
||
(DEFVAR *HT* (MAKE-HASH-TABLE))
|
||
(SETF (GETHASH :EMPTY *HT*) :EMPTY)
|
||
(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
|
||
implementations.
|
||
* 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.
|
||
(DEFMETHOD FOO ((X SINGLE-FLOAT))
|
||
(+ X 123.0))
|
||
is now basically equivalent to
|
||
(DEFMETHOD FOO ((X SINGLE-FLOAT))
|
||
(DECLARE (TYPE SINGLE-FLOAT X))
|
||
(+ 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.
|
||
(DEFUN FOO (V) (DECLARE (TYPE (VECTOR T) V)) (AREF V 3))
|
||
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.
|
||
* (TYPEP (MAKE-ARRAY 12 :FILL-POINTER 4) 'VECTOR) now returns (VALUES T)
|
||
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
|
||
regress.
|
||
* 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*
|
||
variable.
|
||
* 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
|
||
declarations".
|
||
** 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
|
||
better
|
||
* fixed bug 40: TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE,
|
||
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 "3.2.2.3 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
|
||
SB-C::*COMPILER-ERROR-PRINT-FOO* variables in
|
||
src/compiler/ir1util.lisp.)
|
||
* 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.)
|
||
* 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)
|
||
|
||
changes in sbcl-0.6.13 relative to sbcl-0.6.12:
|
||
* a port to the Compaq/DEC Alpha CPU, thanks to Dan Barlow
|
||
* Martin Atzmueller ported Tim Moore's marvellous CMU CL DISASSEMBLE
|
||
patch, so that DISASSEMBLE output is much nicer.
|
||
* The code in the SB-PROFILE package now seems reasonably stable.
|
||
I still haven't decided what the final interface should look like
|
||
(I'd like PROFILE to interact cleanly with TRACE, since both
|
||
facilities use function encapsulation) but if you have a need
|
||
for profiling now, you can probably use it successfully with
|
||
the current CMU-CL-style interface.
|
||
* Pathnames and *DEFAULT-DIRECTORY-DEFAULTS* are much more
|
||
ANSI-compliant, thanks to various fixes and tests from Dan Barlow.
|
||
Also, at Dan Barlow's suggestion, TRUENAME on a dangling symbolic
|
||
link now returns the dangling link itself, and for similar
|
||
reasons, TRUENAME on a cyclic symbolic link returns the cyclic
|
||
link itself. (In these cases the old code signalled an error and
|
||
looped endlessly, respectively.) Thus, DIRECTORY now works even
|
||
in the presence of dangling and cyclic symbolic links.
|
||
* Compiler trace output (the :TRACE-FILE option to COMPILE-FILE)
|
||
is now a supported extension again, since the consensus on
|
||
sbcl-devel was that it can be useful for ordinary development
|
||
work, not just for debugging SBCL itself.
|
||
* The default for SB-EXT:*DERIVE-FUNCTION-TYPES* has changed to
|
||
NIL, i.e. ANSI behavior, i.e. the compiler now recognizes
|
||
that currently-defined functions might be redefined later with
|
||
different return types.
|
||
* Hash tables can be printed readably, as inspired by CMU CL code
|
||
of Eric Marsden and SBCL code of Martin Atzmueller.
|
||
* better error handling in CLOS method combination, thanks to
|
||
Martin Atzmueller porting Pierre Mai's CMU CL patches
|
||
* more overflow fixes for >16Mbyte I/O buffers
|
||
* A bug in READ has been fixed, so that now a single Ctrl-D
|
||
character suffices to cause end-of-file on character streams.
|
||
In particular, now you only need one Ctrl-D at the command
|
||
line (not two) to exit SBCL.
|
||
* fixed bug 26: ARRAY-DISPLACEMENT now returns (VALUES NIL 0) for
|
||
undisplaced arrays.
|
||
* fixed bug 107 (reported as a CMU CL bug by Erik Naggum on
|
||
comp.lang.lisp 2001-06-11): (WRITE #*101 :RADIX T :BASE 36) now
|
||
does the right thing.
|
||
* The implementation of some type tests, especially for CONDITION
|
||
types, is now tidier and maybe faster, due to CMU CL code
|
||
originally by Douglas Crosher, ported by Martin Atzmueller.
|
||
* Some math functions have been fixed, and there are new
|
||
optimizers for deriving the types of COERCE and ARRAY-ELEMENT-TYPE,
|
||
thanks to Raymond Toy's work on CMU CL, ported by Martin Atzmueller.
|
||
* (There are also some new optimizers in contrib/*-extras.lisp. Those
|
||
aren't built into sbcl-0.6.13, but are a sneak preview of what's
|
||
likely to be built into sbcl-0.7.0.)
|
||
* A bug in COPY-READTABLE was fixed. (Joao Cachopo's patch to CMU
|
||
CL, ported to SBCL by Martin Atzmueller)
|
||
* DESCRIBE now gives more information in some cases. (Pierre Mai's
|
||
patch to CMU CL, ported to SBCL by Martin Atzmueller)
|
||
* Martin Atzmueller and Bill Newman fixed some bugs in INSPECT.
|
||
* There's a new slam.sh hack to shorten the edit/compile/debug
|
||
cycle for low-level changes to SBCL itself, and a new
|
||
:SB-AFTER-XC-CORE target feature to control the generation of
|
||
the after-xc.core file needed by slam.sh.
|
||
* minor incompatible change: The ENTRY-POINTS &KEY argument to
|
||
COMPILE-FILE is no longer supported, so that now every function
|
||
gets an entry point, so that block compilation looks a little
|
||
more like the plain vanilla ANSI section 3.2.2.3 scheme.
|
||
* minor incompatible change: SB-EXT:GET-BYTES-CONSED now
|
||
returns the number of bytes consed since the system started,
|
||
rather than the number consed since the first time the function
|
||
was called. (The new definition parallels ANSI functions like
|
||
CL:GET-INTERNAL-RUN-TIME.)
|
||
* minor incompatible change: The old CMU-CL-style DIRECTORY options,
|
||
i.e. :ALL, :FOLLOW-LINKS, and :CHECK-FOR-SUBDIRS, are no longer
|
||
supported. Now DIRECTORY always does the abstract Common-Lisp-y
|
||
thing, i.e. :ALL T :FOLLOW-LINKS T :CHECK-FOR-SUBDIRS T.
|
||
* Fasl file version numbers are now independent of the target CPU,
|
||
since historically most system changes which required version
|
||
number changes have affected all CPUs equally. Similarly,
|
||
the byte fasl file version is now equal to the ordinary
|
||
fasl file version.
|
||
|
||
changes in sbcl-0.7.0 relative to sbcl-0.6.13:
|
||
* major incompatible change: The default fasl file extension, i.e. the
|
||
default extension for files produced by COMPILE-FILE, has changed
|
||
to ".fasl", for all architectures. (No longer ".x86f" and ".axpf".)
|
||
* compiler changes:
|
||
** There are many changes in the implementation of the compiler.
|
||
SBCL is now essentially a compiler-only implementation of ANSI
|
||
Common Lisp. EVAL still "interprets" a few special cases, but
|
||
almost all the interesting cases are handled by creating
|
||
a LAMBDA expression, calling COMPILE on it, then calling
|
||
FUNCALL on the result.
|
||
** The EVAL-WHEN code has been rewritten to be ANSI-compliant, and
|
||
various related bugs (IR1-1, IR1-2, IR1-3, IR1-3a) have gone away.
|
||
Since the code is newer, there might still be some new bugs
|
||
(though not as many as before Martin Atzmueller's fixes:-). But
|
||
the new code is substantially simpler and clearer, and hopefully
|
||
any remaining bugs will be simpler, less fundamental, and more
|
||
fixable then the bugs in the old code.
|
||
** The revised compiler is still a little unsteady on its feet.
|
||
In particular,
|
||
*** The debugging information it produces (particularly the names
|
||
of FUNCTION objects) is sometimes much less useful than what
|
||
the old compiler produced.
|
||
*** The support for inlining FOO when you (DECLAIM (INLINE FOO))
|
||
then do (DEFUN FOO ..) in a non-null lexical environment (e.g.
|
||
within a MACROLET) has been temporarily weakened.
|
||
** There are new compiler optimizations for various functions:
|
||
*** the sequence functions FIND, POSITION, FIND-IF, POSITION-IF,
|
||
FIND-IF-NOT, POSITION-IF-NOT, and FILL
|
||
*** the math functions TRUNCATE, FLOOR, and CEILING
|
||
*** the function-of-all-trades COERCE
|
||
Mostly these should be transparent, but there's one
|
||
potentially-annoying problem (bug 117): when the compiler
|
||
inline-expands a function and does type analysis on the result,
|
||
it can create control paths which have type mismatches, and
|
||
when it can't prove that those control paths aren't taken,
|
||
it will issue WARNINGs about the type mismatches. This is
|
||
a particular problem in practice for the new sequence functions.
|
||
It's not clear how this should be fixed, and for now, a
|
||
workaround is given in the entry for 117 in the BUGS file.
|
||
** (Because of the interaction between the two previous items --
|
||
occasional inlining problems and new inline expansions -- some
|
||
of the new sequence function optimizations won't really kick in
|
||
completely until debugging information, and then inlining, are
|
||
straightened out in some future version.)
|
||
* minor incompatible changes:
|
||
** As part of a bug fix by Christophe Rhodes to DIRECTORY behavior,
|
||
DIRECTORY no longer implicitly promotes NIL slots of its
|
||
pathname argument to :WILD. In particular, when you ask for the
|
||
contents of a directory (which you used to be able to do without
|
||
explicit wildcards, e.g. (DIRECTORY "/tmp/")) you now need to use
|
||
explicit wildcards, e.g. (DIRECTORY "/tmp/*.*").
|
||
** changes in behavior that ANSI explicitly defines to be
|
||
implementation dependent:
|
||
*** The new compiler-only implementation still conforms with ANSI,
|
||
but acts a little different than before. Besides the obvious
|
||
changes in performance tradeoffs (that the cost per form passed
|
||
to EVAL has gone up, and the cost per form executed by EVAL
|
||
has gone down), the behavior of the system changes a little
|
||
because there are no longer any interpreted function objects.
|
||
COMPILED-FUNCTION-P is now synonymous with FUNCTIONP, and
|
||
e.g. doing COMPILE on the output of interactive DEFUN is
|
||
now a no-op.
|
||
*** The value of INTERNAL-TIME-UNITS-PER-SECOND has been increased
|
||
from 100 to 1000.
|
||
*** The default for the USE list in MAKE-PACKAGE and DEFPACKAGE
|
||
has changed from (:CL) to NIL.
|
||
*** The CHAR-NAME of unprintable ASCII characters which, unlike
|
||
e.g. #\Newline and #\Tab, don't have names specified in the
|
||
ANSI Common Lisp standard, is now based on their ASCII symbolic
|
||
names (#\Nul, #\Soh, #\Stx, etc.) The old CMU-CL-style names
|
||
(#\Null, #\^a, #\^b, etc.) are still accepted by NAME-CHAR, but
|
||
are no longer used for output.
|
||
** changes in internal implementation constants:
|
||
*** The default value of *BYTES-CONSED-BETWEEN-GCS* has doubled, to
|
||
4 million. (If your application spends a lot of time GCing and
|
||
you have a lot of RAM, you might want to experiment with
|
||
increasing it even more.)
|
||
** The SB-C-CALL package has been merged into the SB-ALIEN package.
|
||
However, almost all old code should still continue to work without
|
||
immediate update, as SB-C-CALL is now a (deprecated) nickname
|
||
for SB-ALIEN.
|
||
** Old operator names in the style DEF-FOO are now deprecated in
|
||
favor of new corresponding names DEFINE-FOO, for consistency with
|
||
the naming convention used in the ANSI standard (DEFSTRUCT, DEFVAR,
|
||
DEFINE-CONDITION, DEFINE-MODIFY-MACRO..). This mostly affects
|
||
internal symbols, but a few supported extensions like
|
||
SB-ALIEN:DEF-ALIEN-FUNCTION are also affected. (So e.g.
|
||
DEF-ALIEN-FUNCTION becomes DEFINE-ALIEN-FUNCTION.)
|
||
** The debugger prompt sequence now goes "5]", "5[2]", "5[3]",
|
||
etc. as you get deeper into recursive calls to the debugger
|
||
command loop, instead of the old "5]", "5]]", "5]]]"
|
||
sequence. (I was motivated to do this when squabbles between
|
||
ILISP and SBCL left me very deeply nested in the debugger. In the
|
||
short term, this change will probably provoke more ILISP/SBCL
|
||
squabbles, but hopefully it will be an improvement in the long run.)
|
||
** SB-ALIEN:DEFINE-ALIEN-FUNCTION (also known by the old deprecated
|
||
name DEF-ALIEN-FUNCTION) now does DECLAIM FTYPE for the defined
|
||
function, since declaiming return types involving aliens is
|
||
(1) annoyingly messy to do by hand and (2) vital to efficient
|
||
compilation of code which calls such functions.
|
||
** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are no
|
||
longer reexported by the SB-EXT package. They're solely useful
|
||
for alien code, so it seems more logical that you should get
|
||
them from the SB-ALIEN package, not in SB-EXT.
|
||
** :SB-CONSTRAIN-FLOAT-TYPE, :SB-PROPAGATE-FLOAT-TYPE, and
|
||
:SB-PROPAGATE-FUN-TYPE are no longer considered to be optional
|
||
features. Instead, the code that they used to control is always
|
||
built into the system.
|
||
* many other bug fixes
|
||
** DEFSTRUCT and DEFCLASS have been substantially updated to take
|
||
advantage of the new EVAL-WHEN stuff and to clean them up in
|
||
general, and they are now more ANSI-compliant in a number of
|
||
ways. Martin Atzmueller is responsible for a lot of this.
|
||
** Besides the cleanups discussed above, Martin Atzmueller fixed
|
||
several other bugs:
|
||
*** fixes in READ-SEQUENCE and WRITE-SEQUENCE
|
||
*** correct ERROR type for various file operations
|
||
*** some fixes for Lisp streams
|
||
*** DEFMETHOD syntax checking
|
||
*** changing old weird representation of debug information as
|
||
strings (which, among their other deficiencies, don't transform
|
||
correctly when you rename packages, and don't change their
|
||
print representation when you change things like *PACKAGE*
|
||
and *PRINT-LENGTH*) to symbols and lists of symbols
|
||
He also made several improvements and fixed several bugs in DESCRIBE.
|
||
** Alexey Dejneka fixed many bugs, including classic bugs and bugs he
|
||
discovered himself:
|
||
*** misbehavior of WRITE-STRING/WRITE-LINE
|
||
*** LOOP over keys of a hash table, LOOP bugs 49b and 81 and 103,
|
||
and several other LOOP problems as well
|
||
*** DIRECTORY when similar filenames are present
|
||
*** DEFGENERIC with :METHOD options
|
||
*** bug 126, in (MAKE-STRING N :INITIAL-ELEMENT #\SPACE))
|
||
*** bug in the optimization of ARRAY-ELEMENT-TYPE
|
||
*** argument ordering in FIND with :TEST option
|
||
*** mishandled package designator argument in APROPOS-LIST
|
||
*** various problems in the backquote readmacro
|
||
*** a bug in APROPOS
|
||
*** probably some others that I'm not describing very well here,
|
||
since the CVS log documents them by reference to sbcl-devel
|
||
messages, and the SourceForge archives aren't working well.:-(
|
||
** Dan Barlow improved the Alpha port (and is making progress on the
|
||
PPC port, for those of you who think different).
|
||
** Besides the DIRECTORY fixes and changes mentioned elsewhere,
|
||
Christophe Rhodes cleaned up the system self-test scripts (in tests/*),
|
||
contributed the optimization of FIND-IF-NOT and POSITION-IF-NOT, and
|
||
continues to work on the SPARC port (for those of you in a position
|
||
to look down upon our little PC-compatible boxes from a great height).
|
||
** PPRINT-LOGICAL-BLOCK now copies the *PRINT-LINES* value on entry
|
||
and uses that copy, rather than the current dynamic value, when
|
||
it's trying to decide whether to truncate output. Thus e.g.
|
||
(let ((*print-lines* 50))
|
||
(pprint-logical-block (stream nil)
|
||
(dotimes (i 10)
|
||
(let ((*print-lines* 8))
|
||
(print (aref possiblybigthings i) stream)))))
|
||
should now truncate the logical block only at 50 lines, instead of
|
||
often truncating it at 8 lines, as it did before.
|
||
* The doc/cmucl/ directory, containing old CMU CL documentation
|
||
from the time of the fork, is no longer part of the base system.
|
||
SourceForge has shut down its anonymous FTP service, and with it
|
||
my original plan for distributing the old CMU CL documentation
|
||
there. For now, if you need these files you can download an old
|
||
SBCL source release and extract them from it.
|
||
* The fasl file version number changed again, for dozens of reasons,
|
||
some of which are apparent above.
|
||
|
||
changes in sbcl-0.7.1 relative to sbcl-0.7.0:
|
||
* mostly bug fixes:
|
||
** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are set
|
||
up properly again. (There was a packaging bug in 0.7.0 which
|
||
left their definitions in SB-SYS::LOAD-FOREIGN and
|
||
SB-SYS::LOAD-1-FOREIGN. LOAD-FOREIGN and LOAD-1-FOREIGN are
|
||
vital for most things which interface to C-level interfaces,
|
||
like extensions working with sockets or databases or
|
||
Perl-compatible regexes or whatever, and the need to fix
|
||
this bug is the main reason that 0.7.1 was released so
|
||
soon after 0.7.0.)
|
||
** DEFGENERIC is now choosier about the methods it redefines, so that
|
||
reLOADing a previously-LOADed file containing DEFGENERICs does
|
||
the right thing now. Thus, the Lispy edit/reLOAD-a-little/test
|
||
cycle now works as it should. (thanks to Alexey Dejneka)
|
||
** Bug 106 (types (COMPLEX FOO) where FOO is an obscure type) was
|
||
fixed by Christophe Rhodes. (He actually submitted this patch
|
||
months ago, and I delayed until after 0.7.0.)
|
||
** Bug 111 (internal compiler confusion about runtime checks on
|
||
FUNCTION types) was fixed by Alexey Dejneka.
|
||
* Some internal cleanups (getting rid of variables which aren't
|
||
needed now that the byte interpreter is gone) caused the fasl
|
||
file format number to change again.
|
||
|
||
changes in sbcl-0.7.2 relative to sbcl-0.7.1:
|
||
* incompatible change: The compiler is now less aggressive about
|
||
tail call optimization, doing it only when (> SPACE DEBUG) or
|
||
(> SPEED DEBUG). (This is an incompatible change because there are
|
||
programs which relied on the old CMU-CL-style behavior to optimize
|
||
away their unbounded recursion which will now die of stack overflow.)
|
||
* minor incompatible change: The default BYTES-CONSED-BETWEEN-GCS
|
||
for non-GENCGC systems has been increased to 20M (since that
|
||
seems much closer to the likely performance optimum for modern
|
||
systems than the old 4M value was)
|
||
* minor incompatible change: new larger values for *DEBUG-PRINT-LENGTH*
|
||
and *DEBUG-PRINT-LEVEL*
|
||
* SBCL runs on SPARC systems now. (thanks to Christophe Rhodes' port
|
||
of CMU CL's support for SPARC, and various endianness and other
|
||
SBCL portability fixes due to Christophe Rhodes and Dan Barlow)
|
||
* new syntactic sugar for the Unix command line: --load foo.bar is now
|
||
an alternate notation for --eval '(load "foo.bar")'.
|
||
* bug fixes:
|
||
** The system now detects stack overflow and handles it gracefully,
|
||
at least for (OR (> SAFETY (MAX SPEED SPACE)) (= SAFETY 3))
|
||
optimization settings. (This is a good thing in general, and
|
||
its introduction in this version should be particularly timely
|
||
for anyone whose code fails because of suppression of tail
|
||
recursion!)
|
||
** The system now hunts for the C variable "environ" in a more
|
||
devious way, to avoid segfaults when the C library version differs
|
||
between compile time and run time. (thanks to Christophe Rhodes)
|
||
** INTEGER-valued CATCH tags now work. (thanks to Alexey Dejneka,
|
||
and also to Christophe Rhodes for porting the fix to non-X86 CPUs)
|
||
** The compiler no longer issues bogus style warnings for undefined
|
||
classes in the same source file as the DEFCLASSes which defined
|
||
them. (thanks to Stig E Sandoe for reporting and Martin Atzmueller
|
||
for fixing this)
|
||
** 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
|
||
specification.)
|
||
|
||
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 0.7.1.45, 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
|
||
Toy)
|
||
* 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
|
||
<http://designix.com.au/brian/SBCL/sbcl-0.7.0-unicode.p0.gz>.
|
||
* 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)
|
||
* GET-MACRO-CHARACTER and SET-MACRO-CHARACTER now represent
|
||
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
|
||
SB-EXT:DISABLE-DEBUGGER and SB-EXT:ENABLE-DEBUGGER functions have
|
||
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
|
||
found).
|
||
* fixed bug 174: FORMAT's error message is slightly clearer when a
|
||
non-printing character is used in a format directive.
|
||
* fixed several bugs in compiler checking of type declarations, i.e.
|
||
violations of the Python "declarations are assertions" principle
|
||
(thanks to Alexey Dejneka)
|
||
* fixed several bugs in PCL's error checking (thanks to Gerd
|
||
Moellmann)
|
||
* fixed bug: printing of FILE-ERROR (thanks to Antonio
|
||
Martinez-Shotton)
|
||
* fixed bug in compilation of functions as first class values
|
||
(thanks to Antonio Martinez-Shotton)
|
||
* The compiler's handling TYPE-ERRORs which it can prove will
|
||
inevitably happen at runtime has been cleaned up and corrected
|
||
in several ways. (thanks to Alexey Dejneka)
|
||
* improved argument type checking for various basic arithmetic
|
||
operations (MAX, +, LOGXOR, etc.) which have had so much TLC
|
||
lavished on them in the past that they can be compiled in many
|
||
ways in different special cases
|
||
* fixed bug 181: compiler checks validity of user supplied type
|
||
specifiers
|
||
* cleaned up code flushing in optimization: Function calls which
|
||
should signal errors for safety purposes (e.g. which ANSI says
|
||
should signal errors when their arguments are of incorrect type)
|
||
are no longer optimized away.
|
||
* added new extension: SB-DEBUG:BACKTRACE-AS-LIST
|
||
* incremented fasl file version number, because changes in the
|
||
implementation of sequence functions like COERCE caused
|
||
internal utility functions like COERCE-TO-SIMPLE-VECTOR (used
|
||
in old inline expansions) to become undefined. (Actually these
|
||
changes were later undone, so we might very well be binary
|
||
compatible with 0.7.7 after all, but leaving the version number
|
||
incremented seemed like the simplest and most conservative
|
||
thing to do.)
|
||
|
||
changes in sbcl-0.7.9 relative to sbcl-0.7.8:
|
||
* minor incompatible change: The runtime (the Unix executable named
|
||
"sbcl") is now much pickier about the .core files it will load.
|
||
Essentially it now requires .core files to descend from the same
|
||
build (not just the same sources or LISP-IMPLEMENTATION-VERSION)
|
||
as the runtime does. (The intent is to prevent the crashes which
|
||
can occur, and which can even be reported as mysterious failures,
|
||
when people patch the sources or change the build parameters
|
||
without changing LISP-IMPLEMENTATION-VERSION, then mix and match
|
||
sbcl and .core files.)
|
||
* fixed bug: VALUES-LIST is no longer optimized away.
|
||
* fixed bug 142: The FFI conversion of C string values to Lisp
|
||
string values no longer conses excessively. (thanks to Nathan
|
||
Froyd porting Raymond Toy's fix to CMU CL)
|
||
* began to systematize and improve MOP conformance in PCL (thanks to
|
||
Nathan Froyd, Gerd Moellman and Pierre Mai):
|
||
** SLOT-DEFINITION-ALLOCATION now returns :CLASS, not the class
|
||
itself;
|
||
** GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER is now implemented;
|
||
** FINALIZE-INHERITANCE is now called on class finalization;
|
||
** DOCUMENTATION and (SETF DOCUMENTATION) now have the correct
|
||
argument precedence order.
|
||
* fixed bug 202: The compiler no longer fails on functions whose
|
||
derived types contradict their declared type.
|
||
* DEFMACRO is implemented via EVAL-WHEN instead of IR1 translation,
|
||
so it can be non-toplevel.
|
||
* The fasl file version number has changed (because of the new
|
||
implementation of DEFMACRO).
|
||
* (mostly) fixed bugs 46b and 46c: sequence functions now check, in
|
||
safe code, that any length requirement by their type-specifier
|
||
argument is valid. The exceptions to this are described in bug
|
||
213.
|
||
* fixed bugs 46h and 46i: TWO-WAY- and CONCATENATED-STREAM creation
|
||
functions now check the types of their inputs as required by ANSI.
|
||
* fixed bug 48c: SYMBOL-MACROLET signals PROGRAM-ERROR when an
|
||
introduced symbol is DECLAREd to be SPECIAL.
|
||
* fixed reading of (COMPLEX DOUBLE-FLOAT) literals from fasl files
|
||
* fixed bug: :COUNT argument to sequence functions may be negative
|
||
* fixed bug: body of DO-SYMBOLS may contain declarations
|
||
* fixed bug: PUSHNEW now evaluates its arguments from left to right
|
||
(reported by Paul F. Dietz, fixed by Gerd Moellman)
|
||
* fixed bug: PUSH, PUSHNEW and POP now evaluate a place given by a
|
||
symbol macro only once
|
||
* fixed printing of call frame when argument list is unavailable
|
||
* fixed bug: :ALLOW-OTHER-KEYS is an allowed keyword name
|
||
* compiler no longer signals WARNING on unknown keyword
|
||
:ALLOW-OTHER-KEYS
|
||
|
||
changes in sbcl-0.7.10 relative to sbcl-0.7.9:
|
||
* Support for building SBCL for MIPS platforms running in
|
||
little-endian mode has now been checked in, and basic
|
||
functionality on said platforms verified.
|
||
* minor incompatible change: PCL now records the pathname of a file
|
||
in which methods and the like are defined, rather than its
|
||
truename.
|
||
* minor incompatible change: TRUENAME now considers the truename of
|
||
a file naming a directory to be the pathname with :DIRECTORY
|
||
component indicating that directory.
|
||
* minor incompatible change: a NAMED clause in the extended form of
|
||
LOOP no longer causes a BLOCK named NIL to surround the LOOP. The
|
||
reason for the previous behaviour is unclear.
|
||
* more systematization and improvement of CLOS and MOP conformance
|
||
in PCL (thanks to Gerd Moellman and Pierre Mai):
|
||
** the standard ANSI CL generic function NO-NEXT-METHOD is now
|
||
implemented;
|
||
** DEFINE-METHOD-COMBINATION no longer signals an error for
|
||
primary methods with no specializers;
|
||
** the MOP generic function GENERIC-FUNCTION-DECLARATIONS is now
|
||
implemented;
|
||
** the Readers for Class Metaobjects methods CLASS-DIRECT-SLOTS
|
||
and CLASS-DIRECT-DEFAULT-INITARGS have been implemented for
|
||
FORWARD-REFERENCED-CLASSes; error reporting on
|
||
CLASS-DEFAULT-INITARGS, CLASS-PRECEDENCE-LIST and CLASS-SLOTS
|
||
has been improved;
|
||
** SXHASH on CLOS instances now uses a slot internal to the
|
||
instance to return different numbers on distinct instances,
|
||
while preserving the same return value through invocations of
|
||
CHANGE-CLASS;
|
||
** DEFMETHOD signals errors when methods with longer incongruent
|
||
lambda lists are added to generic functions;
|
||
** COMPUTE-CLASS-PRECEDENCE-LIST now has a method specialized on
|
||
CLASS, as specified in AMOP;
|
||
** COMPUTE-SLOTS :AROUND now assigns locations sequentially based
|
||
on the order returned by the primary method for classes of
|
||
class STANDARD-CLASS;
|
||
** DEFINE-METHOD-COMBINATION now works with the :ARGUMENTS option.
|
||
* fixed some bugs shown by Paul Dietz' test suite:
|
||
** DOLIST puts its body in TAGBODY;
|
||
** SET-EXCLUSIVE-OR sends arguments to :TEST function in the
|
||
correct order;
|
||
** MULTIPLE-VALUE-SETQ evaluates side-effectful places before
|
||
value producing form;
|
||
** if more variables are given to PROGV than values, extra
|
||
variables are bound and made to have no value;
|
||
** NSUBSTITUTE on list arguments gets the right answer with
|
||
:FROM-END;
|
||
** ELT signals an error of type TYPE-ERROR when the index argument
|
||
is not a valid sequence index;
|
||
** LOOP signals (at macroexpansion time) an error of type
|
||
PROGRAM-ERROR when duplicate variable names are found;
|
||
** LOOP supports DOWNTO and ABOVE properly; (thanks to Matthew Danish)
|
||
** FUNCALL of special-operators now cause an error of type
|
||
UNDEFINED-FUNCTION;
|
||
** PSETQ now works as required in the presence of side-effecting
|
||
symbol-macro places;
|
||
** NCONC accepts any object as its last argument;
|
||
** :COUNT argument to sequence functions may be BIGNUM; (thanks to
|
||
Gerd Moellman)
|
||
** loop-for-as-package does not require a package to be explicitely
|
||
specified;
|
||
** LOOP WITH now treats NIL in the d-var-spec correctly as an
|
||
ignored binding.
|
||
* fixed bug 166: compiler preserves "there is a way to go"
|
||
invariant when deleting code.
|
||
* fixed bug 172: macro lambda lists with required arguments after
|
||
&REST arguments now cause an error to be signalled. (thanks to
|
||
Matthew Danish)
|
||
* fixed Entomotomy PEEK-CHAR-WRONGLY-ECHOS-TO-ECHO-STREAM
|
||
bug. (thanks to Matthew Danish)
|
||
* fixed bug 225: STRING-STREAM is now a class. (reported by Gilbert
|
||
Baumann)
|
||
* fixed bug 136: CALL-NEXT-METHOD no longer gets confused when
|
||
arguments are lexically rebound. (thanks to Gerd Moellmann and
|
||
Pierre Mai)
|
||
* fixed bug 194: error messages are now more informative when there
|
||
is no primary method applicable in a call to a generic
|
||
function. (thanks to Gerd Moellmann)
|
||
* fixed bug in command line argument checking (thanks to Julian
|
||
Fondren)
|
||
* fixed bug in COUNT-IF, making it handle :FROM-END correctly
|
||
(thanks to Matthew Danish)
|
||
* incremented fasl file version number, because of the
|
||
SXHASH-related changes in the layout of CLOS data structures
|
||
|
||
changes in sbcl-0.7.11 relative to sbcl-0.7.10:
|
||
* fixed bug 127: DEFSTRUCT now does not clobber old structure
|
||
accessors that are related by inheritance, as specified in the
|
||
:CONC-NAME section of the specification of DEFSTRUCT. (thanks to
|
||
Valtteri Vuorikoski)
|
||
* The compiler is now able to inline functions that were defined in
|
||
a complex lexical environment (e.g. inside a MACROLET).
|
||
* fixed bug in DESCRIBE, which now works on rank-0 arrays. (thanks
|
||
to Lutz Euler)
|
||
* Support for the upcoming FreeBSD-5.0 release has been included.
|
||
(thanks to Dag-Erling Smorgrav)
|
||
* fixed bug 219: DEFINE-COMPILER-MACRO no longer has compile-time
|
||
effect when it is not in a toplevel context.
|
||
* fixed bug 222: DEFMETHOD and SYMBOL-MACROLET interactions now
|
||
stand a better chance of being correct. (thanks to Gerd
|
||
Moellmann)
|
||
* fixed bug in COERCE, which now signals an error on coercing a
|
||
rational to a bounded real type which excludes the expected
|
||
answer.
|
||
* The compiler is now able to derive types more accurately from the
|
||
COERCE and COMPILE functions.
|
||
* fixed bug 223: functional binding is considered to be constant
|
||
only for symbols in the CL package.
|
||
* fixed bug 231: SETQ did not check the type of a variable being set
|
||
(reported by Robert E. Brown)
|
||
* A new optimization for MAKE-INSTANCE has been included, fixing
|
||
various bugs (including relating to :ALLOCATION :CLASS slots and
|
||
:DEFAULT-INITARGS over-eager evalueation). (thanks to Gerd
|
||
Moellmann)
|
||
* fixed some LOOP bugs revealed by Paul Dietz' test suite:
|
||
** As required by ANSI, LOOP now disallows anonymous collection
|
||
clauses such as COLLECT I in conjunction with aggregate boolean
|
||
clauses such as THEREIS (= I 1);
|
||
** LOOP now signals an error when any variable is reused in the
|
||
same loop (including the potentially useful construct analogous
|
||
to WITH A = 1 WITH A = (1+ A);
|
||
** IT is only a special loop symbol within the first clause of a
|
||
conditional loop clause;
|
||
** LOOP with a typed iteration variable over a hashtable now
|
||
signals a type error iff it should.
|
||
* fixed some other bugs revealed by Paul Dietz' test suite:
|
||
** FILE-STREAM now names the class previously known as FD-STREAM;
|
||
** in DEFSTRUCT, a bare :CONC-NAME (or a :CONC-NAME with no
|
||
argument) no longer signals an error;
|
||
** likewise in DEFSTRUCT, :CONC-NAME NIL now respects the package
|
||
of the slot symbol, rather than using the current package
|
||
((:CONC-NAME "") continues to intern the slot's name in the
|
||
current package);
|
||
* incremented fasl file version number, because of the incompatible
|
||
change to the DEFSTRUCT-DESCRIPTION structure, and again because
|
||
of the new implementation of DEFINE-COMPILER-MACRO.
|
||
|
||
changes in sbcl-0.7.12 relative to sbcl-0.7.11:
|
||
* minor incompatible change: code processed by the "interpreter" or
|
||
EVAL now has a compilation optimization policy of (DEBUG 2)
|
||
(changed from (DEBUG 1)) to improve debuggability of interactive
|
||
development, and to allow the use of the debug RETURN command in
|
||
such code.
|
||
* an experimental implementation of the RETURN command for the
|
||
debugger has been included. (thanks to Frederik Kuivinen)
|
||
* fixed bug 62: constraints were not propagated into a loop.
|
||
* fixed bug in embedded calls of SORT (reported and investigated by
|
||
Wolfgang Jenkner).
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** printing and reading of arrays with some dimensions having
|
||
length 0 (thanks to Gerd Moellmann);
|
||
** BOA constructor with &AUX argument without a default value does
|
||
not cause a type error;
|
||
** CONSTANTP now returns true for all self-evaluating objects.
|
||
|
||
changes in sbcl-0.7.13 relative to sbcl-0.7.12:
|
||
* incompatible packaging change: in line with Unix convention,
|
||
SBCL now looks for its core file in /usr/{local/,}lib/sbcl/sbcl.core
|
||
if it's not in $SBCL_HOME. It also sets SBCL_HOME to match.
|
||
* REQUIRE and PROVIDE are now optionally capable of doing something
|
||
useful. See the documentation string for REQUIRE.
|
||
* infrastructure for a managed SBCL contrib system: contributed
|
||
modules in this release include:
|
||
** the ASDF system definition facility;
|
||
** an interface to the BSD Sockets API;
|
||
** an ACL-like convenience interface to the repl;
|
||
(thanks to Kevin Rosenberg)
|
||
** an implementation of ROTATE-BYTE, with efficient implementation
|
||
on x86 hardware;
|
||
* fixed a bug in LOG, so that LOG of a rational argument near 1 now
|
||
gives a closer approximation to the right answer than previously.
|
||
(thanks to Raymond Toy)
|
||
* fixed bug 157: TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE and
|
||
UPGRADED-COMPLEX-PART-TYPE now take (ignored, in all situations)
|
||
optional environment arguments, as required by ANSI.
|
||
* fixed bugs in other functions taking environment objects, allowing
|
||
calls with an explicit NIL environment argument to be compiled
|
||
without error.
|
||
* fixed bug 228: primary return values from
|
||
FUNCTION-LAMBDA-EXPRESSION are either NIL or suitable for input to
|
||
COMPILE or FUNCTION.
|
||
* fixed a bug in DEFSTRUCT: predicates for :NAMED structures with
|
||
:TYPE will no longer signal errors on innocuous objects.
|
||
* fixed bug 231b: SETQ is better at respecting type declarations in
|
||
the lexical environment.
|
||
* fixed a bug in DEFCLASS: classes named by symbols with no or
|
||
unprintable packages can now be defined.
|
||
* fixed a bug in RESTART-BIND: The :TEST-FUNCTION option had been
|
||
carelessly renamed to :TEST-FUN. (thanks to Robert E. Brown)
|
||
* fixed compiler failure related to checking types of functions.
|
||
(reported by Robert E. Brown)
|
||
* the compiler is now much more consistent in its error-checking
|
||
treatment of bounding index arguments to sequence functions: in
|
||
(SAFETY 3) code, errors will be signalled in almost all cases if
|
||
invalid sequence bounding indices are passed to functions defined
|
||
by ANSI to operate on sequences.
|
||
* fixed a bug in the build procedure: documentation of SBCL-specific
|
||
packages is now preserved and available in the final Lisp image.
|
||
* lifted FDEFINITION lookup out of loops in the implementation of
|
||
many list operations. (thanks to Robert E. Brown)
|
||
* fixed a bug in the reader: the #n# reader macro now works for
|
||
objects of type STANDARD-OBJECT. (reported by Tony Martinez)
|
||
* the compiler is now aware that SYMBOL-FUNCTION returns a FUNCTION
|
||
and that READ-DELIMITED-LIST returns a LIST. (thanks to Robert
|
||
E. Brown and Tony Martinez respectively)
|
||
* PCL is now smarter about SLOT-VALUE, (SETF SLOT-VALUE) and
|
||
SLOT-BOUNDP: in particular, it is now able to optimize them much
|
||
better, and is now not vulnerable to having packages renamed.
|
||
Furthermore, a compliance bug has been fixed: SLOT-MISSING is now
|
||
always called when a slot is not present in an instance. (thanks
|
||
to Gerd Moellmann)
|
||
* fixed a bug related to CONCATENATED-STREAMs: PEEK-CHAR will no
|
||
longer signal an error on unreading a character following EOF on
|
||
the previous constituent stream. (thanks to Tony Martinez)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** ARRAY-IN-BOUNDS-P now allows arbitrary integers as arguments,
|
||
not just nonnegative fixnums;
|
||
** the logical bit-array operators such as BIT-AND now accept an
|
||
explicit NIL for their "opt-arg" argument (to indicate a
|
||
freshly-consed result bit-array);
|
||
** ELT now signals an error on an invalid sequence index in safe
|
||
code;
|
||
** the type system is now cleverer about negations of numeric
|
||
types, and consequently understands the BIGNUM and RATIO types
|
||
better;
|
||
** the type system is now cleverer about the interaction between
|
||
INTEGER and RATIO types: while bugs still remain, many more
|
||
cases are accurately computed;
|
||
** in TYPECASE, OTHERWISE now only introduces an otherwise-clause
|
||
if it is in the last clause;
|
||
** CONSTANTLY now correctly returns a side-effect-free function in
|
||
all cases;
|
||
** DECLARE is no longer treated as a special-operator; in
|
||
particular, SPECIAL-OPERATOR-P no longer returns T for DECLARE;
|
||
* incremented fasl file version number due to the change in the
|
||
DEFSTRUCT-SLOT-DESCRIPTION structure.
|
||
|
||
changes in sbcl-0.7.14 relative to sbcl-0.7.13:
|
||
* a better implementation of SXHASH on (simple) bit vectors,
|
||
measured both in execution speed and in distribution of results
|
||
over the positive fixnums, has been installed. Likewise, a better
|
||
implementation of EQUAL for simple bit vectors is now available.
|
||
* fixed CEILING optimization for a divisor of form 2^k.
|
||
* fixed bug 240 (emitting extra style warnings "using the lexical
|
||
binding of the symbol *XXX*" for &OPTIONAL arguments). (reported
|
||
by Antonio Martinez)
|
||
* fixed SXHASH, giving different results for NIL depending on type
|
||
declarations (SYMBOL or LIST). (thanks to Gerd Moellmann)
|
||
* fixed bug in DEFPARAMETER and DEFVAR: they could assign a lexical
|
||
variable. (found by Rolf Wester)
|
||
* SBCL does not ignore type declarations for special
|
||
variables. (reported by rif on c.l.l 2003-03-05)
|
||
* some bug fixes in contrib/sb-aclrepl/
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** a bug in the CONS type specifier, whereby the CAR and CDR
|
||
types got intertwined, has been fixed;
|
||
** the type system is now able to reason about the interaction
|
||
between INTEGER and RATIO types more completely;
|
||
** APPEND, [N]REVERSE and NRECONC check that those their
|
||
arguments, which must be proper lists, are really so;
|
||
** An array specialized to be unable to hold elements has been
|
||
implemented, as required -- yes, really -- by ANSI;
|
||
** GETF and GET-PROPERTIES throw a TYPE-ERROR, not a SIMPLE-ERROR,
|
||
on malformed property lists;
|
||
|
||
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.8.0 relative to sbcl-0.8alpha.0
|
||
* SBCL now builds using CLISP (version of late April 2003 from CVS) as
|
||
cross-compilation host. As a consequence, we can now bootstrap our
|
||
way up to SBCL starting with a bare gcc toolchain and human-readable
|
||
source code (first the source to CLISP, then the source to SBCL).
|
||
* A contributed module containing a partial implementation of the
|
||
simple-streams interface has been included. (thanks to Rudi
|
||
Schlatte)
|
||
* A contributed module implementing the RFC1321 Message Digest
|
||
Algorithm, known as MD5, has been included.
|
||
* minor incompatible change: The :NEGATIVE-ZERO-IS-NOT-ZERO feature
|
||
no longer has any effect, as the code controlled by this feature
|
||
has been deleted. (As far as we know, no-one has ever built using
|
||
this feature, and its semantics were confused in any case).
|
||
* minor incompatible change: As a consequence of making SLOT-EXISTS-P
|
||
work on conditions (as required by the ANSI specification),
|
||
SLOT-VALUE, (SETF SLOT-VALUE) and SLOT-BOUNDP likewise have the
|
||
expected behaviour on conditions. Users should note, however,
|
||
that such behaviour is not required by the ANSI specification,
|
||
and so use of this behaviour may render their code unportable.
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** the GENERIC-FUNCTION type is no longer disjoint from FUNCTION
|
||
types.
|
||
** &ENVIRONMENT parameter in macro lambda list is bound first.
|
||
** SXHASH on condition objects no longer returns NIL.
|
||
** :ALLOCATION :CLASS slots are better treated; their values are
|
||
updated on class redefinition, and initforms inherited from
|
||
superclasses are applied.
|
||
** REMOVE-METHOD returns its generic function argument even when
|
||
no method was removed.
|
||
** SHARED-INITIALIZE now initializes the values of the requested
|
||
slots, including those with :ALLOCATION :CLASS.
|
||
** ALLOCATE-INSTANCE now works on structure classes defined via
|
||
DEFSTRUCT (and not just by those from DEFCLASS :METACLASS
|
||
STRUCTURE-CLASS).
|
||
** SLOT-EXISTS-P now works on conditions, as well as structures
|
||
and CLOS instances.
|
||
** MAKE-LOAD-FORM now has the required methods on
|
||
STRUCTURE-OBJECT, CONDITION and STANDARD-OBJECT.
|
||
** MAKE-LOAD-FORM-SAVING-SLOTS no longer returns a special
|
||
keyword, and now implements the SLOT-NAMES argument.
|
||
** methods with &OPTIONAL arguments no longer allow too many
|
||
arguments to be passed in the call without error.
|
||
** DEFGENERIC now checks that the :ARGUMENT-PRECEDENCE-ORDER
|
||
option is consistent with the required arguments of the generic
|
||
function lambda list.
|
||
* bug fix: REQUIRE accepts a string designator. (Thanks to
|
||
Antonio Martinez.)
|
||
* bug fix: SB-MOP:DIRECT-SLOT-DEFINITION-CLASS and
|
||
SB-MOP:EFFECTIVE-SLOT-DEFINITION-CLASS now have the
|
||
specified-by-AMOP lambda list of (CLASS &REST INITARGS).
|
||
* bug fix: The compiler now checks for duplicated variables in macro
|
||
lambda lists.
|
||
* bug fix: SETQ on globals returns the correct value.
|
||
* fixed bug 47.d: (DEFGENERIC IF (X)) now signals a PROGRAM-ERROR,
|
||
not a COMPILER-ERROR (followed by some other strange error on
|
||
choosing the CONTINUE restart).
|
||
* bug fix: make.sh and friends are now more consistent in the way that
|
||
they look for GNU "make".
|
||
|
||
changes in sbcl-0.8.1 relative to sbcl-0.8.0:
|
||
* minor incompatible change: some nonsensical specialized lambda
|
||
lists (used in DEFMETHOD) which were previously ignored now signal
|
||
errors.
|
||
* minor incompatible change: the system is now aware of the types of
|
||
variables in the COMMON-LISP package, and will signal errors for
|
||
most violations of these type constraints (where previously they
|
||
were silently accepted).
|
||
* minor incompatible change: COMPILE-FILE now uses the freedom
|
||
afforded (ANSI 3.2.2.3) to use derived function types for
|
||
functions defined in the same file. This also permits the system
|
||
to warn on static type mismatches and function
|
||
redefinition. (Currently it does not work with high DEBUG level.)
|
||
* minor incompatible change: VALUES declaration is disabled.
|
||
* When issuing notes, the compiler now signals a condition of type
|
||
SB-EXT:COMPILER-NOTE, and provides an associated MUFFLE-WARNING
|
||
restart for use in user handlers. It is expected that the
|
||
COMPILER-NOTE condition will eventually become a condition
|
||
supertype to a hierarchy of note types, which will then be
|
||
handleable in a similar fashion. However, at the moment, no such
|
||
note subtypes yet exist. (SB-INT:SIMPLE-COMPILER-NOTE exists,
|
||
but it's an implementation detail, not a classification for the
|
||
purpose above.)
|
||
* Changes in type checking closed the following bugs:
|
||
** type checking of unused values (192b, 194d, 203);
|
||
** template selection based on unsafe type assertions (192c, 236);
|
||
** type checking in branches (194bc).
|
||
* A short form of VALUES type specifier has ANSI meaning (it has
|
||
increased the number of situations when SBCL cannot perform type
|
||
checking).
|
||
* fixed bug in DEFSTRUCT: once again, naming structure slots with
|
||
keywords or constants is permissible.
|
||
* STREAM-READ-SEQUENCE and STREAM-WRITE-SEQUENCE now have methods
|
||
defined on the relevant FUNDAMENTAL-BINARY-{INPUT,OUTPUT}-STREAM
|
||
classes. (thanks to Antonio Martinez)
|
||
* improved ANSIness in DESCRIBE: The DESCRIBE function no longer
|
||
outputs FRESH-LINE or TERPRI, and no longer converts its stream
|
||
argument to a pretty-print stream. Instead, it leaves any such
|
||
operations to DESCRIBE-OBJECT methods.
|
||
* bug fix: APROPOS now respects the EXTERNAL-ONLY flag. (reported
|
||
by Teemu Kalvas)
|
||
* bug fix: NIL is now a valid destructuring argument in DEFMACRO
|
||
lambda lists. (thanks to David Lichteblau)
|
||
* bug fix: Defining a generic function with a :METHOD-CLASS being a
|
||
subclass of STANDARD-METHOD no longer causes stack exhaustion.
|
||
(thanks to Gerd Moellmann)
|
||
* fixed bug 246: increased compilation speed of long
|
||
MULTIPLE-VALUE-BIND (and likewise of NTH-VALUE with a constant
|
||
integer argument)
|
||
* a contributed module implementing COMPILER-LET and MACROEXPAND-ALL
|
||
has been included.
|
||
* DEFCONSTANT now throws a condition of type
|
||
SB-EXT:DEFCONSTANT-UNEQL if it is being asked to redefine a
|
||
constant to a non-EQL value; CONTINUE and ABORT restarts
|
||
respectively change and preserve the value.
|
||
* fixed bug 63: The code walker, part of the implementation of CLOS,
|
||
is now better at handling symbol macros.
|
||
* bug fix: There is no longer an internal implementation type named
|
||
CL:LENGTH. (reported by Raymond Toy)
|
||
* bug fix: In macro-like defining macros/special operators the
|
||
implicit block does not enclose the lambda list.
|
||
* fixed bugs 10 and 43: Bare VALUES, AND, OR and MEMBER symbols (not
|
||
enclosed in parentheses) are not suitable as type specifiers, and
|
||
their use properly signals an error now.
|
||
* bug fix: An argument count mismatch for a type specifier in code
|
||
being compiled no longer causes an unhandled error at compile
|
||
time, but signals a compile-time warning.
|
||
* fixed simple vector readable printing
|
||
* bug fix: DESCRIBE takes more care over whether the class
|
||
precedence list slot of a class is bound before accessing it.
|
||
(reported by Markus Krummenacker)
|
||
* bug fix: FORMATTER can successfully compile pretty-printer format
|
||
strings which use variants of the ~* directive inside.
|
||
* bug fix: SEARCH now applies its TEST predicate to the elements of
|
||
the arguments in the correct order. (thanks to Wolfhard Buss)
|
||
* fixed bug 235b: The compiler uses return types of MAPCAR and friends
|
||
in type inference. (thanks to Robert E. Brown)
|
||
* bug fix: Reading in symbols with an explicit package name of ""
|
||
(e.g. '||::FOO) now works correctly. (reported by Henrik Motakef)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** NIL is now allowed as a structure slot name.
|
||
** Arbitrary numbers, not just REALs, are allowed in certain
|
||
circumstances in LOOP for-as-arithmetic clauses.
|
||
** Multiple class redefinitions before slot access no longer
|
||
causes a type error.
|
||
** (SETF FIND-CLASS) now accepts NIL as an argument to remove the
|
||
association between the name and a class.
|
||
** Generic functions with non-standard method-combination and over
|
||
five methods all of which return constants no longer return NIL
|
||
after the first few invocations. (thanks to Gerd Moellmann)
|
||
** CALL-NEXT-METHOD with no arguments now passes the original
|
||
values of the arguments, even in the presence of assignment.
|
||
** Functions [N]SUBST*, LAST, NRECONC, [N]SUBLIS may return any
|
||
object.
|
||
** DISASSEMBLE works with closures and funcallable instances.
|
||
** ADD-METHOD now returns the generic function, not the new method.
|
||
** FIND-METHOD signals an error if the lengths of the specializers
|
||
is incompatible with the generic function, even if the ERRORP
|
||
argument is true.
|
||
** TYPE-OF returns recognizeable subtypes of all built-in-types of
|
||
which its argument is a member.
|
||
** DEFCLASS only redefines the class named by its class-name
|
||
argument if that name is the proper name of the class;
|
||
otherwise, it creates a new class.
|
||
** SLOT-UNBOUND now correctly initalizes the CELL-ERROR-NAME slot
|
||
of the UNBOUND-SLOT condition to the name of the slot.
|
||
** (SETF (AREF bv 0) ...) did not work for bit vectors.
|
||
** SLOT-UNBOUND and SLOT-MISSING now have their return values
|
||
treated by SLOT-BOUNDP, SLOT-VALUE, (SETF SLOT-VALUE) and
|
||
SLOT-MAKUNBOUND in the specified fashion.
|
||
|
||
changes in sbcl-0.8.2 relative to sbcl-0.8.1:
|
||
* fixed bug 148: failure to inline-expand a local function left
|
||
garbage, confusing the compiler.
|
||
* fixed bugs 3cd: structure slot readers perform type check if the
|
||
slot can have an invalid value (i.e. it is either not initialized
|
||
or can be written with a less specific slot writer).
|
||
* bug fix: the compiler now traps array references to elements off
|
||
the end of an array; previously, the bounds checking in some
|
||
circumstances could go off-by-one.
|
||
* improved MACHINE-VERSION, especially on Linux (thanks to Lars
|
||
Brinkhoff)
|
||
* type declarations for array element types now obey the description
|
||
on the CLHS page "Declaration TYPE", as per discussions on
|
||
sbcl-help around 2003-05-08. This means that a declaration
|
||
(TYPE (ARRAY FOO) BAR) means that, within the scope of the
|
||
declaration, all references to BAR will be asserted or assumed
|
||
(with THE, so dependent on compiler policy) to involve objects of
|
||
type FOO. Note that no such declaration is implied in
|
||
(MAKE-ARRAY .. :ELEMENT-TYPE 'FOO).
|
||
* declared types of functions from the "Conditions"
|
||
chapter. (reported by Paul Dietz)
|
||
* bug fix: CERROR accepts a function as its first argument.
|
||
* bug fix: NTH an NTHCDR accept a bignum as index
|
||
arguments. (reported by Adam Warner)
|
||
* optimization: character compare routines now optimize comparing
|
||
against a constant character. (reported by Gilbert Baumann)
|
||
* bug fix: (SETF AREF) on byte-sized-element arrays with constant index
|
||
argument now works properly on the MIPS platform.
|
||
* fixed compiler failure on (TYPEP x '(NOT (MEMBER 0d0))).
|
||
* repeated evaluation of the same DEFSTRUCT, a slot of which is
|
||
declared to have a functional type, does not cause an error
|
||
anymore.
|
||
* fixed bug: sometimes MAKE-INSTANCE did not work with classes with
|
||
many :DEFAULT-INITARGS. (reported by Istvan Marko)
|
||
* fixed bug: if last continuation of a deleted block has a
|
||
destination, this destination should be deleted too. (reported by
|
||
ohler on #lisp)
|
||
* fixed a bug in the bootstrap process: the host compiler's values
|
||
of ARRAY-DIMENSION-LIMIT and ARRAY-TOTAL-SIZE-LIMIT no longer leak
|
||
into the newly-built SBCL. (reported by Eric Marsden on #lisp,
|
||
test case from Patrik Nordebo)
|
||
* improved the ability of the disassembler on the PPC platform to
|
||
provide helpful disassembly notes.
|
||
* SB-MOP:CLASS-PROTOTYPE on built-in-classes returns an instance of
|
||
the class in more cases than previously.
|
||
* bug fix: FILE-POSITION now understands :START and :END for
|
||
STRING-INPUT-STREAMs. (thanks to Nikodemus Siivola)
|
||
* bug fix: (SIGNED-BYTE 8) streams no longer return (UNSIGNED-BYTE
|
||
8) data. (thanks to David Lichteblau)
|
||
* bug fix: it is possible to add a method to a generic function
|
||
without lambda list.
|
||
* bug fix: reader failed to signal END-OF-FILE inside an
|
||
object representation. (reported by Nikodemus Siivola)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** LAST and [N]BUTLAST should accept a bignum.
|
||
** condition slot accessors are methods.
|
||
** (VECTOR NIL) is a subtype of STRING.
|
||
|
||
changes in sbcl-0.8.3 relative to sbcl-0.8.2:
|
||
* SBCL now builds and runs on MacOS X (version 10.2), or perhaps
|
||
more accurately, on the Darwin kernel running on PowerPC hardware.
|
||
(thanks to Brian Mastenbrook, Pierre Mai and Patrik Nordebo)
|
||
* Compiler code deletion notes now signal a condition of type
|
||
SB-EXT:CODE-DELETION-NOTE (a subtype of SB-EXT:COMPILER-NOTE) with
|
||
an associated MUFFLE-WARNING restart.
|
||
* The compiler now performs limited argument count validation of
|
||
constant format strings in FORMAT, and where appropriate in ERROR,
|
||
CERROR and WARN. (thanks to Gerd Moellmann)
|
||
* New ASDF-INSTALL contrib can be used for automatic download and
|
||
installation of third-party Lisp code from CCLAN or other sites
|
||
via CLiki.
|
||
* Threaded builds (:SB-THREAD) now support SB-THREAD:INTERRUPT-THREAD,
|
||
which forces another thread to execute a function supplied by the
|
||
caller.
|
||
* bug 75 fix: WITH-OUTPUT-TO-STRING (and MAKE-STRING-OUTPUT-STREAM)
|
||
now accept and act upon their :ELEMENT-TYPE keyword argument.
|
||
(reported by Martin Atzmueller, Edi Weitz)
|
||
* bug fix: FILE-POSITION now accepts position designators up to
|
||
ARRAY-DIMENSION-LIMIT or the extreme of the off_t range, whichever
|
||
is the greater. (thanks to Patrik Nordebo)
|
||
* bug fix: MAKE-ARRAY ignored :INITIAL-CONTENTS NIL. (reported by
|
||
Kalle Olavi Niemitalo)
|
||
* bug fix: the CLASS-PROTOTYPE of the GENERIC-FUNCTION class is now
|
||
printable. (reported by Eric Marsden)
|
||
* bug fix in sb-posix: mmap() now works on systems with a 64-bit
|
||
off_t, including Darwin and FreeBSD. (thanks to Andreas Fuchs)
|
||
* x86 bug fix in control stack exhaustion checking: now shows backtrace
|
||
* bug fix in WITH-TIMEOUT: now the body can have more than one form.
|
||
(thanks to Stig Sandoe)
|
||
* bug fix in READ-SEQUENCE: READ-SEQUENCE following PEEK-CHAR or
|
||
UNREAD-CHAR now correctly includes the unread character in the
|
||
target sequence. (thanks to Gerd Moellmann)
|
||
* bug fix in threaded builds: the system can now be suspended and
|
||
resumed by shell job control with minimal disruption.
|
||
* bug fixes in times and timezones >2038AD
|
||
* better handling of "where is GNU make?" problem in build scripts
|
||
(thanks to Nikodemus Siivola)
|
||
* new optimization: inside a named function any reference to a
|
||
function with the same name is considered to be a self-reference;
|
||
this behaviour is controlled with SB-C::RECOGNIZE-SELF-CALLS
|
||
optimization quality.
|
||
* new optimization on x86: logical functions and + now have
|
||
optimized (UNSIGNED-BYTE 32) versions, which are automatically
|
||
used when the result is truncated to 32 bits.
|
||
* VALUES declaration is partially enabled.
|
||
* fixes in SB-GROVEL (thanks to Andreas Fuchs)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** The system now obeys the constraint imposed by
|
||
UPGRADED-ARRAY-ELEMENT-TYPE that the upgraded array element
|
||
types form a lattice under type intersection.
|
||
** FFLOOR, FTRUNCATE, FCEILING and FROUND work with integers.
|
||
** ASSOC now ignores NIL elements in an alist.
|
||
** CEILING now gives the right answer with MOST-NEGATIVE-FIXNUM
|
||
and (1+ MOST-POSITIVE-FIXNUM) answers.
|
||
** The addition of a method with invalid qualifiers to a generic
|
||
function does not cause an error to be signalled immediately;
|
||
a warning is signalled, and the error is generated only on
|
||
calling the generic function.
|
||
* changed .fasl file version number, in part to add type codes for
|
||
new array subtypes UNSIGNED-BYTE 7, 15, 29, and 31 mandated by
|
||
obscure ANSI requirements
|
||
|
||
changes in sbcl-0.8.4 relative to sbcl-0.8.3:
|
||
* incompatible change: The --disable-debugger command line
|
||
option now clobbers the debugger at a more fundamental
|
||
level, by redefining #'INVOKE-DEBUGGER instead of by
|
||
rebinding *DEBUGGER-HOOK*. The main difference is that BREAK
|
||
is specified by ANSI to ignore *DEBUGGER-HOOK* and
|
||
INVOKE-DEBUGGER regardless. Under the old system, BREAK would
|
||
enter the debugger REPL and then suffer recursive errors
|
||
because *DEBUG-IO* is also messed up in --disable-debugger mode;
|
||
while under the new system, BREAK in --disable-debugger mode
|
||
terminates the system just as an unhandled error would.
|
||
* fixed compiler performance when processing loops with a step >1;
|
||
* bug fix: DOCUMENTATION now retrieves generic function
|
||
documentation. Also, DOCUMENTATION and (SETF DOCUMENTATION)
|
||
support has been systematized, and now supports the methods
|
||
specified by ANSI, along with a default method and a method for
|
||
slot documentation. (reported by Nathan Froyd)
|
||
* bug fix: effective methods associated with a generic function are
|
||
no longer cached over a change of that generic function's method
|
||
combination. (reported by Andreas Fuchs)
|
||
* bug fix: RUN-PROGRAM now does not fail if some element in $PATH
|
||
names a non-existent directory. (thanks to Andreas Fuchs)
|
||
* bug fix: ROUND and TRUNCATE could, under certain circumstances on
|
||
the PPC platform, lead to stack corruption; this has been fixed.
|
||
(reported by Rainer Joswig)
|
||
* bug fix: ASH on an (UNSIGNED-BYTE 32) with a shift of -32 or lower
|
||
no longer ever returns 1 instead of 0. (thanks to Lars Brinkhoff)
|
||
* fixed bug 285: TRUNCATE on bignum arguments, and indeed bignum
|
||
arithmetic in general, is now much more reliable on the PPC
|
||
platform.
|
||
* bug fix: LOGCOUNT on (UNSIGNED-BYTE 64) objects on the Alpha
|
||
platform now returns the right answer.
|
||
* optimization: restored some effective method precomputation in
|
||
CLOS (turned off by an ANSI fix in sbcl-0.8.3); the amount of
|
||
precomputation is now tunable.
|
||
* optimization: compiler-internal data structure use has been
|
||
reviewed, and changes have been made that should improve the
|
||
performance of the compiler by about 20%.
|
||
* optimization: performance of FILL (and :INITIAL-ELEMENT) on
|
||
simple-base-strings and simple-bit-vectors is improved.
|
||
* optimization: the optimization of 32-bit logical and arithmetic
|
||
functions introduced in version 0.8.3 on the x86 has been
|
||
implemented on the mips, ppc and sparc platforms; an
|
||
implementation of the same facility, but for 64-bit arithmetic,
|
||
has been added for the alpha.
|
||
* microoptimization: the compiler is better able to make use of the
|
||
x86 LEA instruction for multiplication by constants.
|
||
* bug fix: in some situations compiler did not report usage of
|
||
generic arithmetic in (SPEED 3) policy.
|
||
* bug 145b fix: compiler used wrong type specifier while converting
|
||
MEMBER-types to numeric.
|
||
* bug fix: COMPILE-FILE must bind *READTABLE*. (reported by Doug
|
||
McNaught)
|
||
* bug fix: (SETF AREF) on byte-sized-element arrays with constant
|
||
index argument now works properly on the Alpha platform.
|
||
* bug fix: floating point exception treatment on the Alpha platform
|
||
is improved.
|
||
* bug fix: FILE-POSITION works much better on string input and
|
||
output streams. (thanks to Nikodemus Siivola)
|
||
* bug fix: many threading/garbage collection symptoms sorted.
|
||
SB-THREAD:INTERRUPT-THREAD now safe to call on a thread that
|
||
might be pseudo-atomic.
|
||
* internal change: Stopping for GC is now done with signals not
|
||
ptrace. GC is now done in whichever thread wanted it, instead of
|
||
in the parent.
|
||
* bug fix: GC hooks (missing since 0.8) reinstated, so finalizers
|
||
work again.
|
||
* bug fix: result form in DO is not contained in the implicit
|
||
TAGBODY.
|
||
* incompatible change: ICR structure is changed; the value part of
|
||
CONTINUATION is now called LVAR; corresponding functions are
|
||
renamed (e.g. SB-C::CONTINUATION-TYPE has become SB-C::LVAR-TYPE).
|
||
* added type deriver for ISQRT (thanks to Robert E. Brown).
|
||
* bug fix: better support for loading from the command line when an
|
||
initialization file sets (READTABLE-CASE *READTABLE*). (thanks
|
||
to Adam Warner)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** the RETURN clause in LOOP is now equivalent to DO (RETURN ...).
|
||
** ROUND and FROUND now give the right answer when given very
|
||
small float arguments.
|
||
** (FLOAT X) for X of type DOUBLE-FLOAT now returns X in all
|
||
circumstances.
|
||
** optimizer for (EXPT X 0) did not work for X not of type FLOAT.
|
||
** (GCD 0 <negative-integer>) returned <negative-integer>.
|
||
** LCM should return a non-negative integer.
|
||
** PARSE-INTEGER returned the index of a terminator instead of the
|
||
upper bounding index of a substring in case :JUNK-ALLOWED NIL.
|
||
** PARSE-INTEGER returned an incorrect index being applied to a
|
||
displaced string.
|
||
** LCM with two arguments of 0 returns 0 rather than signalling
|
||
DIVISION-BY-ZERO.
|
||
** unsigned addition of a 32-bit constant with the high bit set no
|
||
longer causes an internal compiler error on the x86.
|
||
** LOGBITP accepts a non-negative bignum as its INDEX argument.
|
||
** compiler incorrectly derived types of DPB and DEPOSIT-FIELD
|
||
with negative last argument.
|
||
** byte specifiers with zero size and position no longer cause
|
||
an error during type derivation.
|
||
** bignum multiplication on the Alpha platform now returns the
|
||
right answer.
|
||
* porting: The system now builds on SuSE AMD64, although it still
|
||
generates a 32-bit binary.
|
||
* .fasl file incompatibility: The fasl file version number has
|
||
been incremented (because of the changes to internal compiler
|
||
data structures referred to above).
|
||
|
||
changes in sbcl-0.8.5 relative to sbcl-0.8.4:
|
||
* New code in contrib/sb-introspect (still probably not entirely
|
||
stable yet) provides some support for smart Lisp development
|
||
environments like SLIME.
|
||
* The conditions signalled for errors occurring when loading .fasl
|
||
files have been systematized (inheriting from SB-EXT:INVALID-FASL)
|
||
in a way which should help ASDF recover gracefully.
|
||
* The REQUIRE/PROVIDE behavior of *MODULE-PROVIDER-FUNCTIONS*
|
||
stuff has been cleaned up. If you code contrib/ stuff, this might
|
||
affect you, and you can look at contrib/README, contrib/STANDARDS,
|
||
and/or the 0.8.4.27 diff to check.
|
||
* In full calls the compiler now does not generate checks for declared
|
||
argument types for all arguments.
|
||
* various threading fixes
|
||
** and some experimental patches which didn't make it into
|
||
the main tree for this release, but which are shipped in
|
||
contrib/experimental-thread.patch as a possible fix for some
|
||
failures (deadlock, spinning...) in GC-intensive multithreaded
|
||
applications.
|
||
* fixed PPC build problem (source code incompatibility of different
|
||
library versions): added offsetof() hackery which attempts to divine
|
||
where glibc maintainers put uc_mcontext today
|
||
* fixed bug 282: compiler does not trust type assertions while passing
|
||
arguments to a full call.
|
||
* fixed bug 261: compiler allows NIL or "no value" to be accepted for
|
||
&OPTIONAL VALUES type parameter.
|
||
* fix bug 214: algorithm for noting rejected templates is now more
|
||
similar to that of template seletion. (also reported by rydis on
|
||
#lisp)
|
||
* fixed bug 141b: printing backquoted information readably and prettily
|
||
inserts a space where necessary.
|
||
* bug fix: obviously wrong type specifiers such as (FIXNUM 1) or
|
||
(CHARACTER 10) are now reported as errors, rather than propagated
|
||
as unknown types. (reported by piso on #lisp)
|
||
* bug fix: the :IF-EXISTS argument to OPEN now behaves correctly
|
||
with values NIL and :ERROR. (thanks to Milan Zamazal)
|
||
* fixed bug 191c: CLOS now does proper keyword argument checking as
|
||
described in CLHS 7.6.5 and 7.6.5.1.
|
||
* bug fix: LOOP forms using NIL as a for-as-arithmetic counter no
|
||
longer raise an error; further, using a list as a for-as-arithmetic
|
||
counter now raises a meaningful error.
|
||
* fixed bug 213a: even fairly unreasonable CONS type specifiers are
|
||
now understood by sequence creation functions such as MAKE-SEQUENCE
|
||
and COERCE.
|
||
* fixed bug 46k: READ-BYTE now signals an error when asked to read from
|
||
a STRING-INPUT-STREAM.
|
||
* compiler enhancement: SIGNUM is now better able to derive the type
|
||
of its result.
|
||
* type declarations inside WITH-SLOTS are checked. (reported by
|
||
salex on #lisp)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** incorrect optimization of TRUNCATE for a positive first
|
||
argument and negative second.
|
||
** compiler failure in let-convertion during flushing dead code.
|
||
** compiler failure while deriving type of TRUNCATE on an
|
||
interval, containing 0.
|
||
** ASH of a negative bignum by a negative bignum count now returns
|
||
-1, not 0.
|
||
** intersection of CONS types now canonicalizes properly, fixing
|
||
inconsistencies in SUBTYPEP.
|
||
|
||
changes in sbcl-0.8.6 relative to sbcl-0.8.5:
|
||
* fixed a bootstrapping bug: the build process no longer assumes
|
||
that the various BOOLE-related constants have the same value in
|
||
host and target lisps. (noted by Paul Dietz' test suite on an
|
||
SBCL binary built from CLISP)
|
||
* The system can now be dynamically linked on the MIPS platform,
|
||
which enables dynamic loading of foreign code from Lisp. (thanks
|
||
to Ralf Baechle for discussions on the MIPS ABI)
|
||
* The system now records debugging information for its own source
|
||
files in a filesystem-position-independent manner, relative to
|
||
the "SYS" logical host.
|
||
* fixed a compiler bug: MV-LET convertion did not check references
|
||
to the "max args" entry point. (reported by Brian Downing)
|
||
* tweaked disassembly notes to be less confident about proclaiming
|
||
some instruction as an LRA. (thanks to Brian Downing)
|
||
* contrib update: SB-ACLREPL is now threadsafe; multiple listeners
|
||
now each have their own history, command character, and other
|
||
characteristics. (thanks to David Lichteblau)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** compiler failure in compiling LOGAND expressions including a
|
||
constant 0
|
||
** Implementation of ASH-MOD32 on X86 and PPC did not work for the
|
||
shift greater than 32.
|
||
** FLUSH-DEST did not mark blocks for type check regeneration.
|
||
** HANDLER-CASE failed to accept declarations in handler clauses
|
||
in some circumstances.
|
||
|
||
changes in sbcl-0.8.7 relative to sbcl-0.8.6:
|
||
* When built with the :SB-FUTEX feature, threaded builds now take
|
||
advantage of the "fast userspace mutex" facility in Linux kernel 2.6
|
||
for faster/more reliable mutex and condition variable support.
|
||
* Incompatible change (but one you probably shouldn't have been using
|
||
anyway): the interface and code for arbitrating between multiple
|
||
threads in the same user session has been redesigned.
|
||
* bug fix: GET-SETF-EXPANSION no longer throws an internal type
|
||
error when called without an explicit environment argument.
|
||
(thanks to Nikodemus Siivola)
|
||
* bug fix: buffered :DIRECTION :IO streams are less likely to become
|
||
confused about their position. (thanks to Adam Warner and Gerd
|
||
Moellmann)
|
||
* bug fix: Pretty printing backquoted forms with unquotations in the
|
||
argument list position of various code constructs such as LAMBDA
|
||
now works correctly. (reported by Paul Dietz)
|
||
* bug fix: Pretty printing unquotations no longer loses all
|
||
stream position information.
|
||
* optimization: performance of string output streams is now less
|
||
poor for multiple small sequence writes.
|
||
* optimization: performance of CSUBTYPEP in the presence of complex
|
||
expressions involving CONS and NOT many times has been improved.
|
||
(reported by Paul Dietz)
|
||
* ASDF-INSTALL bug fix: now parses *PROXY* properly. (thanks to
|
||
Sean Ross)
|
||
* SB-SIMPLE-STREAMS enhancement: simple-streams can now be used as
|
||
streams for the REPL, for the debugger, and so on. (thanks to
|
||
David Licteblau)
|
||
* fixed some bugs revealed by Paul Dietz' test suite:
|
||
** the value of the :REHASH-THRESHOLD argument to MAKE-HASH-TABLE
|
||
is ignored if it is too small, rather than propagating through
|
||
to cause DIVIDE-BY-ZERO or FLOATING-POINT-OVERFLOW errors.
|
||
** extremely complex negations of CONS types were not being
|
||
sufficiently canonicalized, leading to inconsistencies in
|
||
SUBTYPEP.
|
||
** VALUES tranformer lost derive type.
|
||
|
||
planned incompatible changes in 0.8.x:
|
||
* (not done yet, but planned:) When the profiling interface settles
|
||
down, it might impact TRACE. They both encapsulate functions, and
|
||
it's not clear yet how e.g. UNPROFILE will interact with TRACE
|
||
and UNTRACE. (This shouldn't matter, though, unless you are using
|
||
profiling. If you never profile anything, TRACE should continue to
|
||
behave as before.)
|
||
* (not done yet, but planned:) Inlining can now be controlled the
|
||
ANSI way, without MAYBE-INLINE, since the idiom
|
||
(DECLAIM (INLINE FOO))
|
||
(DEFUN FOO (..) ..)
|
||
(DECLAIM (NOTINLINE FOO))
|
||
(DEFUN BAR (..) (FOO ..))
|
||
(DEFUN BLETCH (..) (DECLARE (INLINE FOO)) (FOO ..))
|
||
now does what ANSI says it should. The CMU-CL-style
|
||
SB-EXT:MAYBE-INLINE declaration is now deprecated and ignored.
|