Make manual page rendering easier.
[jimtcl/wkoszek.git] / TODO
blob0365f155b86ff5e0afbd1cdf349e013b89eeefd6
1 CORE LANGUAGE FEATURES
3 - Proc default arguments
4 - Traces
5 - [static] command
7 CORE COMMANDS
9 - All the missing standard core commands not related to I/O, namespaces, ...
10 - The current [expr] needs a lot of work, especially operators && and ||
11   are not lazy. Math functions are not present but probably will never
12   be added as expr functions, but as Tcl commands, like [sin], [cos] and
13   so on.
14 - [onleave] command, executing something as soon as the current procedure
15   returns. With no arguments it returns the script set, with one appends
16   the onleave script. There should be a way to reset.
17 - [proc] without arguments may return a list of all the procedures
18   (no C commands). While with a single argument (the name of a proc)
19   may return [list $args $statics $body].
21 OTHER COMMANDS NOT IN TCL BUT THAT SHOULD BE IN JIM
23 - Set commands: [lunion], [lintersect], and [ldifference]
25 EXTENSIONS LOADING
27 - Avoid that the same extension can be loaded multiple times inside the
28   same interpreter. The extension should return its name on initialization
29   together with the version so that Jim_InitExtension will fail if the
30   extension with the same name is already loaded.
32 EXTENSIONS
34 - Regexp extension
35 - OOP system
36 - Event loop
37 - Files
38 - Sockets
39 - Cryptography: hash functions, block ciphers, strim ciphers, PRNGs.
40 - Tuplespace extension (http://wiki.tcl.tk/3947) (using sqlite as backend)
41 - Zlib
42 - Gdlib
43 - CGI (interface compatible with ncgi, but possibly written in C for speed)
45 SPEED OPTIMIZATIONS
47 - Find a way to avoid interpolation/reparsing in "foo($bar)" tokens.
48   See the "sieve" and "ary" bench performances, result of this problem.
49   (to compare with sieve_dict is also useful.)
50 - Experiment with better ways to do literal sharing.
51 - Organize the 'script' object so that a single data structure is
52   used for a full command, and interpolation is done using an
53   'interpolation token type' like JIM_TT_VAR and so on.
54   This way there is no need to run the array if integer objects
55   with the command structure. Also should help for better cache usage.
56 - Generate .c from Jim programs, as calls to the Jim API to avoid
57   the performance penality of Jim_EvalObj() overhead. In the future
58   try to generate the calls like a JIT emitting assembler from
59   Jim directly.
60 - Jim_GetDouble() should check if the object type is an integer into
61   a range that a double can represent without any loss, and directly
62   return the double value converting the integer one instead to pass
63   for the string repr.
65 IMPLEMENTATION ISSUES
67 - Objects lazy free.
68 - Rewrite all the commands accepting a set of options to use Jim_GetEnum().
69 - Every time an extension is loaded Jim should put the dlopen() (or win32
70   equivalent) handle in a list inside the interpreter structure. When
71   the interpreter is freed all this handles should be closed with dlclose().
72 - *AssocData() function should allow to specify a delProc C function like
73   in the Tcl API. When the interpreter is destroyed all the delProc functions
74   should be called to free the memory before to free the interpreter.
75 - Convert dicts from lists directly without to pass from the string repr.
77 ERROR MESSAGES
79 - Display the procedure relative file number where the error happened.
80   Like:
82   In procedure 'check' line 11, called at file "test.tcl", line 1024
84   instead of just:
86   In procedure 'check' called at file "test.tcl", line 1024
88 REFERENCES SYSTEM
90 - Unify ref/getref/setref/collect/finalize under an unique [ref] command.
91 - Add a 'call' attribute to references in order to call a given procedure
92   if the name of a reference is used as command name.
94 API FUNCTIONS TO EXPORT
96 - Jim_FormatString()
98 RANDOM THINGS TO DO ASAP
100 - .jimrc loading, using the ENV variable