0.6.12.13:
[sbcl.git] / BUGS
diff --git a/BUGS b/BUGS
index ad30c7b..e728c3e 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -118,33 +118,6 @@ WORKAROUND:
          (during macroexpansion of IN-PACKAGE,
          during macroexpansion of DEFFOO)
 
-14:
-  The ANSI syntax for non-STANDARD method combination types in CLOS is
-       (DEFGENERIC FOO (X) (:METHOD-COMBINATION PROGN))
-       (DEFMETHOD FOO PROGN ((X BAR)) (PRINT 'NUMBER))
-  If you mess this up, omitting the PROGN qualifier in in DEFMETHOD,
-       (DEFGENERIC FOO (X) (:METHOD-COMBINATION PROGN))
-       (DEFMETHOD FOO ((X BAR)) (PRINT 'NUMBER))
-  the error mesage is not easy to understand:
-          INVALID-METHOD-ERROR was called outside the dynamic scope
-       of a method combination function (inside the body of
-       DEFINE-METHOD-COMBINATION or a method on the generic
-       function COMPUTE-EFFECTIVE-METHOD).
-  It would be better if it were more informative, a la
-          The method combination type for this method (STANDARD) does
-       not match the method combination type for the generic function
-       (PROGN).
-  Also, after you make the mistake of omitting the PROGN qualifier
-  on a DEFMETHOD, doing a new DEFMETHOD with the correct qualifier
-  no longer works:
-       (DEFMETHOD FOO PROGN ((X BAR)) (PRINT 'NUMBER))
-  gives
-          INVALID-METHOD-ERROR was called outside the dynamic scope
-       of a method combination function (inside the body of
-       DEFINE-METHOD-COMBINATION or a method on the generic
-       function COMPUTE-EFFECTIVE-METHOD).
-  This is not very helpful..
-
 15:
   (SUBTYPEP '(FUNCTION (T BOOLEAN) NIL)
             '(FUNCTION (FIXNUM FIXNUM) NIL)) => T, T
@@ -532,6 +505,16 @@ Error in function C::GET-LAMBDA-TO-COMPILE:
   or query the current working directory (a la Unix "chdir" and "pwd"),
   which is functionality that ILISP needs (and currently gets with low-level
   hacks).
+    When this is fixed, probably the more-or-less-parallel Unix-level
+  hacks
+       DEFAULT-DIRECTORY
+       %SET-DEFAULT-DIRECTORY
+       etc.?
+  should go away. Also we need to figure out what's the proper way to 
+  deal with the interaction of users assigning new values to
+  *DEFAULT-PATHNAME-DEFAULTS* and cores being saved and restored.
+  (Perhaps just make restoring from a save always overwrite the old
+  value with the new Unix-level default directory?)
 
 60:
   The debugger LIST-LOCATIONS command doesn't work properly.
@@ -890,17 +873,72 @@ Error in function C::GET-LAMBDA-TO-COMPILE:
 
 96:
   The TRACE facility can't be used on some kinds of functions.
-  Basically, the breakpoint facility wasn incompletely implemented
-  in the X86 port of CMU CL, and we haven't fixed it in SBCL.
-
-97:
-  FRESH-LINE doesn't seem to work properly within pretty-printed
-  output. E.g. 
-    "~@<unhandled CONDITION (of type ~S): ~2I~_~A~:>~2%"
-  called on a CONDITION whose printer does
-    "~&~@<error in function ~S: ~3I~:_~?~:>"
-  gives two newlines between "unhandled CONDITION" and "error", when
-  (it at least seems as though) correct behavior would be to give one.
+  (Basically, the breakpoint facility was incompletely implemented
+  in the X86 port of CMU CL, and hasn't been fixed in SBCL.)
+
+98:
+  In sbcl-0.6.11.41 (and in all earlier SBCL, and in CMU
+  CL), out-of-line structure slot setters are horribly inefficient
+  whenever the type of the slot is declared, because out-of-line
+  structure slot setters are implemented as closures to save space,
+  so the compiler doesn't compile the type test into code, but
+  instead just saves the type in a lexical closure and interprets it
+  at runtime.
+    A proper solution involves deciding whether it's really worth
+  saving space by implementing structure slot accessors as closures.
+  (If it's not worth it, the problem vanishes automatically. If it
+  is worth it, there are hacks we could use to force type tests to
+  be compiled anyway, and even shared. E.g. we could implement
+  an EQUAL hash table mapping from types to compiled type tests, 
+  and save the appropriate compiled type test as part of each lexical
+  closure; or we could make the lexical closures be placeholders
+  which overwrite their old definition as a lexical closure with
+  a new compiled definition the first time that they're called.)
+    As a workaround for the problem, #'(SETF FOO) expressions can
+  be replaced with (EFFICIENT-SETF-FUNCTION FOO), where
+(defmacro efficient-setf-function (place-function-name)
+  (or #+sbcl (and (sb-impl::info :function :accessor-for place-function-name)
+                 ;; a workaround for the problem, encouraging the
+                 ;; inline expansion of the structure accessor, so
+                 ;; that the compiler can optimize its type test
+                 (let ((new-value (gensym "NEW-VALUE-"))
+                        (structure-value (gensym "STRUCTURE-VALUE-")))
+                   `(lambda (,new-value ,structure-value)
+                      (setf (,place-function-name ,structure-value)
+                            ,new-value))))
+      ;; no problem, can just use the ordinary expansion
+      `(function (setf ,place-function-name))))
+
+99:
+  DESCRIBE interacts poorly with *PRINT-CIRCLE*, e.g. the output from 
+    (let ((*print-circle* t)) (describe (make-hash-table)))
+  is weird,
+    #<HASH-TABLE :TEST EQL :COUNT 0 {90BBFC5}> is an . (EQL)
+    Its SIZE is 16.
+    Its REHASH-SIZE is 1.5. Its REHASH-THRESHOLD is . (1.0)
+    It holds 0 key/value pairs.
+  where the ". (EQL)" and ". (1.0)" substrings are screwups.
+  (This is likely a pretty-printer problem which happens to
+  be exercised by DESCRIBE, not actually a DESCRIBE problem.)
+
+100:
+  There's apparently a bug in CEILING optimization which caused 
+  Douglas Crosher to patch the CMU CL version. Martin Atzmueller
+  applied the patches to SBCL and they didn't seem to cause problems
+  (as reported sbcl-devel 2001-05-04). However, since the patches
+  modify nontrivial code which was apparently written incorrectly
+  the first time around, until regression tests are written I'm not 
+  comfortable merging the patches in the CVS version of SBCL.
+
+101:
+  The error message for calls to structure accessors with the
+  wrong number of arguments is confusing and of the wrong
+  condition class (TYPE-ERROR instead of PROGRAM-ERROR):
+    * (defstruct foo x y)
+    * (foo-x)
+    debugger invoked on condition of type SIMPLE-TYPE-ERROR:
+    Structure for accessor FOO-X is not a FOO:
+    301988783
 
 
 KNOWN BUGS RELATED TO THE IR1 INTERPRETER