X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=NEWS;h=8d8b505a6bd18090fb5296dbd070be8a230461d2;hb=33b3c0e45a34f035fa918682832f1affa6747930;hp=e361a7da18961d672d715a29becf756296423a93;hpb=f4f18b9dcdaf1948947b1747f5bfa766a1a0ee4c;p=sbcl.git diff --git a/NEWS b/NEWS index e361a7d..df41ba2 100644 --- a/NEWS +++ b/NEWS @@ -813,83 +813,798 @@ changes in sbcl-0.6.13 relative to sbcl-0.6.12: fasl file version. changes in sbcl-0.7.0 relative to sbcl-0.6.13: -* incompatible change: The default fasl file extension has changed +* 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".) -* There are new compiler optimizations for various functions: FIND, - POSITION, FIND-IF, POSITION-IF, FILL, COERCE, TRUNCATE, FLOOR, and - CEILING. Mostly these should be transparent, but there's one - potentially-annoying problem (bug 117): when the compiler inline - expands the FIND/POSITION family of functions and does type - analysis on the result, it can find control paths which have - type mismatches, and when it can't prove that they're not taken, - it will issue WARNINGs about the type mismatches. It's not clear - how to make the compiler smart enough to fix this in general, but - a workaround is given in the entry for 117 in the BUGS file. -* The doc/cmucl/ directory, containing old CMU CL documentation, - is no longer part of the base system. The files which used to - be in the doc/cmucl/ directory are now available as - . -* The default value of *BYTES-CONSED-BETWEEN-GCS* has been - doubled, to 4 million. (If your application spends a lot of time - GCing and you have a lot of RAM, you might want to experiment with - increasing it even more.) -* The EVAL and EVAL-WHEN code has been largely rewritten, and the - old CMU CL "IR1 interpreter" has gone away. The new interpreter - is probably slower and harder to debug than the old one, but - it's much simpler (several thousand lines of source code simpler) - and considerably more ANSI-compliant. Bugs - ?? IR1-3 and - ?? IR1-3a - have been fixed. Since the code is newer, there might still be - some new bugs (though not as many as before Martin Atzmueller's - fixes:-). But hopefully any remaining bugs will be simpler, less - fundamental, and more fixable then the bugs in the old IR1 - interpreter code. -* A bug in LOOP operations on hash tables has been fixed, thanks - to a bug report and patch from Alexey Dejneka. -* PPRINT-LOGICAL-BLOCK now copies the *PRINT-LINES* value on entry - and uses that copy, rather than the current dynamic value, when - it's trying to decide whether to truncate output . Thus e.g. - (let ((*print-lines* 50)) - (pprint-logical-block (stream nil) - (dotimes (i 10) - (let ((*print-lines* 8)) - (print (aref possiblybigthings i) stream))))) - should truncate the logical block only at 50 lines, instead of - often truncating it at 8 lines. -* :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. -* lots of tidying up internally: renaming things so that names are - more systematic and consistent, converting C macros to inline - functions, systematizing indentation, making symbol packaging - more logical, and so forth -* The fasl file version number changed again, for any number of - good reasons. +* compiler changes: + ** There are many changes in the implementation of the compiler. + SBCL is now essentially a compiler-only implementation of ANSI + Common Lisp. EVAL still "interprets" a few special cases, but + almost all the interesting cases are handled by creating + a LAMBDA expression, calling COMPILE on it, then calling + FUNCALL on the result. + ** The EVAL-WHEN code has been rewritten to be ANSI-compliant, and + various related bugs (IR1-1, IR1-2, IR1-3, IR1-3a) have gone away. + Since the code is newer, there might still be some new bugs + (though not as many as before Martin Atzmueller's fixes:-). But + the new code is substantially simpler and clearer, and hopefully + any remaining bugs will be simpler, less fundamental, and more + fixable then the bugs in the old code. + ** The revised compiler is still a little unsteady on its feet. + In particular, + *** The debugging information it produces (particularly the names + of FUNCTION objects) is sometimes much less useful than what + the old compiler produced. + *** The support for inlining FOO when you (DECLAIM (INLINE FOO)) + then do (DEFUN FOO ..) in a non-null lexical environment (e.g. + within a MACROLET) has been temporarily weakened. + ** There are new compiler optimizations for various functions: + *** the sequence functions FIND, POSITION, FIND-IF, POSITION-IF, + FIND-IF-NOT, POSITION-IF-NOT, and FILL + *** the math functions TRUNCATE, FLOOR, and CEILING + *** the function-of-all-trades COERCE + Mostly these should be transparent, but there's one + potentially-annoying problem (bug 117): when the compiler + inline-expands a function and does type analysis on the result, + it can create control paths which have type mismatches, and + when it can't prove that those control paths aren't taken, + it will issue WARNINGs about the type mismatches. This is + a particular problem in practice for the new sequence functions. + It's not clear how this should be fixed, and for now, a + workaround is given in the entry for 117 in the BUGS file. + ** (Because of the interaction between the two previous items -- + occasional inlining problems and new inline expansions -- some + of the new sequence function optimizations won't really kick in + completely until debugging information, and then inlining, are + straightened out in some future version.) +* minor incompatible changes: + ** As part of a bug fix by Christophe Rhodes to DIRECTORY behavior, + DIRECTORY no longer implicitly promotes NIL slots of its + pathname argument to :WILD. In particular, when you ask for the + contents of a directory (which you used to be able to do without + explicit wildcards, e.g. (DIRECTORY "/tmp/")) you now need to use + explicit wildcards, e.g. (DIRECTORY "/tmp/*.*"). + ** changes in behavior that ANSI explicitly defines to be + implementation dependent: + *** The new compiler-only implementation still conforms with ANSI, + but acts a little different than before. Besides the obvious + changes in performance tradeoffs (that the cost per form passed + to EVAL has gone up, and the cost per form executed by EVAL + has gone down), the behavior of the system changes a little + because there are no longer any interpreted function objects. + COMPILED-FUNCTION-P is now synonymous with FUNCTIONP, and + e.g. doing COMPILE on the output of interactive DEFUN is + now a no-op. + *** The value of INTERNAL-TIME-UNITS-PER-SECOND has been increased + from 100 to 1000. + *** The default for the USE list in MAKE-PACKAGE and DEFPACKAGE + has changed from (:CL) to NIL. + *** The CHAR-NAME of unprintable ASCII characters which, unlike + e.g. #\Newline and #\Tab, don't have names specified in the + ANSI Common Lisp standard, is now based on their ASCII symbolic + names (#\Nul, #\Soh, #\Stx, etc.) The old CMU-CL-style names + (#\Null, #\^a, #\^b, etc.) are still accepted by NAME-CHAR, but + are no longer used for output. + ** changes in internal implementation constants: + *** The default value of *BYTES-CONSED-BETWEEN-GCS* has doubled, to + 4 million. (If your application spends a lot of time GCing and + you have a lot of RAM, you might want to experiment with + increasing it even more.) + ** The SB-C-CALL package has been merged into the SB-ALIEN package. + However, almost all old code should still continue to work without + immediate update, as SB-C-CALL is now a (deprecated) nickname + for SB-ALIEN. + ** Old operator names in the style DEF-FOO are now deprecated in + favor of new corresponding names DEFINE-FOO, for consistency with + the naming convention used in the ANSI standard (DEFSTRUCT, DEFVAR, + DEFINE-CONDITION, DEFINE-MODIFY-MACRO..). This mostly affects + internal symbols, but a few supported extensions like + SB-ALIEN:DEF-ALIEN-FUNCTION are also affected. (So e.g. + DEF-ALIEN-FUNCTION becomes DEFINE-ALIEN-FUNCTION.) + ** The debugger prompt sequence now goes "5]", "5[2]", "5[3]", + etc. as you get deeper into recursive calls to the debugger + command loop, instead of the old "5]", "5]]", "5]]]" + sequence. (I was motivated to do this when squabbles between + ILISP and SBCL left me very deeply nested in the debugger. In the + short term, this change will probably provoke more ILISP/SBCL + squabbles, but hopefully it will be an improvement in the long run.) + ** SB-ALIEN:DEFINE-ALIEN-FUNCTION (also known by the old deprecated + name DEF-ALIEN-FUNCTION) now does DECLAIM FTYPE for the defined + function, since declaiming return types involving aliens is + (1) annoyingly messy to do by hand and (2) vital to efficient + compilation of code which calls such functions. + ** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are no + longer reexported by the SB-EXT package. They're solely useful + for alien code, so it seems more logical that you should get + them from the SB-ALIEN package, not in SB-EXT. + ** :SB-CONSTRAIN-FLOAT-TYPE, :SB-PROPAGATE-FLOAT-TYPE, and + :SB-PROPAGATE-FUN-TYPE are no longer considered to be optional + features. Instead, the code that they used to control is always + built into the system. +* many other bug fixes + ** DEFSTRUCT and DEFCLASS have been substantially updated to take + advantage of the new EVAL-WHEN stuff and to clean them up in + general, and they are now more ANSI-compliant in a number of + ways. Martin Atzmueller is responsible for a lot of this. + ** Besides the cleanups discussed above, Martin Atzmueller fixed + several other bugs: + *** fixes in READ-SEQUENCE and WRITE-SEQUENCE + *** correct ERROR type for various file operations + *** some fixes for Lisp streams + *** DEFMETHOD syntax checking + *** changing old weird representation of debug information as + strings (which, among their other deficiencies, don't transform + correctly when you rename packages, and don't change their + print representation when you change things like *PACKAGE* + and *PRINT-LENGTH*) to symbols and lists of symbols + He also made several improvements and fixed several bugs in DESCRIBE. + ** Alexey Dejneka fixed many bugs, including classic bugs and bugs he + discovered himself: + *** misbehavior of WRITE-STRING/WRITE-LINE + *** LOOP over keys of a hash table, LOOP bugs 49b and 81 and 103, + and several other LOOP problems as well + *** DIRECTORY when similar filenames are present + *** DEFGENERIC with :METHOD options + *** bug 126, in (MAKE-STRING N :INITIAL-ELEMENT #\SPACE)) + *** bug in the optimization of ARRAY-ELEMENT-TYPE + *** argument ordering in FIND with :TEST option + *** mishandled package designator argument in APROPOS-LIST + *** various problems in the backquote readmacro + *** a bug in APROPOS + *** probably some others that I'm not describing very well here, + since the CVS log documents them by reference to sbcl-devel + messages, and the SourceForge archives aren't working well.:-( + ** Dan Barlow improved the Alpha port (and is making progress on the + PPC port, for those of you who think different). + ** Besides the DIRECTORY fixes and changes mentioned elsewhere, + Christophe Rhodes cleaned up the system self-test scripts (in tests/*), + contributed the optimization of FIND-IF-NOT and POSITION-IF-NOT, and + continues to work on the SPARC port (for those of you in a position + to look down upon our little PC-compatible boxes from a great height). + ** PPRINT-LOGICAL-BLOCK now copies the *PRINT-LINES* value on entry + and uses that copy, rather than the current dynamic value, when + it's trying to decide whether to truncate output. Thus e.g. + (let ((*print-lines* 50)) + (pprint-logical-block (stream nil) + (dotimes (i 10) + (let ((*print-lines* 8)) + (print (aref possiblybigthings i) stream))))) + should now truncate the logical block only at 50 lines, instead of + often truncating it at 8 lines, as it did before. +* The doc/cmucl/ directory, containing old CMU CL documentation + from the time of the fork, is no longer part of the base system. + SourceForge has shut down its anonymous FTP service, and with it + my original plan for distributing the old CMU CL documentation + there. For now, if you need these files you can download an old + SBCL source release and extract them from it. +* The fasl file version number changed again, for dozens of reasons, + some of which are apparent above. + +changes in sbcl-0.7.1 relative to sbcl-0.7.0: +* mostly bug fixes: + ** SB-ALIEN:LOAD-FOREIGN and SB-ALIEN:LOAD-1-FOREIGN are set + up properly again. (There was a packaging bug in 0.7.0 which + left their definitions in SB-SYS::LOAD-FOREIGN and + SB-SYS::LOAD-1-FOREIGN. LOAD-FOREIGN and LOAD-1-FOREIGN are + vital for most things which interface to C-level interfaces, + like extensions working with sockets or databases or + Perl-compatible regexes or whatever, and the need to fix + this bug is the main reason that 0.7.1 was released so + soon after 0.7.0.) + ** DEFGENERIC is now choosier about the methods it redefines, so that + reLOADing a previously-LOADed file containing DEFGENERICs does + the right thing now. Thus, the Lispy edit/reLOAD-a-little/test + cycle now works as it should. (thanks to Alexey Dejneka) + ** Bug 106 (types (COMPLEX FOO) where FOO is an obscure type) was + fixed by Christophe Rhodes. (He actually submitted this patch + months ago, and I delayed until after 0.7.0.) + ** Bug 111 (internal compiler confusion about runtime checks on + FUNCTION types) was fixed by Alexey Dejneka. +* Some internal cleanups (getting rid of variables which aren't + needed now that the byte interpreter is gone) caused the fasl + file format number to change again. + +changes in sbcl-0.7.2 relative to sbcl-0.7.1: + * incompatible change: The compiler is now less aggressive about + tail call optimization, doing it only when (> SPACE DEBUG) or + (> SPEED DEBUG). (This is an incompatible change because there are + programs which relied on the old CMU-CL-style behavior to optimize + away their unbounded recursion which will now die of stack overflow.) + * minor incompatible change: The default BYTES-CONSED-BETWEEN-GCS + for non-GENCGC systems has been increased to 20M (since that + seems much closer to the likely performance optimum for modern + systems than the old 4M value was) + * minor incompatible change: new larger values for *DEBUG-PRINT-LENGTH* + and *DEBUG-PRINT-LEVEL* + * SBCL runs on SPARC systems now. (thanks to Christophe Rhodes' port + of CMU CL's support for SPARC, and various endianness and other + SBCL portability fixes due to Christophe Rhodes and Dan Barlow) + * new syntactic sugar for the Unix command line: --load foo.bar is now + an alternate notation for --eval '(load "foo.bar")'. + * bug fixes: + ** The system now detects stack overflow and handles it gracefully, + at least for (OR (> SAFETY (MAX SPEED SPACE)) (= SAFETY 3)) + optimization settings. (This is a good thing in general, and + its introduction in this version should be particularly timely + for anyone whose code fails because of suppression of tail + recursion!) + ** The system now hunts for the C variable "environ" in a more + devious way, to avoid segfaults when the C library version differs + between compile time and run time. (thanks to Christophe Rhodes) + ** INTEGER-valued CATCH tags now work. (thanks to Alexey Dejneka, + and also to Christophe Rhodes for porting the fix to non-X86 CPUs) + ** The compiler no longer issues bogus style warnings for undefined + classes in the same source file as the DEFCLASSes which defined + them. (thanks to Stig E Sandoe for reporting and Martin Atzmueller + for fixing this) + ** fixes in CONDITION class precedence list for undefined function + errors (thanks to Alexei Dejneka) + ** *DEFAULT-PATHNAME-DEFAULTS* is used more consistently and + correctly. (thanks to Dan Barlow) + ** portability fixes aiming at bootstrapping under CLISP (thanks + to Dave McDonald and Christophe Rhodes) + ** FORMAT fixes (thanks to Robert Strandh and Dan Barlow) + ** fixes in type translation and and type inference (thanks to + Christophe Rhodes) + ** fixes to optimizer internal errors (thanks to Alexei Dejneka) + ** various fixes in the new ports (thanks to Dan Barlow) + * several changes related to debugging: + ** suppression of tail recursion, as noted above + ** stack overflow detection, as noted above + ** The default implementation of TRACE has changed. :ENCAPSULATE T + is now the default. (For some time encapsulation has been more + reliable than the breakpoint-based :ENCAPSULATE NIL + implementation, at least on X86 systems; and I just noticed that + encapsulation also seems closer to the spirit of the ANSI + specification.) + +changes in sbcl-0.7.3 relative to sbcl-0.7.2: + * ANSI's DEFINE-SYMBOL-MACRO is now supported. (thanks to Nathan + Froyd porting CMU CL code originally by Douglas Thomas Crosher) + * SBCL now runs on the PPC archtiecture under Linux. It actually did + this as of 0.7.1.45, but was left out of the previous news section + (thanks to Dan Barlow) + * SBCL now runs on the Solaris operating system on SPARC architectures + (thanks to Christophe Rhodes's port of the CMUCL runtime) + * cleanups to the runtime on SPARC, both Linux and Solaris, and for + gcc>=3 (thanks to Nathan Froyd and Ingvar Mattsson) + * SPARC backend cleanups, allowing builds of cores optimized for V8 + and V9 SPARCS, and also emission of code targeted to a particular + backend chosen at runtime (thanks to Christophe Rhodes and Raymond + Toy) + * SBCL is closer to bootstrapping under CLISP, thanks to various + fixes by Christophe Rhodes. + * The fasl file format has changed again, to allow the compiler's + INFO database to support symbol macros. + * The user manual (in doc/) is formatted into HTML more nicely. + (thanks to coreythomas) + * The system is smarter about SUBTYPEP relationships, especially + those involving NOT types (including types such as ATOM which are + represented internally using NOT types). Thus SUBTYPEP is less + likely to return (VALUES NIL NIL) in general, and in particular + bugs 58 and (the remaining bits of) bug 50 are fixed. (thanks to + Christophe Rhodes) + * The fasl file format has changed again, because the internal + representation of types now includes a new slot to support the new + SUBTYPEP-of-NOT-types logic. + * (not a change in the main branch of SBCL, but a related prototype + which can hopefully be merged into the main branch of SBCL in the + future:) Brian Spilsbury has produced a Unicode-enabled variant of + sbcl-0.7.0, available as a patch against sbcl-0.7.0 at + . + * Bug 151 fixed: GET-DISPATCH-MACRO-CHAR now returns NIL for undefined + dispatch macro character combinations. (thanks to Alexey Dejneka) + * Bugfix in PARSE-NAMESTRING: we now correctly parse unix namestrings + that superficially look like logical namestrings correctly. + * USER-HOMEDIR-PATHNAME now returns a (physical) pathname that SBCL + can deal with. + * Bugfix in DEFSTRUCT: BOA constructor lambda lists now accept (name + default supplied-p) for &optional and &key arguments. (thanks to + Martin Atzmueller) + +changes in sbcl-0.7.4 relative to sbcl-0.7.3: + * bug 147 fixed: The compiler preserves its block link/count + invariants more correctly now so that it doesn't crash. (thanks + to Alexey Dejneka) + * Dynamic loading of object files in OpenBSD is now supported. (thanks + to Pierre Mai) + * COMPILE now works correctly on macros. (thanks to Matthias Hoelzl) + * GET-MACRO-CHARACTER and SET-MACRO-CHARACTER now represent + no-value-for-this-character as NIL (as specified by ANSI). + * HOST-NAMESTRING on physical pathnames now returns a string that is + valid as a host argument to MERGE-PATHNAMES and to MAKE-PATHNAME. + (thanks to Christophe Rhodes) + * The Alpha port handles icache flushing more correctly. (thanks to + Dan Barlow) + * More progress has been made toward bootstrapping under CLISP. (thanks + to Christophe Rhodes) + * The fasl file format has changed again, because dynamic loading + on OpenBSD (which has non-ELF object files) motivated some cleanups + in the way that foreign symbols are transformed and passed around. + * minor incompatible change: The ASCII RUBOUT character, (CHAR-CODE 127), + is no longer treated as whitespace by the reader, but instead as + an ordinary character. Thus e.g. (READ-FROM-STRING "AB") returns + |AB|, instead of A as it used to. + +changes in sbcl-0.7.5 relative to sbcl-0.7.4: + * SBCL now builds with OpenMCL (version 0.12) as the + cross-compilation host; also, more progress has been made toward + bootstrapping under CLISP. + * SBCL now runs on the Tru64 (aka OSF/1) operating system on the + Alpha architecture. + * bug 158 fixed: The compiler can now deal with integer loop + increments different from 1; fixing this turned out also to fix + bug 164. + * bug 169 fixed: no more bogus warnings about using lexical bindings + despite the presence of perfectly good SPECIAL declarations (thanks + to David Lichteblau) + * bug 175 fixed: CHANGE-CLASS is now more ANSI-conforming, + accepting initargs. (thanks to Espen Johnsen and Pierre Mai) + * bug 179 fixed: DIRECTORY can now deal with filenames with pattern + characters in them. + * bug 180 fixed: Method combination specifications no longer ignore + the :MOST-SPECIFIC-LAST option. (thanks to Pierre Mai) + * bug fix: Structure type predicate functions now check their argument + count as they should. + * bug fix: Classes with :METACLASS STRUCTURE-CLASS now print + correctly. (thanks to Pierre Mai) + * minor incompatible change: The --noprogrammer option is deprecated + in favor of the new --disable-debugger option, which is very similar. + (The major difference is that it takes effect at a slightly different + time at startup, causing handling of errors in --sysinit and + --userinit files will be affected differently.) The + SB-EXT:DISABLE-DEBUGGER and SB-EXT:ENABLE-DEBUGGER functions have + been added to allow this functionality to be controlled from ordinary + Lisp code. (ENABLE-DEBUGGER should help people like the Debian + maintainers, who might want to run non-interactive scripts to + build SBCL cores which will later be used interactively.) + * minor incompatible change: The LOAD function no longer, when given + a wild pathname to load, loads all files matching that pathname. + Instead, an error of type FILE-ERROR is signalled. + +changes in sbcl-0.7.6 relative to sbcl-0.7.5: + * bug fix: Floating point exceptions are treated much more + consistently on the x86/Linux and PPC/Linux platforms. + * Array initialization with :INITIAL-ELEMENT is now much faster for + cases when the compiler cannot open code the array creation, but + does know what the UPGRADED-ARRAY-ELEMENT-TYPE will be. General + array accesses have also seen a speed increase. + * bug fix: LOAD :IF-DOES-NOT-EXIST NIL now works when file type is + specified. (This was at the root of some bad interactions between + SBCL and ILISP: thanks to Gregory Wright for diagnosing this and + reporting the bug.) + * bug fix: Internal error arguments for undefined functions are now + computed correctly on the PPC/Linux platform. + * bug fix: Bad &REST syntax is now checked correctly. (thanks to + Raymond Toy's patch for CMU CL) + * Support for the Solaris 9 operating environment has been included + (thanks to Daniel Merritt) + * A very ugly but hopefully complete draft of the missing FFI chapter + of the manual has been created by reformatting the corresponding + CMU CL manual chapter into (currently very ugly and incoherent) + DocBook and bringing it up to date for SBCL behavior. Thus, the + manual is now essentially complete, at least by my extreme + once-and-only-once standards, whereby it's acceptable to refer to + the doc strings of SB-EXT functions as the primary documentation. + * The fasl file version number has changed again, due to cleanup of + (user-invisible) bitrotted stuff. (E.g. *!INITIAL-FDEFN-OBJECTS* + is no longer a static symbol.) + +changes in sbcl-0.7.7 relative to sbcl-0.7.6: + * An alpha-quality port to the parisc architecture running Linux, + based on the old CMUCL backend, has been made. This, even more so + than the other backends, should be considered still a work in + progress; known problems include that the Linux kernel in 64-bit + mode does not propagate the correct sigcontext structure to + userspace, and consequently SBCL on a parisc64 kernel will not + work yet. + * fixed bug 189: The compiler now respects NOTINLINE declarations for + functions declared in FLET and LABELS. (I.e. "LET conversion" is + suppressed.) Also now that the compiler is looking at declarations + in the environment, it checks optimization declarations as well, + and suppresses inlining when (> DEBUG SPEED). + * More fixes have been made to treatment of floating point exception + treatment and other Unix signals. In particular, floating point + exceptions no longer cause Bus errors on the SPARC/Linux platform. + * The detection and handling of control stack exhaustion (infinite + or very deeply nested recursion) has changed. Stack exhaustion + detection is now done by write-protecting pages at the OS level + and applies at all optimization settings; when found, a + SB-KERNEL:CONTROL-STACK-EXHAUSTED condition (subclass of + STORAGE-CONDITION) is signalled, so stack exhaustion can no longer + be caught using IGNORE-ERRORS. + * Bugs 65, 70, and 109 fixed: The compiler now preserves invariants + correctly when transforming recursive LABELS functions to LETs. + (thanks to Alexey Dejneka) + * Bug 48a./b. fixed: SYMBOL-MACROLET now refuses to bind symbols + that are names of constants or global variables. + * Bug fix: DEFINE-ALIEN-ROUTINE now declaims the correct FTYPE for + alien routines with docstrings. + * Bug 184 fixed: Division of ratios by the integer 0 now signals an + error of type DIVISION-BY-ZERO. (thanks to Wolfhard Buss and + Raymond Toy) + * Bug fix: Errors in PARSE-INTEGER are now of type PARSE-ERROR. + (thanks to Eric Marsden) + * Bug fix: COERCE to (COMPLEX FLOAT) of rationals now returns an + object of type (COMPLEX FLOAT). (thanks to Wolfhard Buss) + * Bug fix: The SPARC backend can now compile functions involving + LOGAND and stack-allocated arguments. (thanks to Raymond Toy) + * Bug fix: We no longer segfault on passing a non-FILE-STREAM stream + to a functions expecting a PATHNAME-DESIGNATOR. + * Bug fix: DEFGENERIC now enforces the ANSI restrictions on its + lambda lists. (thanks to Alexey Dejneka) + * Bug fix: changed encoding of PCL's internal MAKE-INSTANCE + functions so that EXPORTing the name of the class doesn't cause + MAKE-INSTANCE functions from earlier DEFCLASSes to get lost (thanks + to Antonio Martinez for reporting this) + * Bug 192 fixed: The internal primitive DATA-VECTOR-REF can now be + constant-folded without failing an assertion. (thanks to Einar + Floystad Dorum for reporting this) + * Bugs 123 and 165 fixed: array specializations on as-yet-undefined + types are now dealt with more correctly by the compiler. + * Minor incompatible change: COMPILE-FILE-PATHNAME now merges its + OUTPUT-FILE argument with its INPUT-FILE argument, resulting in + behaviour analogous to RENAME-FILE. This puts its behaviour more + in line with ANSI's wording on COMPILE-FILE-PATHNAME. (thanks to + Marco Antinotti) + * The fasl file version number has changed again. (because of the + bug fix involving the names of PCL MAKE-INSTANCE functions) + +changes in sbcl-0.7.8 relative to sbcl-0.7.7: + * A beta-quality port to the mips architecture running Linux, + based on the old CMUCL backend, has been made. It has been tested + on a big-endian kernel, and works sufficiently well to be able to + rebuild itself; it has not been tested in little-endian mode. + * fixed an inconsistency between gencgc.c and purify.c which made + dumping/loading .core files unreliable + * fixed bug 120a: The compiler now deals correctly with IFs where + the consequent is the same as the alternative, instead of + misderiving the return type. (thanks to Alexey Dejneka) + * fixed bug 113: Logical pathnames are now dumpable (the logical + host is resolved at load-time, throwing an error if it is not + found). + * fixed bug 174: FORMAT's error message is slightly clearer when a + non-printing character is used in a format directive. + * fixed several bugs in compiler checking of type declarations, i.e. + violations of the Python "declarations are assertions" principle + (thanks to Alexey Dejneka) + * fixed several bugs in PCL's error checking (thanks to Gerd + Moellmann) + * fixed bug: printing of FILE-ERROR (thanks to Antonio + Martinez-Shotton) + * fixed bug in compilation of functions as first class values + (thanks to Antonio Martinez-Shotton) + * The compiler's handling TYPE-ERRORs which it can prove will + inevitably happen at runtime has been cleaned up and corrected + in several ways. (thanks to Alexey Dejneka) + * improved argument type checking for various basic arithmetic + operations (MAX, +, LOGXOR, etc.) which have had so much TLC + lavished on them in the past that they can be compiled in many + ways in different special cases + * fixed bug 181: compiler checks validity of user supplied type + specifiers + * cleaned up code flushing in optimization: Function calls which + should signal errors for safety purposes (e.g. which ANSI says + should signal errors when their arguments are of incorrect type) + are no longer optimized away. + * added new extension: SB-DEBUG:BACKTRACE-AS-LIST + * incremented fasl file version number, because changes in the + implementation of sequence functions like COERCE caused + internal utility functions like COERCE-TO-SIMPLE-VECTOR (used + in old inline expansions) to become undefined. (Actually these + changes were later undone, so we might very well be binary + compatible with 0.7.7 after all, but leaving the version number + incremented seemed like the simplest and most conservative + thing to do.) + +changes in sbcl-0.7.9 relative to sbcl-0.7.8: + * minor incompatible change: The runtime (the Unix executable named + "sbcl") is now much pickier about the .core files it will load. + Essentially it now requires .core files to descend from the same + build (not just the same sources or LISP-IMPLEMENTATION-VERSION) + as the runtime does. (The intent is to prevent the crashes which + can occur, and which can even be reported as mysterious failures, + when people patch the sources or change the build parameters + without changing LISP-IMPLEMENTATION-VERSION, then mix and match + sbcl and .core files.) + * fixed bug: VALUES-LIST is no longer optimized away. + * fixed bug 142: The FFI conversion of C string values to Lisp + string values no longer conses excessively. (thanks to Nathan + Froyd porting Raymond Toy's fix to CMU CL) + * began to systematize and improve MOP conformance in PCL (thanks to + Nathan Froyd, Gerd Moellman and Pierre Mai): + ** SLOT-DEFINITION-ALLOCATION now returns :CLASS, not the class + itself; + ** GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER is now implemented; + ** FINALIZE-INHERITANCE is now called on class finalization; + ** DOCUMENTATION and (SETF DOCUMENTATION) now have the correct + argument precedence order. + * fixed bug 202: The compiler no longer fails on functions whose + derived types contradict their declared type. + * DEFMACRO is implemented via EVAL-WHEN instead of IR1 translation, + so it can be non-toplevel. + * The fasl file version number has changed (because of the new + implementation of DEFMACRO). + * (mostly) fixed bugs 46b and 46c: sequence functions now check, in + safe code, that any length requirement by their type-specifier + argument is valid. The exceptions to this are described in bug + 213. + * fixed bugs 46h and 46i: TWO-WAY- and CONCATENATED-STREAM creation + functions now check the types of their inputs as required by ANSI. + * fixed bug 48c: SYMBOL-MACROLET signals PROGRAM-ERROR when an + introduced symbol is DECLAREd to be SPECIAL. + * fixed reading of (COMPLEX DOUBLE-FLOAT) literals from fasl files + * fixed bug: :COUNT argument to sequence functions may be negative + * fixed bug: body of DO-SYMBOLS may contain declarations + * fixed bug: PUSHNEW now evaluates its arguments from left to right + (reported by Paul F. Dietz, fixed by Gerd Moellman) + * fixed bug: PUSH, PUSHNEW and POP now evaluate a place given by a + symbol macro only once + * fixed printing of call frame when argument list is unavailable + * fixed bug: :ALLOW-OTHER-KEYS is an allowed keyword name + * compiler no longer signals WARNING on unknown keyword + :ALLOW-OTHER-KEYS + +changes in sbcl-0.7.10 relative to sbcl-0.7.9: + * Support for building SBCL for MIPS platforms running in + little-endian mode has now been checked in, and basic + functionality on said platforms verified. + * minor incompatible change: PCL now records the pathname of a file + in which methods and the like are defined, rather than its + truename. + * minor incompatible change: TRUENAME now considers the truename of + a file naming a directory to be the pathname with :DIRECTORY + component indicating that directory. + * minor incompatible change: a NAMED clause in the extended form of + LOOP no longer causes a BLOCK named NIL to surround the LOOP. The + reason for the previous behaviour is unclear. + * more systematization and improvement of CLOS and MOP conformance + in PCL (thanks to Gerd Moellman and Pierre Mai): + ** the standard ANSI CL generic function NO-NEXT-METHOD is now + implemented; + ** DEFINE-METHOD-COMBINATION no longer signals an error for + primary methods with no specializers; + ** the MOP generic function GENERIC-FUNCTION-DECLARATIONS is now + implemented; + ** the Readers for Class Metaobjects methods CLASS-DIRECT-SLOTS + and CLASS-DIRECT-DEFAULT-INITARGS have been implemented for + FORWARD-REFERENCED-CLASSes; error reporting on + CLASS-DEFAULT-INITARGS, CLASS-PRECEDENCE-LIST and CLASS-SLOTS + has been improved; + ** SXHASH on CLOS instances now uses a slot internal to the + instance to return different numbers on distinct instances, + while preserving the same return value through invocations of + CHANGE-CLASS; + ** DEFMETHOD signals errors when methods with longer incongruent + lambda lists are added to generic functions; + ** COMPUTE-CLASS-PRECEDENCE-LIST now has a method specialized on + CLASS, as specified in AMOP; + ** COMPUTE-SLOTS :AROUND now assigns locations sequentially based + on the order returned by the primary method for classes of + class STANDARD-CLASS; + ** DEFINE-METHOD-COMBINATION now works with the :ARGUMENTS option. + * fixed some bugs shown by Paul Dietz' test suite: + ** DOLIST puts its body in TAGBODY; + ** SET-EXCLUSIVE-OR sends arguments to :TEST function in the + correct order; + ** MULTIPLE-VALUE-SETQ evaluates side-effectful places before + value producing form; + ** if more variables are given to PROGV than values, extra + variables are bound and made to have no value; + ** NSUBSTITUTE on list arguments gets the right answer with + :FROM-END; + ** ELT signals an error of type TYPE-ERROR when the index argument + is not a valid sequence index; + ** LOOP signals (at macroexpansion time) an error of type + PROGRAM-ERROR when duplicate variable names are found; + ** LOOP supports DOWNTO and ABOVE properly; (thanks to Matthew Danish) + ** FUNCALL of special-operators now cause an error of type + UNDEFINED-FUNCTION; + ** PSETQ now works as required in the presence of side-effecting + symbol-macro places; + ** NCONC accepts any object as its last argument; + ** :COUNT argument to sequence functions may be BIGNUM; (thanks to + Gerd Moellman) + ** loop-for-as-package does not require a package to be explicitely + specified; + ** LOOP WITH now treats NIL in the d-var-spec correctly as an + ignored binding. + * fixed bug 166: compiler preserves "there is a way to go" + invariant when deleting code. + * fixed bug 172: macro lambda lists with required arguments after + &REST arguments now cause an error to be signalled. (thanks to + Matthew Danish) + * fixed Entomotomy PEEK-CHAR-WRONGLY-ECHOS-TO-ECHO-STREAM + bug. (thanks to Matthew Danish) + * fixed bug 225: STRING-STREAM is now a class. (reported by Gilbert + Baumann) + * fixed bug 136: CALL-NEXT-METHOD no longer gets confused when + arguments are lexically rebound. (thanks to Gerd Moellmann and + Pierre Mai) + * fixed bug 194: error messages are now more informative when there + is no primary method applicable in a call to a generic + function. (thanks to Gerd Moellmann) + * fixed bug in command line argument checking (thanks to Julian + Fondren) + * fixed bug in COUNT-IF, making it handle :FROM-END correctly + (thanks to Matthew Danish) + * incremented fasl file version number, because of the + SXHASH-related changes in the layout of CLOS data structures + +changes in sbcl-0.7.11 relative to sbcl-0.7.10: + * fixed bug 127: DEFSTRUCT now does not clobber old structure + accessors that are related by inheritance, as specified in the + :CONC-NAME section of the specification of DEFSTRUCT. (thanks to + Valtteri Vuorikoski) + * The compiler is now able to inline functions that were defined in + a complex lexical environment (e.g. inside a MACROLET). + * fixed bug in DESCRIBE, which now works on rank-0 arrays. (thanks + to Lutz Euler) + * Support for the upcoming FreeBSD-5.0 release has been included. + (thanks to Dag-Erling Smorgrav) + * fixed bug 219: DEFINE-COMPILER-MACRO no longer has compile-time + effect when it is not in a toplevel context. + * fixed bug 222: DEFMETHOD and SYMBOL-MACROLET interactions now + stand a better chance of being correct. (thanks to Gerd + Moellmann) + * fixed bug in COERCE, which now signals an error on coercing a + rational to a bounded real type which excludes the expected + answer. + * The compiler is now able to derive types more accurately from the + COERCE and COMPILE functions. + * fixed bug 223: functional binding is considered to be constant + only for symbols in the CL package. + * fixed bug 231: SETQ did not check the type of a variable being set + (reported by Robert E. Brown) + * A new optimization for MAKE-INSTANCE has been included, fixing + various bugs (including relating to :ALLOCATION :CLASS slots and + :DEFAULT-INITARGS over-eager evalueation). (thanks to Gerd + Moellmann) + * fixed some LOOP bugs revealed by Paul Dietz' test suite: + ** As required by ANSI, LOOP now disallows anonymous collection + clauses such as COLLECT I in conjunction with aggregate boolean + clauses such as THEREIS (= I 1); + ** LOOP now signals an error when any variable is reused in the + same loop (including the potentially useful construct analogous + to WITH A = 1 WITH A = (1+ A); + ** IT is only a special loop symbol within the first clause of a + conditional loop clause; + ** LOOP with a typed iteration variable over a hashtable now + signals a type error iff it should. + * fixed some other bugs revealed by Paul Dietz' test suite: + ** FILE-STREAM now names the class previously known as FD-STREAM; + ** in DEFSTRUCT, a bare :CONC-NAME (or a :CONC-NAME with no + argument) no longer signals an error; + ** likewise in DEFSTRUCT, :CONC-NAME NIL now respects the package + of the slot symbol, rather than using the current package + ((:CONC-NAME "") continues to intern the slot's name in the + current package); + * incremented fasl file version number, because of the incompatible + change to the DEFSTRUCT-DESCRIPTION structure, and again because + of the new implementation of DEFINE-COMPILER-MACRO. + +changes in sbcl-0.7.12 relative to sbcl-0.7.11: + * minor incompatible change: code processed by the "interpreter" or + EVAL now has a compilation optimization policy of (DEBUG 2) + (changed from (DEBUG 1)) to improve debuggability of interactive + development, and to allow the use of the debug RETURN command in + such code. + * an experimental implementation of the RETURN command for the + debugger has been included. (thanks to Frederik Kuivinen) + * fixed bug 62: constraints were not propagated into a loop. + * fixed bug in embedded calls of SORT (reported and investigated by + Wolfgang Jenkner). + * fixed some bugs revealed by Paul Dietz' test suite: + ** printing and reading of arrays with some dimensions having + length 0 (thanks to Gerd Moellmann); + ** BOA constructor with &AUX argument without a default value does + not cause a type error; + ** CONSTANTP now returns true for all self-evaluating objects. + +changes in sbcl-0.7.13 relative to sbcl-0.7.12: + * incompatible packaging change: in line with Unix convention, + SBCL now looks for its core file in /usr/{local/,}lib/sbcl/sbcl.core + if it's not in $SBCL_HOME. It also sets SBCL_HOME to match. + * REQUIRE and PROVIDE are now optionally capable of doing something + useful. See the documentation string for REQUIRE. + * infrastructure for a managed SBCL contrib system: contributed + modules in this release include: + ** the ASDF system definition facility; + ** an interface to the BSD Sockets API; + ** an ACL-like convenience interface to the repl; + (thanks to Kevin Rosenberg) + ** an implementation of ROTATE-BYTE, with efficient implementation + on x86 hardware; + * fixed a bug in LOG, so that LOG of a rational argument near 1 now + gives a closer approximation to the right answer than previously. + (thanks to Raymond Toy) + * fixed bug 157: TYPEP, SUBTYPEP, UPGRADED-ARRAY-ELEMENT-TYPE and + UPGRADED-COMPLEX-PART-TYPE now take (ignored, in all situations) + optional environment arguments, as required by ANSI. + * fixed bugs in other functions taking environment objects, allowing + calls with an explicit NIL environment argument to be compiled + without error. + * fixed bug 228: primary return values from + FUNCTION-LAMBDA-EXPRESSION are either NIL or suitable for input to + COMPILE or FUNCTION. + * fixed a bug in DEFSTRUCT: predicates for :NAMED structures with + :TYPE will no longer signal errors on innocuous objects. + * fixed bug 231b: SETQ is better at respecting type declarations in + the lexical environment. + * fixed a bug in DEFCLASS: classes named by symbols with no or + unprintable packages can now be defined. + * fixed a bug in RESTART-BIND: The :TEST-FUNCTION option had been + carelessly renamed to :TEST-FUN. (thanks to Robert E. Brown) + * fixed compiler failure related to checking types of functions. + (reported by Robert E. Brown) + * the compiler is now much more consistent in its error-checking + treatment of bounding index arguments to sequence functions: in + (SAFETY 3) code, errors will be signalled in almost all cases if + invalid sequence bounding indices are passed to functions defined + by ANSI to operate on sequences. + * fixed a bug in the build procedure: documentation of SBCL-specific + packages is now preserved and available in the final Lisp image. + * lifted FDEFINITION lookup out of loops in the implementation of + many list operations. (thanks to Robert E. Brown) + * fixed a bug in the reader: the #n# reader macro now works for + objects of type STANDARD-OBJECT. (reported by Tony Martinez) + * the compiler is now aware that SYMBOL-FUNCTION returns a FUNCTION + and that READ-DELIMITED-LIST returns a LIST. (thanks to Robert + E. Brown and Tony Martinez respectively) + * PCL is now smarter about SLOT-VALUE, (SETF SLOT-VALUE) and + SLOT-BOUNDP: in particular, it is now able to optimize them much + better, and is now not vulnerable to having packages renamed. + Furthermore, a compliance bug has been fixed: SLOT-MISSING is now + always called when a slot is not present in an instance. (thanks + to Gerd Moellmann) + * fixed a bug related to CONCATENATED-STREAMs: PEEK-CHAR will no + longer signal an error on unreading a character following EOF on + the previous constituent stream. (thanks to Tony Martinez) + * fixed some bugs revealed by Paul Dietz' test suite: + ** ARRAY-IN-BOUNDS-P now allows arbitrary integers as arguments, + not just nonnegative fixnums; + ** the logical bit-array operators such as BIT-AND now accept an + explicit NIL for their "opt-arg" argument (to indicate a + freshly-consed result bit-array); + ** ELT now signals an error on an invalid sequence index in safe + code; + ** the type system is now cleverer about negations of numeric + types, and consequently understands the BIGNUM and RATIO types + better; + ** the type system is now cleverer about the interaction between + INTEGER and RATIO types: while bugs still remain, many more + cases are accurately computed; + ** in TYPECASE, OTHERWISE now only introduces an otherwise-clause + if it is in the last clause; + ** CONSTANTLY now correctly returns a side-effect-free function in + all cases; + ** DECLARE is no longer treated as a special-operator; in + particular, SPECIAL-OPERATOR-P no longer returns T for DECLARE; + * incremented fasl file version number due to the change in the + DEFSTRUCT-SLOT-DESCRIPTION structure. + +changes in sbcl-0.7.14 relative to sbcl-0.7.13: + * 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; + * fixed CEILING optimization for a divisor of form 2^k. planned incompatible changes in 0.7.x: -* The debugger prompt sequence now goes "5]", "5[2]", "5[3]", etc. - as you get deeper into recursive calls to the debugger command loop, - instead of the old "5]", "5]]", "5]]]" sequence. (I was motivated - to do this when squabbles between ILISP and SBCL left me - very deeply nested in the debugger.) -* The default output representation for unprintable ASCII characters - which, unlike e.g. #\Newline, don't have names defined in the - ANSI Common Lisp standard, may change to their ASCII symbolic - names: #\Nul, #\Soh, #\Stx, etc. -* INTERNAL-TIME-UNITS-PER-SECOND might increase, e.g. to 1000. -* FASL file extensions change to ".fasl", instead of the various - CPU-dependent values (".x86f", ".axpf", etc.) inherited from CMU CL. -* MAYBE-INLINE will probably go away at some point, maybe 0.7.x, - maybe later, in favor of the ANSI-recommended idiom for making - a function optionally inline. -* When the profiling interface settles down, maybe in 0.7.x, maybe - later, it might impact TRACE. They both encapsulate functions, and - it's not clear yet how e.g. UNPROFILE will interact with TRACE - and UNTRACE. (This shouldn't matter, though, unless you are - using profiling. If you never profile anything, TRACE should - continue to behave as before.) -* The BYTE-COMPILE &KEY argument for COMPILE-FILE is deprecated, - since this behavior can be controlled by (DECLAIM (OPTIMIZE (SPEED 0))). - ("An ounce of orthogonality is worth a pound of features.") + * (not done yet, but planned:) When the profiling interface settles + down, maybe in 0.7.x, maybe later, it might impact TRACE. They both + encapsulate functions, and it's not clear yet how e.g. UNPROFILE + will interact with TRACE + and UNTRACE. (This shouldn't matter, though, unless you are + using profiling. If you never profile anything, TRACE should + continue to behave as before.) + * (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.