~ chicken-core (chicken-5) bc31b6a57f81366fc7077e9d56049d72180c0ffb
commit bc31b6a57f81366fc7077e9d56049d72180c0ffb Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Dec 1 11:27:22 2009 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Dec 1 11:27:22 2009 +0100 removed TODO diff --git a/TODO b/TODO deleted file mode 100644 index 45129fad..00000000 --- a/TODO +++ /dev/null @@ -1,226 +0,0 @@ -TODO for chicken -*- Outline -*- -================ - - -* bugs - -** csc: no backtrace if chicken fails - -** compiler -*** pre-optimization -**** changes call-sites and makes them invalid for later pre-optimization -*** check profiling (-profile vs. profile-declaration) -**** this doesn't always seem to work, in particular with library units -**** ##sys#finish-profile should always be invoked - is it in `exit'? -*** when re-defining intrinsics, the compiler should warn and disable re-writes - add declaration to keep re-writes enabled for core library files -*** -prologue, -epilogue, -prelude, -postlude should check for argument being directory - (reported by Eduardo Cavazos) - -** expander -*** expansion of r5rs_pitfall 4.2 incorrect - possibly due to a non-aliased implicit "begin" somewhere -*** dirty-macros.scm loops when using `defile' - possibly due to unrenamed special forms -*** extended lambda-lists refer to `optional' and `let-optionals[*]' - this will break, when these macros are renamed on import or not imported - at all -**** a possible solution is to use internal forms, provided by the "scheme" module. -*** need way to force generating module-registration code for standalone executables. - -** modules -*** mark import-source (module) on plist of imported symbols and use in re-import warning - doesn't work that easily, try to find another solution -*** DSSSL lambda-lists need imports of `chicken' module ("optional", "let-optionals", ...) -**** should probably use internal aliases - -** libraries -*** library/runtime: cyclic list checks for assq/assv/assoc/memq/memv/member - and C_i_list_tail -*** finalizers on lexically ref'd data not working in interpreter - reported by Jim Ursetto - reverted original patch, see patches/finalizer-closures.diff - - -* tasks - -** eggify lolevel - -** private commits not in pending - -commit 5b09da9117edcc3c80d45d1ef08b788bed42ddf1 -Author: felix <felix@call-with-current-continuation.org> -Date: Mon Nov 16 10:37:14 2009 +0100 - - don't use backdoor to tinyclos for instance foreign type - -*** notrace - -commit c1154565abc041202110aae8e93a57cbe3fba3c2 -Author: Felix <bunny351@gmail.com> -Date: Sun Oct 11 11:37:44 2009 +0200 - - removed trace operations from manual - -commit c41657eedc99190a644df6581a8bf9944452a97a -Author: Felix <bunny351@gmail.com> -Date: Sun Oct 11 11:37:06 2009 +0200 - - remove tracing facilities from csi - this can be done better using the advice egg - - -** module issues -*** need a way to omit generating module registration without generating import lib - for example when compiling static version, where implib already exists -*** code-duplication in compiler and evaluator for ##core#module -*** "scheme" module does not include some special forms ("define-syntax", etc.) -*** import-for-syntax imports value bindings into import-env - should actually be a distinct meta-import-env. - example: we need `(import-for-syntax chicken)' to have access to - `receive' in a procedural syntax definition. -*** curried define performs expansion in empty se - problem? - (as comment in expand.scm indicated (##sys#register-export)) -*** check phase separation and module access -**** see "expander" above -*** consider adding support for unnamed modules - -** compiler -*** (csc) generate object-files in /tmp (or TMPDIR)? - -** setup/install -*** setup-download -**** use "HTTP_PROXY"/"http_proxy" env. var -**** handle redirects in http-fetch - -** library units -*** read-mark list should be stored in read-table -*** Weak locatives can probably be used to implement weak hash-tables (at least for some data) - -** syntax-error -*** if ##sys#current-module is set, add name to error message? -*** fluidly keep track of expanded forms (extend meaning of culprit) to pprint pruned expr on error - -** build -*** need script to process import libraries for generating indices for doc.callcc.org - then tell Toby Butzon about it -*** using "touch" with WINDOWS_SHELL won't work (need alternative) (mingw/non-msys build) -*** extend scripts/guess-platforms.sh for more platforms - -** scrutiny -*** add support for keyword arguments and check even length and available keywords - -** runtime -*** try to build with TLS - - -* features - -** error-handling hook for argument-type errors that signal a non-number - the numbers hook could modify this and provide a better error message if a non-core - number type triggers such an error - - -* tests - -** optional longer run (env. var) -*** syntax-rules-stress-test -*** fully compiled ec-tests -** 3-stage bootstrap with compiler-output comparison - - -* optimizations - -** define these as static inline functions in chicken.h: - C_i_not_pair_p_2 - C_i_fixnum_arithmetic_shift - C_a_i_flonum_negate - C_a_i_flonum_quotient - C_a_i_flonum_times - C_a_i_flonum_difference - C_a_i_flonum_plus - C_u_i_oddp - C_u_i_negativep - C_u_i_positivep - C_u_i_zerop - C_u_i_inexactp - C_u_i_exactp - C_i_flonum_max - C_i_flonum_min - C_i_fixnum_max - C_i_fixnum_min - C_i_finitep - C_i_flonump - C_i_integerp - C_i_closurep - C_i_portp - C_i_vectorp - C_i_locativep - C_i_stringp - C_i_pairp - C_i_symbolp - C_i_eqvp - C_i_o_fixnum_plus - C_i_o_fixnum_difference - C_i_o_fixnum_and - C_i_o_fixnum_ior - C_i_o_fixnum_xor - -** local mode could be enabled for all core libs - also could reduce performance, as it does for regex - -** global inline files for core units -*** This would remove necessity for many simple re-write rules in c-platform.scm - -** delegates for extended llists -*** (define (foo ... #!XXX ...) ...) - ~> - (begin - (declare (hide tmp)) - (define (tmp VAR ...) ...) - (define (foo ... #!XXX ...) (tmp VAR ...)) - (define-compiler-syntax foo - (syntax-rules () - ((_ arg ...) (tmp <processed-arg> ...))))) -*** only used after definition -*** only if opt/key defaults don't refer to previous llist vars -*** disable if no compiler-syntax enabled - -** self-recursion optimization -*** what MacScheme called "benchmark-mode" (assume self-calls are recursion) -*** needs declaration or option, >= -O2 -*** can be implemented like in the extended-llists opt. above -*** this should actually already work in local mode (toplevel defs are known, after all) - -** compiler-support for get-keyword ? -*** what when a function with keyword args gets inlined? -*** when inlining, consing arg-list with "list" may make get-keyword possibly foldable - -** lambda-fusion / "fuse-and-dispatch" (suggested by Alex Shinn) - convert groups of local lambdas referenced to only in operator-position into - looping lambda + dispatch (static variable can be used), otherwise similar to - a conditional - -** handle optional args primitively - for example, set to distinguished val (checking argc) on C level, core - primitive for checking this - should be quite simple, but llist processing - (decompose-lambda-list) will be more expensive and cumbersome. - -** The benchmarks are meaningless - find real ones. -*** Feeley's benchmarks (slatex, compiler) -*** Brad Lucier's fft - -** speculative inlining - -(define-compiler-syntax + ; "mostly-fixnum-flonum" case - (syntax-rules () - ((_ x y) - (let ((t1 x) - (t2 y)) - (if (and (fixnum? t1) (fixnum? t2)) - ;; makes only sense if C_i_o_fixnum_plus is inlined at C level - (or (##core#inline "C_i_o_fixnum_plus" t1 t2) - (##core#inline_allocate ("C_a_i_plus" 4) t1 t2) ) - (if (and (flonum? t1) (flonum? t2)) - (##core#inline_allocate ("C_a_i_flonum_plus" 4) t1 t2) - (##core#inline_allocate ("C_a_i_plus" 4) t1 t2) ) ) ) ) ) )Trap