source: project/chicken/trunk/TODO @ 15668

Last change on this file since 15668 was 15668, checked in by felix, 10 years ago

added TODO item

File size: 10.6 KB
Line 
1TODO for chicken                                                        -*- Outline -*-
2================
3
4
5* bugs
6
7** compiler
8*** pre-optimization
9**** changes call-sites and makes them invalid for later pre-optimization
10*** check profiling (-profile vs. profile-declaration)
11**** this doesn't always seem to work, in particular with library units
12**** ##sys#finish-profile should always be invoked
13     is it in `exit'?
14*** when re-defining intrinsics, the compiler should warn and disable re-writes
15    add declaration to keep re-writes enabled for core library files
16*** -prologue, -epilogue, -prelude, -postlude should check for argument being directory
17    (reported by Eduardo Cavazos)
18
19** expander
20*** expansion of r5rs_pitfall 4.2 incorrect
21    possibly due to a non-aliased implicit "begin" somewhere
22*** dirty-macros.scm loops when using `defile'
23    possibly due to unrenamed special forms
24*** extended lambda-lists refer to `optional' and `let-optionals[*]'
25    this will break, when these macros are renamed on import or not imported
26    at all
27**** a possible solution is to use internal forms, provided by the "scheme" module.
28*** need way to force generating module-registration code for standalone executables.
29
30** modules
31*** `require-extension' fails in interpreter when extension is .so without import library
32    probably because load and import is in same toplevel form, and the
33    load is performed after the import (at runtime). A possibly fix
34    would be to load the extension immediately (at
35    compile-/expansion-time), when import is #t and o import lib
36    exists.
37*** mark import-source (module) on plist of imported symbols and use in re-import warning
38    doesn't work that easily, try to find another solution
39*** DSSSL lambda-lists need imports of `chicken' module ("optional", "let-optionals", ...)
40**** should probably use internal aliases
41
42** libraries
43*** library/runtime: cyclic list checks for assq/assv/assoc/memq/memv/member
44    and C_i_list_tail
45*** finalizers on lexically ref'd data not working in interpreter
46    reported by Jim Ursetto
47    reverted original patch, see patches/finalizer-closures.diff
48*** The units that are the results of splitting the extras unit have been chosen arbitrarily
49**** create combination unit ("chicken-stuff")
50***** data-structures, extras, files, ports, utils
51
52** tools
53*** chicken-bug: SMTP servers not accessible (greylisting)
54
55
56* tasks
57
58** branches
59*** try to improve performance in lazy-gensyms
60
61** module issues
62*** need a way to omit generating module registration without generating import lib
63    for example when compiling static version, where implib already exists
64*** code-duplication in compiler and evaluator for ##core#module
65*** "scheme" module does not include some special forms ("define-syntax", etc.)
66*** import-for-syntax imports value bindings into import-env
67    should actually be a distinct meta-import-env.
68    example: we need `(import-for-syntax chicken)' to have access to
69    `receive' in a procedural syntax definition.
70*** curried define performs expansion in empty se - problem?
71    (as comment in expand.scm indicated (##sys#register-export))
72*** check phase separation and module access
73**** see "expander" above
74*** consider adding support for unnamed modules
75
76** compiler
77*** test inlining with compiler modules
78*** (csc) generate object-files in /tmp (or TMPDIR)?
79*** option ("-M") to compile file as unnamed module (importing scheme + chicken)
80
81** setup/install
82*** setup-download
83**** use "HTTP_PROXY"/"http_proxy" env. var
84**** handle redirects in http-fetch
85*** chicken-install: option to list servers
86
87** library units
88*** read-mark list should be stored in read-table
89*** ports should have indicator slot about exact type (tcp, file, ...)
90*** normalize-pathname: return short name on windows? (mingw/msvc)
91*** Use record-descriptors instead of symbols as 1st slot in structure objects?
92**** see Kon's proposal for new record-descriptors in "misc/Chicken Runtime Data Type Proposal"
93*** Weak locatives can probably be used to implement weak hash-tables (at least for some data)
94
95** syntax-error
96*** if ##sys#current-module is set, add name to error message?
97*** fluidly keep track of expanded forms (extend meaning of culprit) to pprint pruned expr on error
98
99** build
100*** need script to process import libraries for generating indices for doc.callcc.org
101    then tell Toby Butzon about it
102*** using "touch" with WINDOWS_SHELL won't work (need alternative) (mingw/non-msys build)
103*** extend scripts/guess-platforms.sh for more platforms
104
105** scrutiny
106*** add support for keyword arguments and check even length and available keywords
107
108
109* wiki
110
111** compatibility page
112
113
114* tests
115
116** optional longer run (env. var)
117*** syntax-rules-stress-test
118*** fully compiled ec-tests
119** 3-stage bootstrap with compiler-output comparison
120
121
122* optimizations
123
124** local mode could be enabled for all core libs
125   also could reduce performance, as it does for regex
126
127** global inline files for core units
128*** This would remove necessity for many simple re-write rules in c-platform.scm
129
130** self-recursion optimization
131   what MacScheme called "benchmark-mode" (assume self-calls are recursion)
132*** needs declaration or option, >= -O2
133
134** when inlining, consing arg-list with "list" may make get-keyword possibly foldable
135
136** compiler-support for get-keyword ?
137
138** lambda-fusion / "fuse-and-dispatch" (suggested by Alex Shinn)
139   convert groups of local lambdas referenced to only in operator-position into
140   looping lambda + dispatch (static variable can be used), otherwise similar to
141   a conditional
142
143** lazy gensyms (see "lazy-gensyms" branch)
144
145** handle optional args primitively
146   for example, set to distinguished val (checking argc) on C level, core
147   primitive for checking this - should be quite simple, but llist processing
148   (decompose-lambda-list) will be more expensive and cumbersome.
149
150** pre-hashed symbols (extra symbol slot)
151   The memory usage should be acceptable, performance gain is hard to guess.
152   Some experiments indicate that hashing the string is cheaper than it appears,
153   but low-level hashtables should get the most of this (and thus speed up
154   the compiler)
155
156
157* 4.0.9 benchmark results
158
159(c)2008-2009 The Chicken Team
160(c)2000-2007 Felix L. Winkelmann
161Version 4.0.9 - SVN rev. 15246
162linux-unix-gnu-x86 [ manyargs dload ptables applyhook ]
163compiled 2009-07-23 on x (Linux)
164
165
166CC:
167Using built-in specs.
168Target: i486-linux-gnu
169Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.3-5ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
170Thread model: posix
171gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
172
173CFLAGS:
174-fno-strict-aliasing -DHAVE_CHICKEN_CONFIG_H -Os -fomit-frame-pointer -I/home/felix/include
175
176Running benchmarks ...
177
178  (averaging over 5 runs, dropping highest and lowest, binaries are statically linked and stripped)
179
180                     (runtime)                                  (code size)
181
182                     base       fast     unsafe        max      base      fast    unsafe       max
183                  ----------------------------------------------------------------------------------
1840                   0.000      0.000      0.000      0.000     1013k     1013k      902k      902k
185binarytrees         0.076      0.081      0.082      0.004     1021k     1021k      910k      910k
186boyer               0.053      0.052      0.053      0.004     1045k     1045k      934k      934k
187browse              0.088      0.086      0.073      0.072     1029k     1029k      918k      918k
188conform             0.108      0.072      0.072      0.064     1089k     1085k      954k      954k
189cpstak              0.272      0.250      0.208      0.169     1013k     1013k      906k      906k
190ctak                0.124      0.128      0.110      0.106     1017k     1017k      906k      906k
191dderiv              0.106      0.089      0.082      0.076     1021k     1021k      910k      910k
192deriv               0.078      0.081      0.068      0.078     1017k     1017k      910k      906k
193destructive         0.069      0.076      0.062      0.070     1017k     1017k      910k      906k
194div-iter            0.002      0.021      0.018      0.021     1013k     1013k      906k      906k
195div-rec             0.046      0.052      0.036      0.057     1013k     1013k      906k      906k
196dynamic             0.074      0.062      0.078      0.056     1293k     1285k     1078k     1078k
197earley              0.029      0.018      0.028      0.028     1073k     1065k      950k      950k
198fft                 0.046      0.032      0.028                1025k     1025k      914k      950k
199fib                 0.014      0.148      0.109      0.033     1013k     1013k      902k      902k
200fibc                1.464      0.854      0.736      0.572     1017k     1013k      906k      906k
201fprint              0.121      0.124      0.112      0.117     1017k     1017k      906k      906k
202fread               0.572      0.056      0.524      0.526     1013k     1013k      902k      902k
203hanoi               0.414      0.392      0.341      0.145     1013k     1013k      906k      902k
204lattice             5.228      5.109      4.156      4.168     1029k     1029k      918k      918k
205maze                0.136      0.112      0.085                1089k     1077k      946k      918k
206nbody               2.414      1.610      0.528                1045k     1033k      914k      918k
207nqueens             0.068      0.064      0.029      0.021     1017k     1017k      906k      906k
208puzzle              0.052      0.056      0.028      0.026     1037k     1037k      922k      918k
209scheme              0.025      0.014      0.010      0.010     1165k     1165k      998k      998k
210tak                 0.273      0.268      0.217      0.056     1013k     1013k      906k      902k
211takl                0.142      0.148      0.057      0.073     1017k     1017k      906k      906k
212takr                0.438      0.430      0.301      0.246     1125k     1125k      998k      998k
213traverse            0.224      0.150      0.012      0.112     1037k     1033k      914k      914k
214travinit            0.033      0.033      0.026      0.018     1037k     1033k      910k      910k
215triangl             0.546      0.553      0.042      0.377     1017k     1017k      906k      906k
216
217TOTAL              13.488     11.733      8.805      7.385
218
219
220** These benchmarks are meaningless - find real ones.
Note: See TracBrowser for help on using the repository browser.