From: Nikodemus Siivola Date: Mon, 5 Jul 2004 16:27:47 +0000 (+0000) Subject: 0.8.12.23: Signs of mellowing out in SBCL? Reversed NEWS file X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=4009887b28ee15d5bf26e860c7c45d18a9688c96;p=sbcl.git 0.8.12.23: Signs of mellowing out in SBCL? Reversed NEWS file to lastest-first order, and moved planned changes bit to TODO. --- diff --git a/NEWS b/NEWS index b44b189..730e1d1 100644 --- a/NEWS +++ b/NEWS @@ -1,1194 +1,1331 @@ -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 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.8.13 relative to sbcl-0.8.12: + * new feature: SB-PACKAGE-LOCKS. See the "Package Locks" section of + the manual for details; add :SB-PACKAGE-LOCKS in + customize-target-features.lisp to enable them. + * minor incompatible change: as threatened around sbcl-0.8.0, the + home package of MOP-related symbols is now SB-MOP, not SB-PCL. + The symbols are also exported from SB-PCL for backwards + compatibility, but more so than before SB-PCL should be treated as + an implementation-internal package. + * the SB-SPROF contrib now works on (most) non-x86 architectures. + It is known as of this release not to work on the Alpha, however. + * fixed bug #338: instances of EQL-SPECIFIER are now valid type + designators and can hence be used with TYPEP. + * fixed bug #333: CHECK-TYPE now ensures that the type error + signalled, if any, has the right object to be accessed by + TYPE-ERROR-DATUM. (reported by Tony Martinez) + * fixed bug #340: SETF of VALUES obeys the specification in ANSI + 5.1.2.3 for multiple-value place subforms. (reported by Kalle + Olavi Niemetalo) + * fixed bug #334: programmatic addition of slots using specialized + methods on SB-MOP:COMPUTE-SLOTS works for :ALLOCATION :INSTANCE + and :ALLOCATION :CLASS slots. + * fixed a bug: #\Space (and other whitespace characters) are no + longer considered to be macro characters in standard syntax by + GET-MACRO-CHARACTER. -changes in sbcl-0.6.2 relative to sbcl-0.6.1: +changes in sbcl-0.8.12 relative to sbcl-0.8.11: + * minor incompatible change: the system no longer provides + optimization hints (conditions which are TYPEP + SB-EXT:COMPILER-NOTE) for conforming code in default compilation + mode; these hints are still emitted when higher SPEED optimization + is requested. + * new contrib module: a sampling profiler (profiling by statistical + sampling, rather than by instrumenting functions) is available as + the SB-SPROF contrib. (thanks to Gerd Moellmann and Juho Snellman) + * the behaviour of the standard function ED is now customizeable by + third parties through a hook variable: see ED's documentation + string for information on the protocol. + * the compiler no longer emits efficiency notes for (FUNCALL X) + when the type of X is uncertain under default optimization + settings. + * fixed bug 276: mutating a binding of a specialized parameter to a + method to something that is not TYPEP the specializer is now + possible. + * fixed bugs 45d and 118: DOUBLE-FLOAT[-NEGATIVE]-EPSILON now + exhibit the required behaviour on the x86 platform. (thanks to + Peter van Eynde, Eric Marsden and Bruno Haible) + * fixed bug 335: ATANH now computes the inverse hyperbolic tangent + even for difficult arguments. (reported by Peter Graves) + * fixed bug 141a: the backquote printer now descends quoted + structure. + * fixed another bug in backquote printing: no more destructive + modification of the form's list structure. (reported by Brian + Downing) + * fixed bug in INTERRUPT-THREAD: pin the function, so that it cannot + move between its address being taken and the call to + interrupt_thread, fixing a crashing race condition. + * the SB-POSIX contrib implementation has been adjusted so that it + no longer exhibits ridiculously poor performance when constructing + instances corresponding to C structs. -* (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: +changes in sbcl-0.8.11 relative to sbcl-0.8.10: + * minor incompatible change: the sb-grovel contrib now treats C + structures as alien (in the sense of SB-ALIEN) objects rather than + as undistinguished (simple-array (unsigned-byte 8) (*))s. This + has implications for memory management of client code + (sb-grovel-returned objects must now be manually managed) and for + type safety (alien objects now have full types). + * new feature: the SB-EXT:MUFFLE-CONDITIONS declaration should be + used to control emission of compiler diagnostics, rather than the + SB-EXT:INHIBIT-WARNINGS OPTIMIZE quality. See the manual for + documentation on this feature. The SB-EXT:INHIBIT-WARNINGS + quality should be considered deprecated. + * install.sh now installs the user manual as well + * (not quite a new documentable feature, but worth considering in + the light of the new SB-EXT:MUFFLE-CONDITIONS declaration): the + beginnings of a semantically meaningful condition hierarchy is + under development, for use in SB-EXT:MUFFLE-CONDITIONS and by + IDEs. + * fixed bug: PARSE-NAMESTRING now accepts any valid pathaname + designator as the defaults argument. + * fixed bug: Displaced arrays whose displaced-to array has become + too small now cause ARRAY-DIMENSION to signal an error, providing + for safer bounds-checking. (reported by Bruno Haible) + * fixed bug: DEFCLASS slot definitions with identical :READER and + :WRITER names now signal a reasonable error. (reported by Thomas + Burdick) + * fixed bug: CLOSE :ABORT T on appending stream no longer causes + file deletion. + * fixed bug: Invalid slot specification errors now print correctly. + (thanks to Zach Beane) + * fixed bug 320: Shared to local slot value transfers in class + redefinitions now happen corrently from superclasses as + well. (reported by Bruno Haible) + * fixed bug 316: SHIFTF now accepts VALUES forms. (reported by Bruno + Haible) + * fixed bug 322: DEFSTRUCT :TYPE LIST type predicates now handle + improper lists correctly. (reported by Bruno Haible) + * fixed bug 313: source-transform for was erroneously + applied to a call of a value of a variable with name . + (reported by Antonio Menezes Leitao) + * fixed bug 307: The obsolete instance protocol ensures that + subclasses are properly obsoleted. (thanks to Nikodemus Siivola) + * fixed bug 298, revealed by Paul F. Dietz' test suite: SBCL can + remove dead unknown-values globs from the middle of the stack. + * added a new restart to *BREAK-ON-SIGNALS* handling to make it + easier to resume long computations after using *BREAK-ON-SIGNALS* + to diagnose and fix failures. (thanks to Nikodemus Siivola) + * fixed bug reported by PFD in lisppaste #747 (and Bruno Haible from + CLISP test suite): WRITE-TO-STRING is not constant-foldable. + * fixed bugs in COMPLEX type specifier: UPGRADED-COMPLEX-PART-TYPE + is now consistent with (COMPLEX ); bugs in treatment of COMPLEX + MEMBER and UNION types have likewise been fixed. (thanks to Bruno + Haible) + * fixed a (fairly theoretical) bug in string printing: if + *PRINT-READABLY* is true, signal PRINT-NOT-READABLE if the string + does not have array-element-type equal to the most general string + type. + * fixed bug: SET-PPRINT-DISPATCH does not immediately resolve + function name. (thanks to Nikodemus Siivola) + * fixed bug: compile-time format string checker failed on + non-closed ~{. (reported by Thomas F Burdick) + * fixed bug: as reported by Kalle Olavi Niemitalo on #lisp IRC, + don't warn on legal loop code involving more than one aggregate + boolean. (thanks to Nikodemus Siivola) + * fixed bug: as reported by Peter Graves on #lisp IRC, passing a NIL + in keyword position to MAKE-PACKAGE was not being reported as + invalid. + * fixed bug: as reported by Juan Ripoll on cmucl-imp, + MULTIPLE-VALUE-BIND should be able to lexically bind lambda list + keywords. + * fixed bugs 280 and 312: the checking for multiple definitions in a + file is less likely to become confused by uses of inline + functions. + * fixed bug: the #S reader macro performs the keyword coercion + specified for slot names. (reported by Kalle Niemitalo) + * fixed bug: lambda lists may contain symbols whose names start with + & but are not lambda-list-keywords; their occurrence triggers a + STYLE-WARNING. + * fixed bug 321: define-method-combination argument lambda lists do + not cause invalid code to be generated when &optional or &aux + variables have default values. (reported by Bruno Haible) + * fixed bug 327: system subclasses of STRUCTURE-OBJECT or CONDITION + have CLOS classes; this appears also to have fixed reported + instability in stack exhaustion detection. + * fixed bug: the CONTROL-ERROR from ABORT, CONTINUE and + MUFFLE-WARNING when no associated restart is present is now + printable. + * optimization: rearranged the expansion of various defining macros + so that each expands into only one top-level form in a + :LOAD-TOPLEVEL context; this appears to decrease fasl sizes by + approximately 10%. + * optimization: used a previously little-used slot in symbols to + cache SXHASH values, yielding a 5-10% compiler speedup. (thanks + to Juho Snellman) + * fixed some bugs revealed by Paul Dietz' test suite: + ** MAKE-INSTANCES-OBSOLETE returns the class name when called with + a symbol. + ** Fixed an optimization bug related to inheritance of initforms + from local to shared slots. + ** FILE-POSITION works as specified on BROADCAST-STREAMs. + ** CAST optimizer forgot to flush argument derived type. + ** print/read consistency on floats is now orders of magnitude + more likely. (thanks also to Bruno Haible for a similar report + and discussions) + ** removed stack cleaning in the cleanup part of UNWIND-PROTECT. + ** IMAGPART is specified (infelicitously) to return (* 0 ) + for objects of type REAL. Make it so. + ** SXHASH is specified (infelicitously) to respect similarity, + which means that (SXHASH 0.0) must equal (SXHASH -0.0). Make + it so. (thanks to Markus Ziegler) + ** on the Alpha, the compiler succeeds in compiling functions + returning a known number of arguments greater than 63. + ** fixed handling of invalid NIL arguments in keyword position + in local calls. + ** fixed non-pretty printing of arrays with *PRINT-RADIX* being + true. + ** provided a readably-printable representation for RANDOM-STATE + objects. + ** ensured that pathnames, where they have a namestring, always + print using #P"..." syntax. -* 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.8.10 relative to sbcl-0.8.9: + * Support for the forthcoming 2.0 version of the NetBSD kernel + running on x86 hardware has been added. (thanks to Perry + E. Metzger most immediately, and others for their past work) + * SBCL now runs on OpenBSD 3.4. (Thanks to Scott Parish; 3.4 is the + current release version; SBCL's OpenBSD support had been broken + since about the time of OpenBSD's switch to ELF binary format.) + * [placeholder for DX summary] + ** user code with &REST lists declared dynamic-extent, under high + speed or space and low safety and debug optimization policy. + * The manual has been converted to Texinfo format and the debugger + chapter from the cmucl manual has been added. + * A facility has been added to extract documentation strings from + sbcl and store them as Texinfo-formatted snippets for inclusion in + the manual (via Texinfo's @include directive) + * bug fix: compiler emitted division in optimized DEREF. (thanks for + the test case to Dave Roberts) + * bug fix: multidimensional simple arrays loaded from FASLs had fill + pointers. (reported by Sean Ross) + * bug fix: PROFILE output is printed nicely even for large numerical + values. (thanks to Zach Beane) + * bug fix: streams with element-type (SIGNED-BYTE ) for + greater than 32 handle EOF correctly. + * bug fix: on X86 an immediate argument of the IMUL instruction is + correctly printed in disassembly. (thanks to Lutz Euler) + * bug fix: class slots in redefined classes preserve their old + values. (thanks to Bruno Haible and Nikodemus Siivola) + * bug fix: compilation of funcalls of CXX+R (e.g. CDDR) now + succeeds. (reported by Marco Baringer) + * fixed some bugs revealed by Paul Dietz' test suite: + ** READ-SEQUENCE now works on ECHO-STREAMs. + ** RATIONALIZE works more according to its specification. (thanks + to Bruno Haible) -changes in sbcl-0.6.4 relative to sbcl-0.6.3: +changes in sbcl-0.8.9 relative to sbcl-0.8.8: + * deprecation of old extension: *DEBUG-PRINT-LEVEL* and + *DEBUG-PRINT-LENGTH* are now deprecated in favor of the new, more + general SB-DEBUG:*DEBUG-PRINT-VARIABLE-ALIST* mechanism. (This + should matter to you only if you rebind the printer control + variables and then find you want different bindings in the + debugger than in the ordinary execution of your program.) + * The runtime build system has been tweaked to support building + (on SPARC/SunOS) using a C compiler which invokes Sun's own + assembler and linker. (thanks to Nikodemus Siivola) + * Unbound, undefined, undeclared variables now trigger full + WARNINGs, not just STYLE-WARNINGs, on the assumption that this is + more often programmer error than deliberate exploitation of undefined + behaviour. + * optimization: the hash algorithm for strings has changed to one + that is less vulnerable to spurious collisions. (thanks to Juho + Snellman) + * optimization: VECTOR-POP, VECTOR-PUSH-EXTEND and REPLACE do less + needless bounds checking. (thanks to Juho Snellman) + * optimization: implemented multiplication as a modular + (UNSIGNED-BYTE 32) operation on the PPC backend. + * fixed some bugs revealed by Paul Dietz' test suite: + ** ADJUST-ARRAY now copies the datum in a zero rank array if + required. + ** ADJUST-ARRAY no longer adjusts non-adjustable arrays. + ** MAKE-STRING-INPUT-STREAM accepts NIL as a value for :END. + ** MAKE-STRING-INPUT-STREAM functions correctly for strings with + element-type NIL. + ** CLEAR-INPUT accepts NIL and T for its (optional) stream + argument. + ** Ratios can now be printed correctly with *PRINT-BASE* bound to + 2, 8 or 16. + ** ECHO-STREAMs no longer attempt to echo the end of file value to + their output stream on EOF from read. + ** CONCATENATED-STREAM-STREAMS discards constituent streams which + have been read to end-of-file. + ** CLOSE works as expected on the null CONCATENATED-STREAM, and on + STRING-STREAMS. + ** Printing symbols with *PRINT-CASE* :CAPITALIZE respects the + description of determination of which consecutive characters + constitute a word. + ** Printing the "Space" character with escaping on now yields "#\\ ", + rather than "#\\Space", as mandated by ANSI 22.1.3.2. + ** Reading floating-point numbers with *READ-BASE* set to a number + less than 10 works correctly. + ** Reading floating-point numbers with *READ-BASE* set to a number + more than 10 works correctly. + ** Printing with *PRINT-READABLY* targets the standard readtable, not + the readtable currently in effect. -* 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.8.8 relative to sbcl-0.8.7: + * minor incompatible change: parsing of namestrings on a physical + (Unix) host has changed; numbers after the final #\. in a + namestring are no longer interpreted as a version field. This is + intented to be largely invisible to the user, except that the + meaning of the namestring "*.*.*" has changed: it now refers to a + pathname with :TYPE :WILD :NAME #. This namestring + should usually be replaced by + (make-pathname :name :wild :type :wild :version :wild) + with the added benefit that this is more likely to be portable. + As a consequence of this change, the :IF-EXISTS :NEW-VERSION + option to OPEN now signals an error if the file being opened + exists; this may have an impact on existing code. + * fixed bug 190: RUN-PROGRAM should now work properly, respecting + signals received, on the PowerPC platforms (both Linux and + Darwin). (thanks to Pierre Mai for pointing out the location of + the error) + * several fixes on OS X: The system now builds and runs cleanly on + Panther (10.3), and works around sigreturn bug (no more SIGFPEs). + (thanks to Brian Mastenbrook) + * bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with + second-resolution: integer multiples of 1/3600 between -24 and 24. + (thanks to Vincent Arkesteijn) + * bug fix: functions =, /=, <, <=, >, >= did not check the argument + type when called with 1 argument; PEEK-CHAR checked type of + PEEK-TYPE only after having read first character from a + stream. (reported by Peter Graves) + * bug fix: the garbage collector now has much better locality + behaviour, and in particular no longer treats all memory as being + exhausted when many small objects point to each other in a deeply + recursive manner. + * bug fix: arrays specialized on (UNSIGNED-BYTE 15) are now + recognized as being TYPEP their class. + * bug fix: the PUSHNEW documentation string has been corrected. + (thanks to Vincent Arkesteijn) + * bug fix: defaulting of the value for the last of an atypically + large number of multiple values being bound was not being + performed correctly on the Alpha or PPC platforms + * optimization: implemented multiplication as a modular + (UNSIGNED-BYTE 32) operation on the x86 backend. + * optimization: SEARCH on simple-base-strings can now be open-coded. + (see also contrib/compiler-extras.lisp for inspiration for + teaching the compiler about the Boyer-Moore algorithm). + * value, returned by MAX (and MIN) called with several EQUALP, but + not EQL, arguments now does not depend on compiler settings. + * fixed some bugs revealed by Paul Dietz' test suite: + ** in stack analysis liveness information is propagated from + non-local entry points. + ** pathwise CAST removing failed when the CAST node did not start + a block. + ** INPUT-STREAM-P, OUTPUT-STREAM-P, STREAM-ELEMENT-TYPE and + OPEN-STREAM-P signal a TYPE-ERROR if their argument is not a + stream. + ** LOAD-LOGICAL-PATHNAME-TRANSLATIONS returns NIL if the logical + host is already defined. + ** RENAME-FILE works on streams instead of signalling an internal + type error. + ** PEEK-CHAR uses the current readtable when determining whether + or not a character is whitespace. + ** MERGE-PATHNAMES handles the case when the pathname does not + specify a name while the default-pathname specifies a version. + ** Pathnames now stand a better chance of respecting print/read + consistency. + ** Attempting to use standardized file system operators with a + pathname with invalid :DIRECTORY components signals a + FILE-ERROR. + ** OPEN :DIRECTION :IO no longer fails to work on non-existent + files. + ** DIRECTORY on logical pathnames is more correct. + ** CLEAR-INPUT, CLEAR-OUTPUT, FINISH-OUTPUT and FORCE-OUTPUT + signal a TYPE-ERROR if their argument is not a stream. + ** READ-BYTE and WRITE-BYTE signal a TYPE-ERROR if their stream + designator argument does not designate a stream. + ** OPEN-STREAM-P and INPUT-STREAM-P on synonym streams work by + examining the synonym. + ** STREAM-ELEMENT-TYPE and FRESH-LINE on broadcast-streams now + work as specified. + ** OPEN and WITH-OPEN-STREAM allow opening streams with + element-type larger than ([UN]SIGNED-BYTE 32). -changes in sbcl-0.6.5 relative to sbcl-0.6.4: +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) + * DEFINE-CODITION is more efficient. (thanks to Brian Mastenbrook) + * 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 derived type. -* 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.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.6.6 relative to sbcl-0.6.5: +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. -* 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.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 ) returned . + ** 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.6.7 relative to sbcl-0.6.6: +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 -* 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.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.6.8 relative to sbcl-0.6.7: +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. -* 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.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.6.9 relative to sbcl-0.6.8: +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. -* 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: +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; -* 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.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.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.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.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 - . - 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.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.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.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.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.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.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 - . - * 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.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.7 relative to sbcl-0.7.6: * An alpha-quality port to the parisc architecture running Linux, @@ -1250,1348 +1387,1194 @@ changes in sbcl-0.7.7 relative to sbcl-0.7.6: * 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.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.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.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.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.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 + . + * 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.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.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.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.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.6.13 relative to sbcl-0.6.12: +* a port to the Compaq/DEC Alpha CPU, thanks to Dan Barlow +* Martin Atzmueller ported Tim Moore's marvellous CMU CL DISASSEMBLE + patch, so that DISASSEMBLE output is much nicer. +* The code in the SB-PROFILE package now seems reasonably stable. + I still haven't decided what the final interface should look like + (I'd like PROFILE to interact cleanly with TRACE, since both + facilities use function encapsulation) but if you have a need + for profiling now, you can probably use it successfully with + the current CMU-CL-style interface. +* Pathnames and *DEFAULT-DIRECTORY-DEFAULTS* are much more + ANSI-compliant, thanks to various fixes and tests from Dan Barlow. + Also, at Dan Barlow's suggestion, TRUENAME on a dangling symbolic + link now returns the dangling link itself, and for similar + reasons, TRUENAME on a cyclic symbolic link returns the cyclic + link itself. (In these cases the old code signalled an error and + looped endlessly, respectively.) Thus, DIRECTORY now works even + in the presence of dangling and cyclic symbolic links. +* Compiler trace output (the :TRACE-FILE option to COMPILE-FILE) + is now a supported extension again, since the consensus on + sbcl-devel was that it can be useful for ordinary development + work, not just for debugging SBCL itself. +* The default for SB-EXT:*DERIVE-FUNCTION-TYPES* has changed to + NIL, i.e. ANSI behavior, i.e. the compiler now recognizes + that currently-defined functions might be redefined later with + different return types. +* Hash tables can be printed readably, as inspired by CMU CL code + of Eric Marsden and SBCL code of Martin Atzmueller. +* better error handling in CLOS method combination, thanks to + Martin Atzmueller porting Pierre Mai's CMU CL patches +* more overflow fixes for >16Mbyte I/O buffers +* A bug in READ has been fixed, so that now a single Ctrl-D + character suffices to cause end-of-file on character streams. + In particular, now you only need one Ctrl-D at the command + line (not two) to exit SBCL. +* fixed bug 26: ARRAY-DISPLACEMENT now returns (VALUES NIL 0) for + undisplaced arrays. +* fixed bug 107 (reported as a CMU CL bug by Erik Naggum on + comp.lang.lisp 2001-06-11): (WRITE #*101 :RADIX T :BASE 36) now + does the right thing. +* The implementation of some type tests, especially for CONDITION + types, is now tidier and maybe faster, due to CMU CL code + originally by Douglas Crosher, ported by Martin Atzmueller. +* Some math functions have been fixed, and there are new + optimizers for deriving the types of COERCE and ARRAY-ELEMENT-TYPE, + thanks to Raymond Toy's work on CMU CL, ported by Martin Atzmueller. +* (There are also some new optimizers in contrib/*-extras.lisp. Those + aren't built into sbcl-0.6.13, but are a sneak preview of what's + likely to be built into sbcl-0.7.0.) +* A bug in COPY-READTABLE was fixed. (Joao Cachopo's patch to CMU + CL, ported to SBCL by Martin Atzmueller) +* DESCRIBE now gives more information in some cases. (Pierre Mai's + patch to CMU CL, ported to SBCL by Martin Atzmueller) +* Martin Atzmueller and Bill Newman fixed some bugs in INSPECT. +* There's a new slam.sh hack to shorten the edit/compile/debug + cycle for low-level changes to SBCL itself, and a new + :SB-AFTER-XC-CORE target feature to control the generation of + the after-xc.core file needed by slam.sh. +* minor incompatible change: The ENTRY-POINTS &KEY argument to + COMPILE-FILE is no longer supported, so that now every function + gets an entry point, so that block compilation looks a little + more like the plain vanilla ANSI section 3.2.2.3 scheme. +* minor incompatible change: SB-EXT:GET-BYTES-CONSED now + returns the number of bytes consed since the system started, + rather than the number consed since the first time the function + was called. (The new definition parallels ANSI functions like + CL:GET-INTERNAL-RUN-TIME.) +* minor incompatible change: The old CMU-CL-style DIRECTORY options, + i.e. :ALL, :FOLLOW-LINKS, and :CHECK-FOR-SUBDIRS, are no longer + supported. Now DIRECTORY always does the abstract Common-Lisp-y + thing, i.e. :ALL T :FOLLOW-LINKS T :CHECK-FOR-SUBDIRS T. +* Fasl file version numbers are now independent of the target CPU, + since historically most system changes which required version + number changes have affected all CPUs equally. Similarly, + the byte fasl file version is now equal to the ordinary + fasl file version. + +changes in sbcl-0.6.12 relative to sbcl-0.6.11: +* incompatible change: The old SB-EXT:OPTIMIZE-INTERFACE declaration + is no longer recognized. I apologize for this, because it was + listed in SB-EXT as a supported extension, but I found that + its existing behavior was poorly specified, as well as incorrectly + specified, and it looked like too much of a mess to straighten it + out. I have enough on my hands trying to get ANSI stuff to work.. +* many patches ported from CMU CL by Martin Atzmueller, with + half a dozen bug fixes in pretty-printing and the debugger, and + half a dozen others elsewhere +* fixed bug 13: Floating point infinities are now supported again. + They might still be a little bit flaky, but thanks to bug reports + from Nathan Froyd and CMU CL patches from Raymond Toy they're not + as flaky as they were. +* The --noprogrammer command line option is now supported. (Its + behavior is slightly different in detail from what the old man + page claimed it would do, but it's still appropriate under the + same circumstances that the man page talks about.) +* The :SB-PROPAGATE-FLOAT-TYPE and :SB-PROPAGATE-FUN-TYPE features + are now supported, and enabled by default. Thus, the compiler can + handle many floating point and complex operations much less + inefficiently. (Thus e.g. you can implement a complex FFT + without consing!) +* The compiler now detects type mismatches between DECLAIM FTYPE + and DEFUN better, and implements CHECK-TYPE more correctly, and + SBCL builds under CMU CL again despite its non-ANSI EVAL-WHEN, + thanks to patches from Martin Atzmueller. +* various fixes to make the cross-compiler more portable to + ANSI-conforming-but-different cross-compilation hosts (notably + Lispworks for Windows, following bug reports from Arthur Lemmens) +* A bug in READ-SEQUENCE for CONCATENATED-STREAM, and a gross + ANSI noncompliance in DEFMACRO &KEY argument parsing, have been + fixed thanks to Pierre Mai's CMU CL patches. +* fixes to keep the system from overflowing internal counters when + it tries to use i/o buffers larger than 16M bytes +* fixed bug 45a: Various internal functions required to support + complex special functions have been merged from CMU CL sources. + (When I was first setting up SBCL, I misunderstood a compile-time + conditional #-OLD-SPECFUN, and so accidentally deleted them.) +* improved support for type intersection and union, fixing bug 12 + (e.g., now (SUBTYPEP 'KEYWORD 'SYMBOL)=>T,T) and some other + more obscure bugs as well +* some steps toward byte-compiling non-performance-critical + parts of the system, courtesy of patches from Martin Atzmueller +* Christophe Rhodes has made some debian packages of sbcl at + . + 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.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.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.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.6.10 relative to sbcl-0.6.9: -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. +* 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.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.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.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.6.8 relative to sbcl-0.6.7: -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". +* 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.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.6.7 relative to sbcl-0.6.6: -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. +* 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.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.6.6 relative to sbcl-0.6.5: -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 ) returned . - ** 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). +* 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.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.6.5 relative to sbcl-0.6.4: -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. +* 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.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) - * DEFINE-CODITION is more efficient. (thanks to Brian Mastenbrook) - * 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 derived type. +changes in sbcl-0.6.4 relative to sbcl-0.6.3: -changes in sbcl-0.8.8 relative to sbcl-0.8.7: - * minor incompatible change: parsing of namestrings on a physical - (Unix) host has changed; numbers after the final #\. in a - namestring are no longer interpreted as a version field. This is - intented to be largely invisible to the user, except that the - meaning of the namestring "*.*.*" has changed: it now refers to a - pathname with :TYPE :WILD :NAME #. This namestring - should usually be replaced by - (make-pathname :name :wild :type :wild :version :wild) - with the added benefit that this is more likely to be portable. - As a consequence of this change, the :IF-EXISTS :NEW-VERSION - option to OPEN now signals an error if the file being opened - exists; this may have an impact on existing code. - * fixed bug 190: RUN-PROGRAM should now work properly, respecting - signals received, on the PowerPC platforms (both Linux and - Darwin). (thanks to Pierre Mai for pointing out the location of - the error) - * several fixes on OS X: The system now builds and runs cleanly on - Panther (10.3), and works around sigreturn bug (no more SIGFPEs). - (thanks to Brian Mastenbrook) - * bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with - second-resolution: integer multiples of 1/3600 between -24 and 24. - (thanks to Vincent Arkesteijn) - * bug fix: functions =, /=, <, <=, >, >= did not check the argument - type when called with 1 argument; PEEK-CHAR checked type of - PEEK-TYPE only after having read first character from a - stream. (reported by Peter Graves) - * bug fix: the garbage collector now has much better locality - behaviour, and in particular no longer treats all memory as being - exhausted when many small objects point to each other in a deeply - recursive manner. - * bug fix: arrays specialized on (UNSIGNED-BYTE 15) are now - recognized as being TYPEP their class. - * bug fix: the PUSHNEW documentation string has been corrected. - (thanks to Vincent Arkesteijn) - * bug fix: defaulting of the value for the last of an atypically - large number of multiple values being bound was not being - performed correctly on the Alpha or PPC platforms - * optimization: implemented multiplication as a modular - (UNSIGNED-BYTE 32) operation on the x86 backend. - * optimization: SEARCH on simple-base-strings can now be open-coded. - (see also contrib/compiler-extras.lisp for inspiration for - teaching the compiler about the Boyer-Moore algorithm). - * value, returned by MAX (and MIN) called with several EQUALP, but - not EQL, arguments now does not depend on compiler settings. - * fixed some bugs revealed by Paul Dietz' test suite: - ** in stack analysis liveness information is propagated from - non-local entry points. - ** pathwise CAST removing failed when the CAST node did not start - a block. - ** INPUT-STREAM-P, OUTPUT-STREAM-P, STREAM-ELEMENT-TYPE and - OPEN-STREAM-P signal a TYPE-ERROR if their argument is not a - stream. - ** LOAD-LOGICAL-PATHNAME-TRANSLATIONS returns NIL if the logical - host is already defined. - ** RENAME-FILE works on streams instead of signalling an internal - type error. - ** PEEK-CHAR uses the current readtable when determining whether - or not a character is whitespace. - ** MERGE-PATHNAMES handles the case when the pathname does not - specify a name while the default-pathname specifies a version. - ** Pathnames now stand a better chance of respecting print/read - consistency. - ** Attempting to use standardized file system operators with a - pathname with invalid :DIRECTORY components signals a - FILE-ERROR. - ** OPEN :DIRECTION :IO no longer fails to work on non-existent - files. - ** DIRECTORY on logical pathnames is more correct. - ** CLEAR-INPUT, CLEAR-OUTPUT, FINISH-OUTPUT and FORCE-OUTPUT - signal a TYPE-ERROR if their argument is not a stream. - ** READ-BYTE and WRITE-BYTE signal a TYPE-ERROR if their stream - designator argument does not designate a stream. - ** OPEN-STREAM-P and INPUT-STREAM-P on synonym streams work by - examining the synonym. - ** STREAM-ELEMENT-TYPE and FRESH-LINE on broadcast-streams now - work as specified. - ** OPEN and WITH-OPEN-STREAM allow opening streams with - element-type larger than ([UN]SIGNED-BYTE 32). +* 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.8.9 relative to sbcl-0.8.8: - * deprecation of old extension: *DEBUG-PRINT-LEVEL* and - *DEBUG-PRINT-LENGTH* are now deprecated in favor of the new, more - general SB-DEBUG:*DEBUG-PRINT-VARIABLE-ALIST* mechanism. (This - should matter to you only if you rebind the printer control - variables and then find you want different bindings in the - debugger than in the ordinary execution of your program.) - * The runtime build system has been tweaked to support building - (on SPARC/SunOS) using a C compiler which invokes Sun's own - assembler and linker. (thanks to Nikodemus Siivola) - * Unbound, undefined, undeclared variables now trigger full - WARNINGs, not just STYLE-WARNINGs, on the assumption that this is - more often programmer error than deliberate exploitation of undefined - behaviour. - * optimization: the hash algorithm for strings has changed to one - that is less vulnerable to spurious collisions. (thanks to Juho - Snellman) - * optimization: VECTOR-POP, VECTOR-PUSH-EXTEND and REPLACE do less - needless bounds checking. (thanks to Juho Snellman) - * optimization: implemented multiplication as a modular - (UNSIGNED-BYTE 32) operation on the PPC backend. - * fixed some bugs revealed by Paul Dietz' test suite: - ** ADJUST-ARRAY now copies the datum in a zero rank array if - required. - ** ADJUST-ARRAY no longer adjusts non-adjustable arrays. - ** MAKE-STRING-INPUT-STREAM accepts NIL as a value for :END. - ** MAKE-STRING-INPUT-STREAM functions correctly for strings with - element-type NIL. - ** CLEAR-INPUT accepts NIL and T for its (optional) stream - argument. - ** Ratios can now be printed correctly with *PRINT-BASE* bound to - 2, 8 or 16. - ** ECHO-STREAMs no longer attempt to echo the end of file value to - their output stream on EOF from read. - ** CONCATENATED-STREAM-STREAMS discards constituent streams which - have been read to end-of-file. - ** CLOSE works as expected on the null CONCATENATED-STREAM, and on - STRING-STREAMS. - ** Printing symbols with *PRINT-CASE* :CAPITALIZE respects the - description of determination of which consecutive characters - constitute a word. - ** Printing the "Space" character with escaping on now yields "#\\ ", - rather than "#\\Space", as mandated by ANSI 22.1.3.2. - ** Reading floating-point numbers with *READ-BASE* set to a number - less than 10 works correctly. - ** Reading floating-point numbers with *READ-BASE* set to a number - more than 10 works correctly. - ** Printing with *PRINT-READABLY* targets the standard readtable, not - the readtable currently in effect. +changes in sbcl-0.6.3 relative to sbcl-0.6.2: -changes in sbcl-0.8.10 relative to sbcl-0.8.9: - * Support for the forthcoming 2.0 version of the NetBSD kernel - running on x86 hardware has been added. (thanks to Perry - E. Metzger most immediately, and others for their past work) - * SBCL now runs on OpenBSD 3.4. (Thanks to Scott Parish; 3.4 is the - current release version; SBCL's OpenBSD support had been broken - since about the time of OpenBSD's switch to ELF binary format.) - * [placeholder for DX summary] - ** user code with &REST lists declared dynamic-extent, under high - speed or space and low safety and debug optimization policy. - * The manual has been converted to Texinfo format and the debugger - chapter from the cmucl manual has been added. - * A facility has been added to extract documentation strings from - sbcl and store them as Texinfo-formatted snippets for inclusion in - the manual (via Texinfo's @include directive) - * bug fix: compiler emitted division in optimized DEREF. (thanks for - the test case to Dave Roberts) - * bug fix: multidimensional simple arrays loaded from FASLs had fill - pointers. (reported by Sean Ross) - * bug fix: PROFILE output is printed nicely even for large numerical - values. (thanks to Zach Beane) - * bug fix: streams with element-type (SIGNED-BYTE ) for - greater than 32 handle EOF correctly. - * bug fix: on X86 an immediate argument of the IMUL instruction is - correctly printed in disassembly. (thanks to Lutz Euler) - * bug fix: class slots in redefined classes preserve their old - values. (thanks to Bruno Haible and Nikodemus Siivola) - * bug fix: compilation of funcalls of CXX+R (e.g. CDDR) now - succeeds. (reported by Marco Baringer) - * fixed some bugs revealed by Paul Dietz' test suite: - ** READ-SEQUENCE now works on ECHO-STREAMs. - ** RATIONALIZE works more according to its specification. (thanks - to Bruno Haible) +* 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.8.11 relative to sbcl-0.8.10: - * minor incompatible change: the sb-grovel contrib now treats C - structures as alien (in the sense of SB-ALIEN) objects rather than - as undistinguished (simple-array (unsigned-byte 8) (*))s. This - has implications for memory management of client code - (sb-grovel-returned objects must now be manually managed) and for - type safety (alien objects now have full types). - * new feature: the SB-EXT:MUFFLE-CONDITIONS declaration should be - used to control emission of compiler diagnostics, rather than the - SB-EXT:INHIBIT-WARNINGS OPTIMIZE quality. See the manual for - documentation on this feature. The SB-EXT:INHIBIT-WARNINGS - quality should be considered deprecated. - * install.sh now installs the user manual as well - * (not quite a new documentable feature, but worth considering in - the light of the new SB-EXT:MUFFLE-CONDITIONS declaration): the - beginnings of a semantically meaningful condition hierarchy is - under development, for use in SB-EXT:MUFFLE-CONDITIONS and by - IDEs. - * fixed bug: PARSE-NAMESTRING now accepts any valid pathaname - designator as the defaults argument. - * fixed bug: Displaced arrays whose displaced-to array has become - too small now cause ARRAY-DIMENSION to signal an error, providing - for safer bounds-checking. (reported by Bruno Haible) - * fixed bug: DEFCLASS slot definitions with identical :READER and - :WRITER names now signal a reasonable error. (reported by Thomas - Burdick) - * fixed bug: CLOSE :ABORT T on appending stream no longer causes - file deletion. - * fixed bug: Invalid slot specification errors now print correctly. - (thanks to Zach Beane) - * fixed bug 320: Shared to local slot value transfers in class - redefinitions now happen corrently from superclasses as - well. (reported by Bruno Haible) - * fixed bug 316: SHIFTF now accepts VALUES forms. (reported by Bruno - Haible) - * fixed bug 322: DEFSTRUCT :TYPE LIST type predicates now handle - improper lists correctly. (reported by Bruno Haible) - * fixed bug 313: source-transform for was erroneously - applied to a call of a value of a variable with name . - (reported by Antonio Menezes Leitao) - * fixed bug 307: The obsolete instance protocol ensures that - subclasses are properly obsoleted. (thanks to Nikodemus Siivola) - * fixed bug 298, revealed by Paul F. Dietz' test suite: SBCL can - remove dead unknown-values globs from the middle of the stack. - * added a new restart to *BREAK-ON-SIGNALS* handling to make it - easier to resume long computations after using *BREAK-ON-SIGNALS* - to diagnose and fix failures. (thanks to Nikodemus Siivola) - * fixed bug reported by PFD in lisppaste #747 (and Bruno Haible from - CLISP test suite): WRITE-TO-STRING is not constant-foldable. - * fixed bugs in COMPLEX type specifier: UPGRADED-COMPLEX-PART-TYPE - is now consistent with (COMPLEX ); bugs in treatment of COMPLEX - MEMBER and UNION types have likewise been fixed. (thanks to Bruno - Haible) - * fixed a (fairly theoretical) bug in string printing: if - *PRINT-READABLY* is true, signal PRINT-NOT-READABLE if the string - does not have array-element-type equal to the most general string - type. - * fixed bug: SET-PPRINT-DISPATCH does not immediately resolve - function name. (thanks to Nikodemus Siivola) - * fixed bug: compile-time format string checker failed on - non-closed ~{. (reported by Thomas F Burdick) - * fixed bug: as reported by Kalle Olavi Niemitalo on #lisp IRC, - don't warn on legal loop code involving more than one aggregate - boolean. (thanks to Nikodemus Siivola) - * fixed bug: as reported by Peter Graves on #lisp IRC, passing a NIL - in keyword position to MAKE-PACKAGE was not being reported as - invalid. - * fixed bug: as reported by Juan Ripoll on cmucl-imp, - MULTIPLE-VALUE-BIND should be able to lexically bind lambda list - keywords. - * fixed bugs 280 and 312: the checking for multiple definitions in a - file is less likely to become confused by uses of inline - functions. - * fixed bug: the #S reader macro performs the keyword coercion - specified for slot names. (reported by Kalle Niemitalo) - * fixed bug: lambda lists may contain symbols whose names start with - & but are not lambda-list-keywords; their occurrence triggers a - STYLE-WARNING. - * fixed bug 321: define-method-combination argument lambda lists do - not cause invalid code to be generated when &optional or &aux - variables have default values. (reported by Bruno Haible) - * fixed bug 327: system subclasses of STRUCTURE-OBJECT or CONDITION - have CLOS classes; this appears also to have fixed reported - instability in stack exhaustion detection. - * fixed bug: the CONTROL-ERROR from ABORT, CONTINUE and - MUFFLE-WARNING when no associated restart is present is now - printable. - * optimization: rearranged the expansion of various defining macros - so that each expands into only one top-level form in a - :LOAD-TOPLEVEL context; this appears to decrease fasl sizes by - approximately 10%. - * optimization: used a previously little-used slot in symbols to - cache SXHASH values, yielding a 5-10% compiler speedup. (thanks - to Juho Snellman) - * fixed some bugs revealed by Paul Dietz' test suite: - ** MAKE-INSTANCES-OBSOLETE returns the class name when called with - a symbol. - ** Fixed an optimization bug related to inheritance of initforms - from local to shared slots. - ** FILE-POSITION works as specified on BROADCAST-STREAMs. - ** CAST optimizer forgot to flush argument derived type. - ** print/read consistency on floats is now orders of magnitude - more likely. (thanks also to Bruno Haible for a similar report - and discussions) - ** removed stack cleaning in the cleanup part of UNWIND-PROTECT. - ** IMAGPART is specified (infelicitously) to return (* 0 ) - for objects of type REAL. Make it so. - ** SXHASH is specified (infelicitously) to respect similarity, - which means that (SXHASH 0.0) must equal (SXHASH -0.0). Make - it so. (thanks to Markus Ziegler) - ** on the Alpha, the compiler succeeds in compiling functions - returning a known number of arguments greater than 63. - ** fixed handling of invalid NIL arguments in keyword position - in local calls. - ** fixed non-pretty printing of arrays with *PRINT-RADIX* being - true. - ** provided a readably-printable representation for RANDOM-STATE - objects. - ** ensured that pathnames, where they have a namestring, always - print using #P"..." syntax. +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.8.12 relative to sbcl-0.8.11: - * minor incompatible change: the system no longer provides - optimization hints (conditions which are TYPEP - SB-EXT:COMPILER-NOTE) for conforming code in default compilation - mode; these hints are still emitted when higher SPEED optimization - is requested. - * new contrib module: a sampling profiler (profiling by statistical - sampling, rather than by instrumenting functions) is available as - the SB-SPROF contrib. (thanks to Gerd Moellmann and Juho Snellman) - * the behaviour of the standard function ED is now customizeable by - third parties through a hook variable: see ED's documentation - string for information on the protocol. - * the compiler no longer emits efficiency notes for (FUNCALL X) - when the type of X is uncertain under default optimization - settings. - * fixed bug 276: mutating a binding of a specialized parameter to a - method to something that is not TYPEP the specializer is now - possible. - * fixed bugs 45d and 118: DOUBLE-FLOAT[-NEGATIVE]-EPSILON now - exhibit the required behaviour on the x86 platform. (thanks to - Peter van Eynde, Eric Marsden and Bruno Haible) - * fixed bug 335: ATANH now computes the inverse hyperbolic tangent - even for difficult arguments. (reported by Peter Graves) - * fixed bug 141a: the backquote printer now descends quoted - structure. - * fixed another bug in backquote printing: no more destructive - modification of the form's list structure. (reported by Brian - Downing) - * fixed bug in INTERRUPT-THREAD: pin the function, so that it cannot - move between its address being taken and the call to - interrupt_thread, fixing a crashing race condition. - * the SB-POSIX contrib implementation has been adjusted so that it - no longer exhibits ridiculously poor performance when constructing - instances corresponding to C structs. +changes in sbcl-0.6.1 relative to sbcl-0.6.0: -changes in sbcl-0.8.13 relative to sbcl-0.8.12: - * new feature: SB-PACKAGE-LOCKS. See the "Package Locks" section of - the manual for details; add :SB-PACKAGE-LOCKS in - customize-target-features.lisp to enable them. - * minor incompatible change: as threatened around sbcl-0.8.0, the - home package of MOP-related symbols is now SB-MOP, not SB-PCL. - The symbols are also exported from SB-PCL for backwards - compatibility, but more so than before SB-PCL should be treated as - an implementation-internal package. - * the SB-SPROF contrib now works on (most) non-x86 architectures. - It is known as of this release not to work on the Alpha, however. - * fixed bug #338: instances of EQL-SPECIFIER are now valid type - designators and can hence be used with TYPEP. - * fixed bug #333: CHECK-TYPE now ensures that the type error - signalled, if any, has the right object to be accessed by - TYPE-ERROR-DATUM. (reported by Tony Martinez) - * fixed bug #340: SETF of VALUES obeys the specification in ANSI - 5.1.2.3 for multiple-value place subforms. (reported by Kalle - Olavi Niemetalo) - * fixed bug #334: programmatic addition of slots using specialized - methods on SB-MOP:COMPUTE-SLOTS works for :ALLOCATION :INSTANCE - and :ALLOCATION :CLASS slots. - * fixed a bug: #\Space (and other whitespace characters) are no - longer considered to be macro characters in standard syntax by - GET-MACRO-CHARACTER. +* 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.0 relative to sbcl-0.5.0: -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. +* 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 to the banner information printed by + the sbcl executable diff --git a/TODO b/TODO index 50e05ef..0dde9c9 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,20 @@ +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. + for early 0.8.x: * test file reworking diff --git a/version.lisp-expr b/version.lisp-expr index acc72be..5057a74 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.12.22" +"0.8.12.23"