source: project/chicken/trunk/TODO @ 12703

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

removed junk files

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