source: project/chicken/trunk/TODO @ 12630

Last change on this file since 12630 was 12630, checked in by felix winkelmann, 11 years ago

various trivial fixes

File size: 11.5 KB
Line 
1TODO for trunk                                                          -*- Outline -*-
2
3
4* bugs
5
6** compiler
7*** pre-optimization
8**** changes call-sites and makes them invalid for later pre-optimization
9*** check profiling (-profile vs. profile-declaration)
10**** this doesn't always seem to work, in particular with library units
11**** ##sys#finish-profile should always be written
12     is it in `exit'?
13
14** expander
15*** expansion of r5rs_pitfall 4.2 incorrect
16    possibly due to a non-aliased implicit "begin" somewhere
17*** dirty-macros.scm loops when using `defile'
18    possibly due to unrenamed special forms
19*** slow
20    compiling dynamic.scm with profile-hacked expand:
21
22    procedure                       calls  seconds  average  percent
23    ----------------------------------------------------------------
24    ##sys#expand                     4659    0.276    0.000  100.000
25    ##sys#expand-0                   5574    0.228    0.000   82.608
26    lookup                          15878    0.144    0.000   52.173
27    ##sys#check-syntax               3328    0.128    0.000   46.376
28    body1099                         3328    0.080    0.000   28.985
29    ##sys#canonicalize-body           462    0.044    0.000   15.942
30    ##sys#alias-global-hook          2388    0.024    0.000    8.695
31    def-culprit1101                   683    0.020    0.000    7.246
32    def-se1102                        683    0.016    0.000    5.797
33    macro-alias                       958    0.012    0.000    4.347
34    macro?                            248    0.008    0.000    2.898
35    body187                           403    0.004    0.000    1.449
36    ##sys#strip-syntax                403    0.004    0.000    1.449
37    def-alias190                      401    0.004    0.000    1.449
38    def-se189                         400    0.004    0.000    1.449
39    ##sys#extended-lambda-list?       672    0.000    0.000    0.000
40    ##sys#register-export             229    0.000    0.000    0.000
41    ##sys#extend-macro-environment     60    0.000    0.000    0.000
42    ##sys#macro-subset                  2    0.000    0.000    0.000
43    process-command-line                1    0.000    0.000    0.000
44
45    wrapped into a module exporting `*':
46
47    procedure                        calls  seconds  average  percent
48    -----------------------------------------------------------------
49    ##sys#expand-0                    5357    0.564    0.000  100.000
50    ##sys#expand                      4440    0.556    0.000   98.581
51    lookup                           15232    0.432    0.000   76.595
52    ##sys#check-syntax                3105    0.236    0.000   41.843
53    ##sys#canonicalize-body            462    0.220    0.000   39.007
54    body1099                          3105    0.176    0.000   31.205
55    ##sys#alias-global-hook           1463    0.140    0.000   24.822
56    ##sys#register-undefined          1009    0.052    0.000    9.219
57    macro-alias                        963    0.052    0.000    9.219
58    ##sys#module-rename               1715    0.048    0.000    8.510
59    def-culprit1101                    685    0.044    0.000    7.801
60    module-undefined-list             1239    0.040    0.000    7.092
61    ##sys#register-export              229    0.028    0.000    4.964
62    def-se1102                         685    0.024    0.000    4.255
63    ##sys#expand-import                  1    0.024    0.024    4.255
64    module-name                       1488    0.016    0.000    2.836
65    macro?                             248    0.016    0.000    2.836
66    ##sys#strip-syntax                 407    0.012    0.000    2.127
67    body187                            407    0.008    0.000    1.418
68    def-alias190                       405    0.008    0.000    1.418
69    def-se189                          404    0.008    0.000    1.418
70    set-module-exist-list!             229    0.008    0.000    1.418
71    ##sys#finalize-module                1    0.008    0.008    1.418
72    ##sys#extended-lambda-list?        672    0.004    0.000    0.709
73    module-export-list                 231    0.004    0.000    0.709
74    check-for-redef                    229    0.004    0.000    0.709
75    ##sys#mark-imported-symbols          3    0.004    0.001    0.709
76    merge-se                             1    0.004    0.004    0.709
77    set-module-undefined-list!         304    0.000    0.000    0.000
78    module-defined-list                231    0.000    0.000    0.000
79    module-exist-list                  230    0.000    0.000    0.000
80    set-module-defined-list!           229    0.000    0.000    0.000
81    ##sys#extend-macro-environment      60    0.000    0.000    0.000
82    ##sys#find-module                    4    0.000    0.000    0.000
83    swap1473                             4    0.000    0.000    0.000
84    %make-module                         3    0.000    0.000    0.000
85    make-module                          3    0.000    0.000    0.000
86    ##sys#macro-subset                   2    0.000    0.000    0.000
87    module-vexports                      2    0.000    0.000    0.000
88    module-sexports                      2    0.000    0.000    0.000
89    ##sys#register-primitive-module      2    0.000    0.000    0.000
90    body3068                             1    0.000    0.000    0.000
91    set-module-vexports!                 1    0.000    0.000    0.000
92    set-module-sexports!                 1    0.000    0.000    0.000
93    ##sys#register-module                1    0.000    0.000    0.000
94    process-command-line                 1    0.000    0.000    0.000
95    module-import-forms                  1    0.000    0.000    0.000
96    module-indirect-exports              1    0.000    0.000    0.000
97    def-sexports3071                     1    0.000    0.000    0.000
98    def-vexports3070                     1    0.000    0.000    0.000
99    set-module-import-forms!             1    0.000    0.000    0.000
100    module-defined-syntax-list           1    0.000    0.000    0.000
101
102    compiling match-test.scm, with matchable.scm and test.scm included:
103
104    procedure                       calls  seconds  average  percent
105    ----------------------------------------------------------------
106    ##sys#expand-0                  27576    2.896    0.000  100.000
107    ##sys#expand                    20616    2.504    0.000   86.464
108    lookup                          96736    1.916    0.000   66.160
109    ##sys#canonicalize-body          3203    1.188    0.000   41.022
110    ##sys#check-syntax              15942    0.680    0.000   23.480
111    macro-alias                     12350    0.404    0.000   13.950
112    body1099                        15942    0.384    0.000   13.259
113    ##sys#process-syntax-rules        115    0.208    0.001    7.182
114    ##sys#alias-global-hook          7950    0.088    0.000    3.038
115    def-culprit1101                   861    0.048    0.000    1.657
116    ##sys#strip-syntax                933    0.036    0.000    1.243
117    def-alias190                      931    0.036    0.000    1.243
118    def-se189                         930    0.036    0.000    1.243
119    def-se1102                        861    0.028    0.000    0.966
120    body187                           933    0.008    0.000    0.276
121    ##sys#extended-lambda-list?       581    0.000    0.000    0.000
122    ##sys#extend-macro-environment     93    0.000    0.000    0.000
123    ##sys#register-syntax-export       33    0.000    0.000    0.000
124    macro?                             16    0.000    0.000    0.000
125    ##sys#register-export              11    0.000    0.000    0.000
126    ##sys#macro-subset                  2    0.000    0.000    0.000
127    process-command-line                1    0.000    0.000    0.000
128
129** modules
130*** `require-extension' fails in interpreter when extension is .so without import library
131    probably because load and import is in same toplevel form, and the
132    load is performed after the import (at runtime). A possibly fix
133    would be to load the extension immediately (at
134    compile-/expansion-time), when import is #t and o import lib
135    exists.
136
137
138* tasks
139
140** branches
141*** test irregular branch, merge if performance is acceptable
142
143** expander
144*** at some stage disable debug-output in expand.scm
145
146** module issues
147*** need a way to omit generating module registration without generating import lib
148    for example when compiling static version, where implib already exists
149*** code-duplication in compiler and evaluator for ##core#module
150*** "scheme" module does not include some special forms ("define-syntax", etc.)
151*** import-for-syntax imports value bindings into import-env
152    should actually be a distinct meta-import-env.
153    (does it work at all?)
154*** curried define performs expansion in empty se - problem?
155    (as comment in expand.scm indicated (##sys#register-export))
156*** check phase separation and module access
157**** interaction for define-for-syntax, begin-for-syntax, and macros
158     also check for different execution modes (compile-time, run-time, csi, ...)
159*** checks to be implemented
160**** reimport of imported id
161**** unused defs?
162
163** compiler
164*** use ##core#db information
165    either automatically add use/require code (tricky) or at least warn and suggest
166    use
167*** generate object-files in /tmp (or TMPDIR)?
168
169** setup/install
170*** setup-download
171**** use HTTP_PROXY env. var
172**** handle redirects in http-fetch
173*** automatically update db after extension installation?
174
175** library units
176*** read-mark list should be stored in read-table
177*** ports should have indicator slot about exact type (tcp, file, ...)
178
179** syntax-error
180*** if ##sys#current-module is set, add name to error message?
181*** fluidly keep track of expanded forms (extend meaning of culprit) to pprint pruned expr on error
182
183** build
184*** running "chicken-install -u" may be problematic with changed DESTDIR
185*** rules.make should really be generated by a script
186*** need script to process import libraries for generating indices for doc.callcc.org
187    then tell Toby about it
188
189
190* tests
191
192** optional longer run (env. var)
193*** syntax-rules-stress-test
194*** fully compiled ec-tests
195
196
197* documentation
198
199** document ("HI/LO") expander (-> wiki, internals)
200   will we ever have the time for that?
201** document new .meta entries in tutorials on wiki
202   depends, test-depends
203** chicken.texi needs to be regenerated
204
205
206* optimizations
207
208** self-recursion optimization
209   what MacScheme called "benchmark-mode" (assume self-calls are recursion)
210*** needs declaration or option, >= -O2
211
212** when inlining, consing arg-list with "list" may make get-keyword possible foldable
213
214** local flow analysis
215
216** lambda-fusion / "fuse-and-dispatch" (suggested by Alex)
217   convert groups of local lambdas referenced to only in operator-position into
218   looping lambda + dispatch (static variable can be used), otherwise similar to
219   a conditional
220*** new forms (after optimization, prepared language)
221    [##core#dispatch LAMBDABODY1 ... BODY]
222    [##core#call/dispatch {INDEX} ARGUMENT1 ...}
223
224** handle optional args primitively
225   for example, set to distinguished val (checking argc) on C level, core
226   primitive for checking this - should be quite simple, but llist processing
227   (decompose-lambda-list) will be more expensive and cumbersome.
228
229** pre-hashed symbols (extra symbol slot)
230   The memory usage should be acceptable, performance gain is hard to guess.
231   Some experiments indicate that hashing the string is cheaper than it appears,
232   but low-level hashtables should get the most of this (and thus speed up
233   the compiler)
234
235** Lisp2-hack by Dybvig
236*** add function-cell to symbol, call on direct call without checks
237*** initialized to trap function on set!/define, which does fixup
238*** would also allow inline-caching hacks
Note: See TracBrowser for help on using the repository browser.