Check functional arguments argcounts with multiple uses.
[sbcl.git] / TODO
blob1c88ea5e702f74d79bfe9d88c26aef7508efd75a
1 SBCL TODO
2 =========
4      "There's nothing an agnostic can't do as long as he doesn't know
5      whether he believes in anything or not."
6        -- Monty Python.
8      "God grant me serenity to accept the code I cannot change, courage
9      to change the code I can, and wisdom to know the difference."
10        -- Erik Naggum
12      "Accumulation of half-understood design decisions eventually
13      chokes a program as a water weed chokes a canal. By refactoring
14      you can ensure that your full understanding of how the program
15      should be designed is always reflected in the program. As a water
16      weed quickly spreads its tendrils, partially understood design
17      decisions quickly spread their effects throughout your program. No
18      one or two or even ten individual actions will be enough to
19      eradicate the problem."
20        -- Martin Fowler, in _Refactoring: Improving the Design of Existing
21           Code_, p. 360
23      "I wish I didn't know now what I didn't know then."
24        -- Bob Seger
26   This files is maintained as part of the SBCL distribution, and
27   describes flying pies and moons on sticks that SBCL developers dream
28   about. The items are in no particular order.
30   The omission of an item is no guarantee that no-one would like it,
31   just like the inclusion of an item is no guarantee that someone is
32   actively working on it.
34   In addition to this file, there is the BUGS file, and there are also
35   hundreds of FIXME notes in the sources. (Things marked as KLUDGE are
36   in general things which are ugly or confusing, but that, for
37   whatever reason, may stay that way indefinitely.)
39 THREADING INTERFACE
41   SB-THREAD has some problems: recursivity of a mutex should probably
42   be a feature of the mutex, and not of the lexical location. Thread
43   local variables are needed. Sessions and sharing the terminal need
44   to be thought about.
46 PEEPHOLE OPTIMIZER
48   Have you ever read SBCL disassembly?
50 FINISHING EXTERNAL FORMATS
52   Byte order marks. Newline conventions. A way to specify an external
53   format without needing to duplicate code. Fixing the inefficiencies.
55 TIMEOUTS
57   Asyncronous unwinds suck horribly, but to implement reliable systems
58   one simply needs timeouts. These should probably be local, since
59   otherwise they effectively become asynchronous unwinds. Basically,
60   for any potentially blocking operation there should be a :TIMEOUT
61   arguent (or a version of the operation that accepts the argument).
63 ADVICE/FWRAP
65   SBCL has an internal function encapsulation mechanism, and is able to
66   install breakpoint to function start/end -- this is used to implement
67   the instrumentation based profiler and tracing. It would be good to
68   have this as an exported interface, and it would be good if the
69   SYMBOL-FUNCTION / FDEFINITION confusion was fixed: currently the
70   latter returns the underlying definition, whereas the first returns
71   the encapsulation.
73 POLICY MADNESS
75   The interactions between various optimization policies are far from
76   obvious. Someone should figure out how to make this better, and fix
77   it. One option would be to have just a few (eg. DEBUG, SMALL,
78   FAST-SAFE, FAST-UNSAFE) "dominant" policies, and expose the rest
79   as separately declarable optimization toggles.
81   INHIBIT-WARNINGS really needs to go away.
83 WINDOWS
85   Needs love.
87 DARWIN
89   Needs love, particularly threads and exceptions/signals.
91 DRAGONFLY
92   Multithreading does not work. Possibly because of bug in mmap/munmap.
94 MISC CLEANUPS
96   These need to be taken a good look at -- it might be that some of them
97   are already done, or otherwise no longer relevant.)
99    * EVAL/EVAL-WHEN/%COMPILE/DEFUN/DEFSTRUCT cleanups:
100         ** make %COMPILE understand magicality of DEFUN FOO
101                 w.r.t. e.g. preexisting inlineness of FOO
102         ** use %COMPILE where COMPILE-TOP-LEVEL used to be used
103         ** remove redundant COMPILE-TOP-LEVEL and
104                 FUNCTIONAL-KIND=:TOP-LEVEL stuff from the compiler
105    * miscellaneous simple refactoring
106         * belated renaming:
107                 ** rename %PRIMITIVE to %VOP
108                 ** A few hundred things named FN should be named FUN
109         * These days ANSI C has inline functions, so..
110                 ** redo many cpp macros as inline functions:
111                         HeaderValue, Pointerp, CEILING, ALIGNED_SIZE,
112                         GET_FREE_POINTER, SET_FREE_POINTER,
113                         GET_GC_TRIGGER, SET_GC_TRIGGER, GetBSP, SetBSP,
114                         os_trunc_foo(), os_round_up_foo()
115                 ** remove various avoid-evaluating-C-macro-arg-twice
116                         cruft
117   * Some work on conditions emitted by the system
118         ** eliminate COMPILER-WARN and COMPILER-STYLE-WARN, which
119                 were simply limited versions of WARN and STYLE-WARN.
120         ** eliminate use of INHIBIT-WARNINGS by code emitted by the
121                 system from user code.
122         ** cause use of INHIBIT-WARNINGS to signal a STYLE-WARNING.
123         ** eliminate use of INHIBIT-WARNINGS within the system
124         ** deprecate INHIBIT-WARNINGS, causing its use to signal a
125                 full WARNING.
126         ** begin work on developing a class hierarchy of conditions
127                 along semantic lines.
129 PCL INTEGRATION
131   AKA CLOS in cold init.
133 HIGH LEVEL SOCKET INTERFACE
135   Something slightly above the level of BSD sockets would be nice.
137 RPC INTERFACE
139   For talking with other processes.
141 (MOSTLY) PARALLEL GC
143   Several algorithms exist, even one would be nice.
145 INCREMENTAL GC
147   For those who need it.