0.pre7.74:
[sbcl.git] / NEWS
diff --git a/NEWS b/NEWS
index 4c333e8..8c3bbd5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -692,47 +692,276 @@ changes in sbcl-0.6.12 relative to sbcl-0.6.11:
   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.
-* 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.)
-?? The --noprogrammer command line option is now supported. (Its
+  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 appropriate under the same
-  circumstances.)
+  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!)
-* 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
+* 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 new workaround to make the cross-compiler portable to CMU CL
-  again despite its non-ANSI EVAL-WHEN, thanks to Martin Atzmueller
-* new fasl file format version number (because of changes in byte
-  code opcodes and in internal representation of (OR ..) types)
+* A bug in READ-SEQUENCE for CONCATENATED-STREAM, and a gross
+  ANSI noncompliance in DEFMACRO &KEY argument parsing, have been
+  fixed thanks to Pierre Mai's CMU CL patches.
+* fixes to keep the system from overflowing internal counters when
+  it tries to use i/o buffers larger than 16M bytes
+* fixed bug 45a: Various internal functions required to support
+  complex special functions have been merged from CMU CL sources.
+  (When I was first setting up SBCL, I misunderstood a compile-time
+  conditional #-OLD-SPECFUN, and so accidentally deleted them.)
+* improved support for type intersection and union, fixing bug 12
+  (e.g., now (SUBTYPEP 'KEYWORD 'SYMBOL)=>T,T) and some other
+  more obscure bugs as well
+* some steps toward byte-compiling non-performance-critical
+  parts of the system, courtesy of patches from Martin Atzmueller
+* Christophe Rhodes has made some debian packages of sbcl at
+  <http://www-jcsu.jesus.cam.ac.uk/ftp/pub/debian/lisp>.
+  From his sbcl-devel e-mail of 2001-04-08 they're not completely
+  stable, but are nonetheless usable. When he's ready, I'd be happy
+  to add them to the SourceForge "File Releases" section. (And if
+  anyone wants to do RPMs or *BSD packages, they'd be welcome too.)
+* new fasl file format version number (because of changes in 
+  internal representation of (OR ..) types to accommodate the new
+  support for (AND ..) types, among other things)
+
+changes in sbcl-0.6.13 relative to sbcl-0.6.12:
+* a port to the Compaq/DEC Alpha CPU, thanks to Dan Barlow
+* Martin Atzmueller ported Tim Moore's marvellous CMU CL DISASSEMBLE
+  patch, so that DISASSEMBLE output is much nicer.
+* The code in the SB-PROFILE package now seems reasonably stable.
+  I still haven't decided what the final interface should look like
+  (I'd like PROFILE to interact cleanly with TRACE, since both
+  facilities use function encapsulation) but if you have a need
+  for profiling now, you can probably use it successfully with
+  the current CMU-CL-style interface.
+* Pathnames and *DEFAULT-DIRECTORY-DEFAULTS* are much more
+  ANSI-compliant, thanks to various fixes and tests from Dan Barlow.
+  Also, at Dan Barlow's suggestion, TRUENAME on a dangling symbolic
+  link now returns the dangling link itself, and for similar
+  reasons, TRUENAME on a cyclic symbolic link returns the cyclic
+  link itself. (In these cases the old code signalled an error and
+  looped endlessly, respectively.) Thus, DIRECTORY now works even
+  in the presence of dangling and cyclic symbolic links.
+* Compiler trace output (the :TRACE-FILE option to COMPILE-FILE)
+  is now a supported extension again, since the consensus on
+  sbcl-devel was that it can be useful for ordinary development
+  work, not just for debugging SBCL itself.
+* The default for SB-EXT:*DERIVE-FUNCTION-TYPES* has changed to
+  NIL, i.e. ANSI behavior, i.e. the compiler now recognizes
+  that currently-defined functions might be redefined later with 
+  different return types. 
+* Hash tables can be printed readably, as inspired by CMU CL code
+  of Eric Marsden and SBCL code of Martin Atzmueller.
+* better error handling in CLOS method combination, thanks to 
+  Martin Atzmueller porting Pierre Mai's CMU CL patches
+* more overflow fixes for >16Mbyte I/O buffers
+* A bug in READ has been fixed, so that now a single Ctrl-D
+  character suffices to cause end-of-file on character streams.
+  In particular, now you only need one Ctrl-D at the command
+  line (not two) to exit SBCL.
+* fixed bug 26: ARRAY-DISPLACEMENT now returns (VALUES NIL 0) for 
+  undisplaced arrays.
+* fixed bug 107 (reported as a CMU CL bug by Erik Naggum on 
+  comp.lang.lisp 2001-06-11): (WRITE #*101 :RADIX T :BASE 36) now
+  does the right thing.
+* The implementation of some type tests, especially for CONDITION
+  types, is now tidier and maybe faster, due to CMU CL code
+  originally by Douglas Crosher, ported by Martin Atzmueller.
+* Some math functions have been fixed, and there are new
+  optimizers for deriving the types of COERCE and ARRAY-ELEMENT-TYPE,
+  thanks to Raymond Toy's work on CMU CL, ported by Martin Atzmueller.
+* (There are also some new optimizers in contrib/*-extras.lisp. Those
+  aren't built into sbcl-0.6.13, but are a sneak preview of what's
+  likely to be built into sbcl-0.7.0.)
+* A bug in COPY-READTABLE was fixed. (Joao Cachopo's patch to CMU
+  CL, ported to SBCL by Martin Atzmueller)
+* DESCRIBE now gives more information in some cases. (Pierre Mai's
+  patch to CMU CL, ported to SBCL by Martin Atzmueller)
+* Martin Atzmueller and Bill Newman fixed some bugs in INSPECT.
+* There's a new slam.sh hack to shorten the edit/compile/debug
+  cycle for low-level changes to SBCL itself, and a new
+  :SB-AFTER-XC-CORE target feature to control the generation of
+  the after-xc.core file needed by slam.sh.
+* minor incompatible change: The ENTRY-POINTS &KEY argument to 
+  COMPILE-FILE is no longer supported, so that now every function
+  gets an entry point, so that block compilation looks a little
+  more like the plain vanilla ANSI section 3.2.2.3 scheme.
+* minor incompatible change: SB-EXT:GET-BYTES-CONSED now
+  returns the number of bytes consed since the system started,
+  rather than the number consed since the first time the function
+  was called. (The new definition parallels ANSI functions like
+  CL:GET-INTERNAL-RUN-TIME.)
+* minor incompatible change: The old CMU-CL-style DIRECTORY options,
+  i.e. :ALL, :FOLLOW-LINKS, and :CHECK-FOR-SUBDIRS, are no longer
+  supported. Now DIRECTORY always does the abstract Common-Lisp-y
+  thing, i.e. :ALL T :FOLLOW-LINKS T :CHECK-FOR-SUBDIRS T.
+* Fasl file version numbers are now independent of the target CPU,
+  since historically most system changes which required version
+  number changes have affected all CPUs equally. Similarly, 
+  the byte fasl file version is now equal to the ordinary
+  fasl file version.
+
+changes in sbcl-0.7.0 relative to sbcl-0.6.13:
+* incompatible change: The default fasl file extension has changed
+  to ".fasl", for all architectures. (No longer ".x86f" and ".axpf".) 
+* 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 
+  hopefully any remaining bugs will be simpler, less fundamental,
+  and more fixable then the bugs in the old IR1 interpreter code.
+* The IR1 interpreter, byte compiler, and byte interpreter are gone.
+  It's long been my plan to remove the IR1 interpreter while making
+  EVAL-WHEN ANSI-compliant. It turned out that a cascade of changes
+  caused by EVAL-WHEN ANSIness would have required fairly simple
+  changes to the byte compiler; except they turned out to be quite
+  difficult. This, plus the new familiarity with the byte compiler
+  in general that I picked up as I worked on this specific problem,
+  reduced my opinion of its maintainability enough that I deleted it 
+  instead of trying to fix it. 
+* The compiler, especially the IR1 phase of the compiler, has been
+  tweaked somewhat to support the new implementation of DEFUN and
+  of the static linking hack used for cold init. In particular,
+  the property of "is externally visible" is now orthogonal to
+  the property of "is optimized/specialized for being called
+  at LOAD time, with no arguments and no argument checking".
+  The old FUNCTIONAL-KIND=:TOP-LEVEL type code which
+  conflated these two properties has been replaced with the
+  FUNCTIONAL-HAS-EXTERNAL-REFERENCES-P flag. This has minor
+  beneficial consequences for the logic of #'CL:COMPILE and other
+  things. Like the rewrite of EVAL, it has also quite possibly 
+  introduced some new bugs, but since the new logic is simpler and
+  more orthogonal, hopefully it will be easier to clean up bugs
+  in the new code than it was in the old code.
+* The rewritten compiler is still a little unsteady on its feet.
+  In particular, the debugging information it produces is sometimes
+  broken, and the support for inlining FOO when you
+  (DECLAIM (INLINE FOO)) then do (DEFUN FOO ..) in a non-null
+  lexical environment has been temporarily weakened (because the
+  old clever code depended on correct debugging information).
+* 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.
+* (Because of the interaction between the two previous items --
+  occasional inlining problems and new inline expansions -- the
+  new FIND, POSITION, FIND-IF, and POSITION-IF code won't really
+  kick in properly until debugging information is straightened out
+  in some future version.)
+* 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.
+* 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.
+* Martin Atzmueller fixed several other bugs:
+  ** correct ERROR type for various file operations
+  ** removing dead code
+* Alexey Dejneka fixed many bugs, both 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
+  He also pointed out some bogus old entries in BUGS, and fixed 
+  a number of bugs which came into existence in the pre7 branch
+  (internal to the CVS repository), so that they never showed
+  up in release versions.
+* :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.
+?? minor incompatible change: 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.)
+?? minor incompatible change: The default output representation for
+  unprintable ASCII characters which, unlike e.g. #\Newline, don't
+  have names defined in the ANSI Common Lisp standard, is now based
+  on their ASCII symbolic names: #\Nul, #\Soh, #\Stx, etc.
+?? 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 external symbols like
+  SB-ALIEN:DEF-ALIEN-FUNCTION are also affected.
+* minor incompatible change: 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 (and
+  since people writing calls-to-C code aren't likely to be bothered
+  by implicit assumptions of static typing).
+* The value of INTERNAL-TIME-UNITS-PER-SECOND has been increased
+  from 100 to 1000.
+* 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 interpreter, EVAL, has been rewritten. Now it calls the
+  native compiler for the difficult cases, where it used to call
+  the old specialized IR1 interpreter code. 
+* 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.
+* lots of other 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 dozens of reasons,
+  some of which are apparent above.
 
 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 ILISP and SBCL got into arguments which left me
-  deeply nested in the debugger.)
-* 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.)
-* The fasl file extension may change, perhaps to ".fasl".
-* 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.
-* 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.)
+?? 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.