0.6.13:
[sbcl.git] / TODO
1     Accumulation of half-understood design decisions eventually
2     chokes a program as a water weed chokes a canal. By refactoring
3     you can ensure that your full understanding of how the program
4     should be designed is always reflected in the program. As a
5     water weed quickly spreads its tendrils, partially understood
6     design decisions quickly spread their effects throughout your
7     program. No one or two or even ten individual actions will be
8     enough to eradicate the problem.
9        -- Martin Fowler, _Refactoring: Improving the Design
10           of Existing Code_, p. 360 
11 ===============================================================================
12 some things that I'd like to do in 0.6.x, in no particular order:
13 -------------------------------------------------------------------------------
14 PROBLEM:
15             As long as I'm working on the batch-related command-line options,
16         it would be reasonable to add one more option to "do what I'd want",
17         testing standard input for non-TTY-ness and running in no-programmer
18         mode if so.
19 FIX:
20         ?? Do it.
21 -------------------------------------------------------------------------------
22 PROBLEM:
23             I used CMU CL for years, and dozens of times I cursed the
24         inadequate breakpoint-based TRACE facility which doesn't work on
25         some functions, and I never realized that there's a wrapper-based
26         facility too until I was wading through the source code for SBCL.
27             Yes, I know I should have RTFM, but there is a lot of M..
28             (By the way, it would also be nice to have tracing behave
29         better with generic functions. TRACEing a generic function probably
30         shouldn't prevent DEFMETHOD from being used to redefine its
31         methods, and should perhaps trace each of its methods as well
32         as the generic function itself.)
33 FIX:
34         ?? possibility 1: Add error-handling code in ntrace.lisp to
35           catch failure to set breakpoints and retry using 
36           wrapper-based tracing.
37         ?? possibility 2: Add error-handling code in ntrace.lisp to
38           catch failure to catch failure to set breakpoints and output
39           a message suggesting retrying with wrapper-based breakpoints
40         ?? possibility 3: Fix the breakpoint-based TRACE facility so that
41           it always works.
42 -------------------------------------------------------------------------------
43 PROBLEM:
44             My system of parallel build directories seems to add
45         complexity without adding value.
46 FIX:
47         ?? Replace it with a system where fasl output files live in the 
48           same directories as the sources and have names a la
49           "foo.fasl-from-host and "foo.fasl-from-xc".
50         ?? (Perhaps something else will be required in order to port
51         to Microsoft Windows, since its filesystem doesn't have
52         symbolic links.)
53 -------------------------------------------------------------------------------
54 PROBLEM:
55             It might be good to use the syntax (DEBUGGER-SPECIAL *PRINT-LEVEL*)
56         etc. to control the in-the-debug-context special variables. Then we 
57         wouldn't have to pick and choose which variables we shadow in the
58         debugger.
59             The shadowing values could also be made persistent between
60         debugger invocations, so that entering the debugger, doing
61         (SETF *PRINT-LEVEL* 2), and exiting the debugger would leave
62         (DEBUGGER-SPECIAL *PRINT-LEVEL*) set to 2, and upon reentry to the
63         debugger, *PRINT-LEVEL* would be set back to 2.
64 FIX:
65         ??
66 -------------------------------------------------------------------------------
67 PROBLEM:
68             I still haven't cleaned up the cut-and-paste programming in 
69                 * DEF-BOOLEAN-ATTRIBUTE, DELETEF-IN, and PUSH-IN
70                 * SB!SYS:DEF!MACRO ASSEMBLE and SB!XC:DEFMACRO ASSEMBLE
71 FIX:
72         ??
73 -------------------------------------------------------------------------------
74 PROBLEM:
75             We be able to get rid of the IR1 interpreter, which would
76         not only get rid of all the code in *eval*.lisp, but also allow us to
77         reduce the number of special cases elsewhere in the system. (Try
78         grepping for 'interpret' sometime.:-) Making this usable might
79         require cleaning up %DEFSTRUCT, %DEFUN, etc. to use EVAL-WHEN
80         instead of IR1 transform magic, which would be a good
81         thing in itself, but might be a fair amount of work.)
82 FIX:
83         ?? Delete, delete, delete.
84 ===============================================================================
85 other known issues with no particular target date:
86
87 bugs listed on the man page
88
89 more regression tests
90
91 byte compilation of appropriate parts of the system, so that the
92 system core isn't so big
93
94 Search for unused external symbols (ones which are not bound, fbound,
95 types, or whatever, and also have no other uses as e.g. flags) and
96 delete them. This should make the system core a little smaller, but
97 is mostly useful just to make the source code smaller and simpler.
98
99 adding new FOPs to provide something like CMU CL's FOP-SYMBOL-SAVE and
100 FOP-SMALL-SYMBOL-SAVE functionality, so that fasl files will be more
101 compact. (FOP-SYMBOL-SAVE used *PACKAGE*, which was concise but allowed
102 obscure bugs. Something like FOP-LAST-PACKAGE-SYMBOL-SAVE could have
103 much of the same conciseness advantage without the bugs.)
104
105 hundreds of FIXME notes in the sources from WHN
106
107 various other unfinished business from CMU CL and before, marked with 
108   "XX" or "XXX" or "###" or "***" or "???" or "pfw" or "@@@@" or "zzzzz"
109 or probably also other codes that I haven't noticed or have forgotten.
110
111 (Things marked as KLUDGE are in general things which are ugly or
112 confusing, but that, for whatever reason, may stay that way
113 indefinitely.)