0.pre7.139:
[sbcl.git] / TODO
1 for 0.7.0:
2
3 * filed off the roughest edges (or, perhaps, at least hammered down the
4         protruding rusty nails and snipped off the trailing razor wire,
5         leaving some filing for later:-) from the monster
6         EVAL/EVAL-WHEN/%COMPILE/DEFUN/DEFSTRUCT cleanup:
7 * more renaming (esp. for global as opposed to lexical names):
8         ** reserved DO-FOO-style names for iteration macros
9         ** s/ARGUMENT/ARG/
10         ** perhaps s/DEF-FROB/DEF/ or s/DEF-FROB/DEFINE/
11         ** merged SB-C-CALL into SB-ALIEN
12 * Perhaps rename "cold" stuff (e.g. SB-COLD and src/cold/) to "boot".
13 * fixed CREDITS, since it's gone pretty stale
14 * reviewed NEWS
15 * pending patches and bug reports that go in (or else get handled
16         somehow, rejected/logged/whatever) before 0.7.0:
17 =======================================================================
18 for early 0.7.x:
19
20 * patches postponed until after 0.7.0:
21         ** CSR "rough patch to fix bug 106" 2001-10-28
22         ** Alexey Dejneka "bug 111" 2001-12-30
23 * building with CLISP (or explaining why not). This will likely involve
24         a rearrangement of the build system so that it never renames
25         the output from COMPILE-FILE, because CLISP's COMPILE-FILE
26         outputs two (!) files and as far as I can tell LOAD uses both
27         of them. Since I have other motivations for this rearrangement
28         besides CLISPiosyncrasies, I'm reasonably motivated to do it.
29 * urgent EVAL/EVAL-WHEN/%COMPILE/DEFUN/DEFSTRUCT cleanup:
30         ** made inlining DEFUN inside MACROLET work again
31         ** (also, while working on INLINE anyway, it should be easy
32                 to flush the old MAYBE-INLINE cruft entirely, 
33                 including e.g. on the man page)
34         ** fixed bug 137 (more)
35 * faster bootstrapping (both make.sh and slam.sh)
36         ** added mechanisms for automatically finding dead code, and
37                 used them to remove dead code
38         ** moved stuff from warm init into cold init where possible
39                 (so that slam.sh will run faster and also just because
40                 ideally everything would be in cold init)
41         ** profiled and tweaked
42 * more EVAL/EVAL-WHEN/%COMPILE/DEFUN/DEFSTRUCT cleanup:
43         ** made %COMPILE understand magicality of DEFUN FOO
44                 w.r.t. e.g. preexisting inlineness of FOO
45         ** used %COMPILE where COMPILE-TOP-LEVEL used to be used
46         ** removed now-redundant COMPILE-TOP-LEVEL and 
47                 FUNCTIONAL-KIND=:TOP-LEVEL stuff from the compiler
48         ** made FUNCTION-NAME logic work on closures, so that
49                 various public functions like CL:PACKAGEP which
50                 are now implemented as closures (because
51                 they're structure slot accessors) won't be so
52                 nasty in the debugger
53         ** %SLOT-ACCESSOR/%SLOT-ACCESSOR stuff can probably go away,
54                 since we inline expand all slot accessors into 
55                 %INSTANCE-REF and the optimizer knows all it needs
56                 to know about that.
57 * rewrote long-standing confusing error restarts for redefining
58         DEFSTRUCTs
59 * outstanding embarrassments
60         ** cut-and-pasted DEF-BOOLEAN-ATTRIBUTE (maybe easier to fix
61                 now that EVAL-WHEN does what it should..)
62         ** incomplete manual
63         ** :IGNORE-ERRORS-P cruft in stems-and-flags.lisp-expr
64         ** weird double-loading (first in GENESIS, then in warm init)
65                 of src/assembly/target/*.lisp stuff, and the associated
66                 weirdness of the half-baked state (compiler almost but
67                 not quite ready for prime time..) of the system after
68                 cold init
69 * fixups now feasible because of pre7 changes
70         ** ANSIfied DECLAIM INLINE stuff (deprecating MAYBE-INLINE)
71 * miscellaneous simple refactoring
72         * belated renaming:
73                 ** renamed %PRIMITIVE to %VOP
74         * These days ANSI C has inline functions, so..
75                 ** redid many cpp macros as inline functions: 
76                         HeaderValue, Pointerp, CEILING, ALIGNED_SIZE,
77                         GET_FREE_POINTER, SET_FREE_POINTER,
78                         GET_GC_TRIGGER, SET_GC_TRIGGER, GetBSP, SetBSP,
79                         os_trunc_foo(), os_round_up_foo()
80                 ** removed various avoid-evaluating-C-macro-arg-twice
81                         cruft
82 * added mechanisms for automatically finding dead symbols is
83         package-data.lisp-expr (i.e. those symbols not bound,
84         fbound, defined as types, or whatever), and used them
85         to remove dead symbols
86 * made system handle stack overflow safely unless SAFETY is dominated
87         by SPEED or SPACE
88 * Probably get rid of or at least rework the fdefinition/encapsulation
89         system so that (SYMBOL-FUNCTION 'FOO) = (FDEFINITION 'FOO).
90 =======================================================================
91 for 0.9:
92
93 * refactored in preparation for moving CLOS into cold init and merging
94         SB-PCL:FOO with CL:FOO (for FOO=CLASS, FOO=CLASS-OF, etc.)
95         ** systematized support for MOP (new regression tests, maybe
96                 new SB-MOP package..) to try to make sure things don't
97                 get mislaid in the upcoming CLOS restructuring
98         ** extracted type system from SB-KERNEL into new SB-TYPE
99                 package
100         ** reimplemented GENERIC-FUNCTION as a primitive object (or
101                 maybe made SB-MOP:FUNCALLABLE-STANDARD-OBJECT the
102                 primitive object, and then let GENERIC-FUNCTIONs
103                 inherit from that) instead of structures with
104                 :ALTERNATE-METACLASS and funcallableness. Now
105                 FUNCALLABLE-INSTANCE can go away. (And now the new
106                 funcallable primitive objects need to go into
107                 collections like *FUN-HEADER-WIDETAGS* where
108                 FUNCALLABLE-INSTANCE objects used to be.)
109         ** reimplemented CONDITIONs as primitive objects instead of 
110                 structures with :ALTERNATE-METACLASS. Now (between
111                 this and the change to GENERIC-FUNCTIONs)
112                 DEFSTRUCT :ALTERNATE-METACLASS can go away.
113         ** (maybe) Now INSTANCE_POINTER_LOWTAG can become just
114                 STRUCTURE_POINTER_LOWTAG, and the concept of
115                 SB-KERNEL:INSTANCE (including INSTANCEP, 
116                 (SPECIFIER-TYPE 'INSTANCE), etc.) can go away.
117 * moved CLOS into cold init, in order to allow CLOS to be used in the
118         implementation of the core system (e.g. the type system and the
119         compiler) and in order to support merger of CL:CLASS with 
120         SB-PCL:CLASS
121 * (maybe) eliminated warm init altogether in favor of cold init
122 * (maybe, especially if warm init can be eliminated) rationalized
123         the build process, fixing miscellaneous pre-0.5.0 stuff that's
124         transparently not the right thing
125         ** removed separate build directories, now just building in 
126                 place with .sbclcoldfasl extensions
127 * (maybe) more refactoring in preparation for merging SB-PCL:FOO
128         into CL:FOO: reimplemented type system OO dispatch
129         (!DEFINE-TYPE-METHOD, etc.) in terms of CLOS OO dispatch
130 * merged SB-PCL:FOO into CL:FOO (and similarly CLASS-OF, etc.)
131 * added some automatic tests for basic binary compatibility, in hopes
132         that it might be practical to maintain binary compatibility
133         between minor maintenance releases on the stable branch (but no
134         promises, sorry, since I've never tried to do this before, and 
135         have no idea how much of a pain this'll be)
136 ========================================================================
137 for 1.0 (fixes of lower priority which I'd nonetheless be embarrassed
138 to leave unfixed in 1.0):
139 * all too many BUGS entries and FIXMEs
140 =======================================================================
141 other priorities, no particular time:
142
143 * bug fixes, especially really annoying bugs (ANSI or not) and any
144         ANSI bugs (i.e. not just bugs in extras like the debugger or
145         "declarations are assertions", but violations of the standard)
146 * better communication with the outside world (scratching WHN's
147         personal itch): I don't want socket-level stuff so much as I
148         want RPC-level or higher (CORBA?) interfaces and (possibly
149         through RPC or CORBA) GUI support
150 =======================================================================
151 important but out of scope (for WHN, anyway: Patches from other people
152 are still welcome!) until after 1.0:
153         * DYNAMIC-EXTENT
154         * sadly deteriorated support for ANSI-style block compilation
155                 (static linking of DEFUNs within a single file or 
156                 WITH-COMPILATION-UNIT)
157         * various GC issues (exuberant cut-and-paste coding,
158                 possibly dangerously over-conservative handling
159                 of neighbors of function objects, general GC efficiency)
160         * package issues other than SB!TYPE, SB!MOP, and dead exported
161                 symbols
162         * Any systematic effort to fix compiler consistency checks is
163                 out of scope. (However, it still might be possible to
164                 determine that some or all of them are hopelessly stale
165                 and delete them.)
166 ===============================================================================
167 other known issues with no particular target date:
168
169 bugs listed on the man page
170
171 hundreds of FIXME notes in the sources from WHN
172
173 various other unfinished business from CMU CL and before, marked with 
174   "XX" or "XXX" or "###" or "***" or "???" or "pfw" or "@@@@" or "zzzzz"
175 or probably also other codes that I haven't noticed or have forgotten.
176
177 (Things marked as KLUDGE are in general things which are ugly or
178 confusing, but that, for whatever reason, may stay that way
179 indefinitely.)
180 =======================================================================
181 "There's nothing an agnostic can't do as long as he doesn't know
182 whether he believes in anything or not."
183   -- Monty Python.
184
185 "God grant me serenity to accept the code I cannot change, courage to
186 change the code I can, and wisdom to know the difference."
187   -- Erik Naggum
188
189 "Accumulation of half-understood design decisions eventually chokes a
190 program as a water weed chokes a canal. By refactoring you can ensure
191 that your full understanding of how the program should be designed is
192 always reflected in the program. As a water weed quickly spreads its
193 tendrils, partially understood design decisions quickly spread their
194 effects throughout your program. No one or two or even ten individual
195 actions will be enough to eradicate the problem."
196   -- Martin Fowler, in _Refactoring: Improving the Design of Existing
197      Code_, p. 360 
198
199 "I wish I didn't know now what I didn't know then."
200   -- Bob Seger