source: project/chicken/trunk/TODO @ 15799

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

enabled compiler-syntax for map, better rewrites for add1/sub1; WARNING: not tested, yet

File size: 5.4 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*** mark import-source (module) on plist of imported symbols and use in re-import warning
32    doesn't work that easily, try to find another solution
33*** DSSSL lambda-lists need imports of `chicken' module ("optional", "let-optionals", ...)
34**** should probably use internal aliases
35
36** libraries
37*** library/runtime: cyclic list checks for assq/assv/assoc/memq/memv/member
38    and C_i_list_tail
39*** finalizers on lexically ref'd data not working in interpreter
40    reported by Jim Ursetto
41    reverted original patch, see patches/finalizer-closures.diff
42
43** tools
44*** chicken-bug: SMTP servers not accessible (greylisting)
45
46
47* tasks
48
49** branches
50*** try to improve performance in lazy-gensyms
51    this *should* give better performance, but the extra handling of symbols
52    without name seems to be to expensive
53
54** module issues
55*** need a way to omit generating module registration without generating import lib
56    for example when compiling static version, where implib already exists
57*** code-duplication in compiler and evaluator for ##core#module
58*** "scheme" module does not include some special forms ("define-syntax", etc.)
59*** import-for-syntax imports value bindings into import-env
60    should actually be a distinct meta-import-env.
61    example: we need `(import-for-syntax chicken)' to have access to
62    `receive' in a procedural syntax definition.
63*** curried define performs expansion in empty se - problem?
64    (as comment in expand.scm indicated (##sys#register-export))
65*** check phase separation and module access
66**** see "expander" above
67*** consider adding support for unnamed modules
68
69** compiler
70*** (csc) generate object-files in /tmp (or TMPDIR)?
71
72** setup/install
73*** setup-download
74**** use "HTTP_PROXY"/"http_proxy" env. var
75**** handle redirects in http-fetch
76
77** library units
78*** read-mark list should be stored in read-table
79*** normalize-pathname: return short name on windows? (mingw/msvc)
80*** Use record-descriptors instead of symbols as 1st slot in structure objects?
81**** see Kon's proposal for new record-descriptors in "misc/Chicken Runtime Data Type Proposal"
82*** Weak locatives can probably be used to implement weak hash-tables (at least for some data)
83
84** syntax-error
85*** if ##sys#current-module is set, add name to error message?
86*** fluidly keep track of expanded forms (extend meaning of culprit) to pprint pruned expr on error
87
88** build
89*** need script to process import libraries for generating indices for doc.callcc.org
90    then tell Toby Butzon about it
91*** using "touch" with WINDOWS_SHELL won't work (need alternative) (mingw/non-msys build)
92*** extend scripts/guess-platforms.sh for more platforms
93
94** scrutiny
95*** add support for keyword arguments and check even length and available keywords
96
97
98* tests
99
100** optional longer run (env. var)
101*** syntax-rules-stress-test
102*** fully compiled ec-tests
103** 3-stage bootstrap with compiler-output comparison
104
105
106* optimizations
107
108** local mode could be enabled for all core libs
109   also could reduce performance, as it does for regex
110
111** global inline files for core units
112*** This would remove necessity for many simple re-write rules in c-platform.scm
113
114** self-recursion optimization
115   what MacScheme called "benchmark-mode" (assume self-calls are recursion)
116*** needs declaration or option, >= -O2
117
118** when inlining, consing arg-list with "list" may make get-keyword possibly foldable
119
120** compiler-support for get-keyword ?
121
122** lambda-fusion / "fuse-and-dispatch" (suggested by Alex Shinn)
123   convert groups of local lambdas referenced to only in operator-position into
124   looping lambda + dispatch (static variable can be used), otherwise similar to
125   a conditional
126
127** lazy gensyms (see "lazy-gensyms" branch)
128
129** handle optional args primitively
130   for example, set to distinguished val (checking argc) on C level, core
131   primitive for checking this - should be quite simple, but llist processing
132   (decompose-lambda-list) will be more expensive and cumbersome.
133
134** pre-hashed symbols (extra symbol slot)
135   The memory usage should be acceptable, performance gain is hard to guess.
136   Some experiments indicate that hashing the string is cheaper than it appears,
137   but low-level hashtables should get the most of this (and thus speed up
138   the compiler)
139
140** The benchmarks are meaningless - find real ones.
Note: See TracBrowser for help on using the repository browser.