source: project/chicken/trunk/TODO @ 12436

Last change on this file since 12436 was 12436, checked in by felix winkelmann, 13 years ago

non-exported syntax is added to import libs to allow references from exported syntax

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