Initial revision
[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             The batch-related command line options for SBCL don't work
16         properly.
17             A small part of making them work properly is making sure that
18         verbose GC messages end up piped to error output.
19             Make sure that when the system dies due to an unhandled error
20         in batch mode, the error is printed successfully, whether
21         FINISH-OUTPUT or an extra newline or whatever is required.
22             Make sure that make.sh dies gracefully when one of the SBCLs
23         it's running dies with an error.
24 MUSING:
25             Actually, the ANSI *DEBUGGER-HOOK* variable might be a better
26         place to put the die-on-unhandled-error functionality.
27 FIX:
28         ??
29 -------------------------------------------------------------------------------
30 PROBLEM:
31             As long as I'm working on the batch-related command-line options,
32         it would be reasonable to add one more option to "do what I'd want",
33         testing standard input for TTY-ness and running in no-programmer
34         mode if so.
35 FIX:
36         ?? Do it.
37 -------------------------------------------------------------------------------
38 PROBLEM:
39             In order to make a well-behaved backtrace when a batch program
40         terminates abnormally, it should be limited in length.
41 FIX:
42         ?? Add a *DEBUG-BACKTRACE-COUNT* variable, initially set to 64,
43           to provide a default for the COUNT argument to BACKTRACE.
44 -------------------------------------------------------------------------------
45 PROBLEM:
46             I used CMU CL for years, and dozens of times I cursed the
47         inadequate breakpoint-based TRACE facility which doesn't work on
48         some functions, and I never realized that there's a wrapper-based
49         facility too until I was wading through the source code for SBCL.
50             Yes, I know I should have RTFM, but there is a lot of M..
51 FIX:
52         ?? possibility 1: Add error-handling code in ntrace.lisp to
53           catch failure to set breakpoints and retry using 
54           wrapper-based tracing.
55         ?? possibility 2: Add error-handling code in ntrace.lisp to
56           catch failure to catch failure to set breakpoints and output
57           a message suggesting retrying with wrapper-based breakpoints
58         ?? possibility 3: Fix the breakpoint-based TRACE facility so that
59           it always works.
60 -------------------------------------------------------------------------------
61 PROBLEM:
62             When cross-compiling host-byte-comp.lisp, I get bogus
63         warnings
64                 caught STYLE-WARNING:
65                   undefined function: %%DEFCONSTANT
66                 caught STYLE-WARNING:
67                   This function is undefined:
68                   %%DEFCONSTANT
69 MUSING:
70             The best way to clean this up would be as a side-effect of
71         a larger cleanup, making all the %%DEFFOO stuff use EVAL-WHEN
72         instead of IR1 magic.
73             There's probably some way to do it with a quick local hack too.
74 FIX:
75         ??
76 -------------------------------------------------------------------------------
77 PROBLEM:
78             My system of parallel build directories doesn't seem to add value.
79 FIX:
80         ?? Replace it with a system where fasl output files live in the 
81           same directories as the sources and have names a la
82           "foo.fasl-from-host and "foo.fasl-from-xc".
83 -------------------------------------------------------------------------------
84 PROBLEM:
85             It might be good to use the syntax (DEBUGGER-SPECIAL *PRINT-LEVEL*)
86         etc. to control the in-the-debug-context special variables. Then we 
87         wouldn't have to pick and choose which variables we shadow in the
88         debugger.
89             The shadowing values could also be made persistent between
90         debugger invocations, so that entering the debugger, doing
91         (SETF *PRINT-LEVEL* 2), and exiting the debugger would leave
92         (DEBUGGER-SPECIAL *PRINT-LEVEL*) set to 2, and upon reentry to the
93         debugger, *PRINT-LEVEL* would be set back to 2.
94 FIX:
95         ??
96 -------------------------------------------------------------------------------
97 PROBLEM:
98             The :SB-TEST target feature should do something.
99 FIX:
100         ??
101 -------------------------------------------------------------------------------
102 PROBLEM:
103             I still haven't cleaned up the cut-and-paste programming in 
104                 * DEF-BOOLEAN-ATTRIBUTE, DELETEF-IN, and PUSH-IN
105                 * SB!SYS:DEF!MACRO ASSEMBLE and SB!XC:DEFMACRO ASSEMBLE
106 FIX:
107         ??
108 -------------------------------------------------------------------------------
109 PROBLEM:
110             We be able to get rid of the IR1 interpreter, which would
111         not only get rid of all the code in *eval*.lisp, but also allow us to
112         reduce the number of special cases elsewhere in the system. (Try
113         grepping for 'interpret' sometime.:-) Making this usable might
114         require cleaning up %DEFSTRUCT, %DEFUN, etc. to use EVAL-WHEN
115         instead of IR1 transform magic, which would be a good
116         thing in itself, but might be a fair amount of work.)
117 FIX:
118         ?? Delete, delete, delete.
119 -------------------------------------------------------------------------------
120 PROBLEM:
121             The hashing code is new and should be tested.
122 FIX:
123         ?? Enable the existing test code.
124 -------------------------------------------------------------------------------
125 PROBLEM:
126             My ad hoc system of revision control is looking pretty clunky,
127         and I've pretty much stopped doing stuff to confuse CVS (like moving
128         directories around).
129 FIX:
130         ?? Check into CVS. 
131         ?? Make sure that the tags in FILE-COMMENTs expand correctly.
132         ?? See about automatically propagating version information 
133            from CVS into the runtime.c banner message and the 
134            LISP-IMPLEMENTATION-VERSION string.
135 ===============================================================================
136 other known issues with no particular target date:
137
138 user manual including, at a minimum, updated versions of the
139 CMU CL user manual information on the compiler and the alien
140 interface
141
142 bugs listed on the man page
143
144 more regression tests
145
146 various bugs fixed in CMUCL since this code was forked off of it
147 ca. 19980801, since most of these haven't been fixed yet in SBCL
148
149 byte compilation of appropriate parts of the system, so that the
150 system core isn't so big
151
152 uninterning needed-only-at-init-time stuff after init is complete,
153 so that the system core isn't so big
154
155 Search for unused external symbols (ones which are not bound, fbound,
156 types, or whatever, and also have no other uses as e.g. flags) and
157 delete them. This should make the system core a little smaller, but
158 is mostly useful just to make the source code smaller and simpler.
159
160 The eventual plan is for SBCL to bootstrap itself in two phases. In
161 the first phase, the cross-compilation host is any old ANSI Common
162 Lisp (not necessarily SBCL) and the cross-compiler won't handle some
163 optimizations because the code it uses to implement them is not
164 portable. In the second phase, the cross-compilation host will be
165 required to be a compatible version of SBCL, and the cross-compiler
166 will take advantage of that to implement all optimizations. The
167 current version of SBCL only knows how to do the first of those two
168 phases, with a fully-portable cross-compiler, so some optimizations
169 are not done. Probably the most important consequence of this is that
170 because the fully-portable cross-compiler isn't very smart about
171 dealing with immediate values which are of specialized array type
172 (e.g. (SIMPLE-ARRAY (UNSIGNED-BYTE 4) 1)) the system sometimes has to
173 use unnecessarily-general array types internally.
174
175 adding new FOPs to provide something like CMU CL's FOP-SYMBOL-SAVE and
176 FOP-SMALL-SYMBOL-SAVE functionality, so that fasl files will be more
177 compact. (FOP-SYMBOL-SAVE used *PACKAGE*, which was concise but allowed
178 obscure bugs. Something like FOP-LAST-PACKAGE-SYMBOL-SAVE could have
179 much of the same conciseness advantage without the bugs.)
180
181 hundreds of FIXME notes in the sources from WHN
182
183 various other unfinished business from CMU CL and before, marked with 
184   "XX" or "XXX" or "###" or "***" or "???" or "pfw" or "@@@@" or "zzzzz"
185 or probably also other codes that I haven't noticed or have forgotten.
186
187 (Things marked as KLUDGE are in general things which are ugly or
188 confusing, but that, for whatever reason, may stay that way
189 indefinitely.)