source: project/chicken/trunk/TODO @ 12786

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

removed setup-utils (merged into setup-api)

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