source: project/chicken/trunk/TODO @ 12398

Last change on this file since 12398 was 12398, checked in by felix winkelmann, 12 years ago

allocation estimation in preparation phase of the compiler takes maximum allocation for each conditional branch, not sum

File size: 4.4 KB
1TODO for trunk                                                          -*- Outline -*-
4* bugs
6** compiler
7*** pre-optimization
8**** changes call-sites and makes them invalid for later pre-optimization
10** expander
11*** when import-libraries are used, reference to unexported syntax in exported syntax fails
12    it seems that we have to add unexported syntax to the import lib, in case it is referenced
13    from exported syntax. ugh.
14*** expansion of r5rs_pitfall 4.2 incorrect
15    possibly due to a non-aliased implicit "begin" somewhere
16*** dirty-macros.scm loops when using `defile'
17    possibly due to unrenamed special forms
19** modules
20*** chicken.import.scm refers to ##sys#chicken-macro-environment
21    ... which is only set, if chicken-more-macros.scm is loaded, which
22    is of course not the case inside a compiled executable (current
23    workaround is to set them to nil by default)
24*** same for ##sys#chicken-ffi-macro-environment
25*** re-exports of syntax doesn't work
26    generating import library requires source
27    (compiled-module-registration), but original module is lost after
28    importing. Can we simply pull expander closure out of module from which
29    we imported?
30*** `require-extension' fails in interpreter when extension is .so without import library
31    probably because load and import is in same toplevel form, and the
32    load is performed after the import (at runtime). A possibly fix
33    would be to load the extension immediately (at
34    compile-/expansion-time), when import is #t and o import lib
35    exists.
38* tasks
40** branches
41*** test irregular branch, merge if performance is acceptable
43** expander
44*** at some stage disable debug-output in expand.scm
46** module issues
47*** need a way to omit generating module registration without generating import lib
48    for example when compiling static version, where implib already exists
49*** code-duplication in compiler and evaluator for ##core#module
50*** "scheme" module does not include some special forms ("define-syntax", etc.)
51*** import-for-syntax imports value bindings into import-env
52    should actually be a distinct meta-import-env.
53    (does it work at all?)
54*** curried define performs expansion in empty se - problem?
55    (as comment in expand.scm indicated (##sys#register-export))
56*** checks to be implemented
57**** reimport of imported id
58**** unused defs?
60** compiler
61*** remove "custom-declare" + stuff?
62*** generate object-files in /tmp (or TMPDIR)?
64** csc
65*** automatically compile import-libraries?
67** setup/install
68*** setup-download
69**** use HTTP_PROXY env. var
70**** handle redirects in http-fetch
72** library
73*** read-mark list should be stored in read-table
75** syntax-error
76*** if ##sys#current-module is set, add name to error message?
77*** fluidly keep track of expanded forms (extend meaning of culprit) to pprint pruned expr on error
79** build
80*** rules.make should really be generated by a script
81*** need script to process import libraries for generating indices for
82    then tell Toby about it
85* tests
87** optional longer run (env. var)
88*** syntax-rules-stress-test
89*** fully compiled ec-tests
92* documentation
94** document ("HI/LO") expander (-> wiki, internals)
95   will we ever have the time for that?
96** document new .meta entries in tutorials on wiki
97   depends, test-depends
98** chicken.texi needs to be regenerated
101* optimizations
103** self-recursion optimization
104   what MacScheme called "benchmark-mode" (assume self-calls are recursion)
105*** needs declaration or option, >= -O2
107** when inlining, consing arg-list with "list" may make get-keyword possible foldable
109** local flow analysis
111** lambda-fusion / "fuse-and-dispatch" (suggested by Alex)
112   convert groups of local lambdas referenced to only in operator-position into
113   looping lambda + dispatch (static variable can be used), otherwise similar to
114   a conditional
115*** new forms (after optimization, prepared language)
116    [##core#dispatch LAMBDABODY1 ... BODY]
117    [##core#call/dispatch {INDEX} ARGUMENT1 ...}
119** handle optional args primitively
120   for example, set to distinguished val (checking argc) on C level, core
121   primitive for checking this - should be quite simple, but llist processing
122   (decompose-lambda-list) will be more expensive and cumbersome.
124** pre-hashed symbols (extra symbol slot)
125   The memory usage should be acceptable, performance gain is hard to guess.
126   Some experiments indicate that hashing the string is cheaper than it appears,
127   but low-level hashtables should get the most of this (and thus speed up
128   the compiler)
Note: See TracBrowser for help on using the repository browser.