CORE LANGUAGE FEATURES - Proc default arguments - Traces - Closures, exported as a command that can set/get/unset elements from a dictionary associated with the current procedure. The [closure] command should allow to perform this operations, and to access the closure of a procedure from another one. CORE COMMANDS - All the missing standard core commands not related to I/O, namespaces, ... - [tail] command for programmer-driven tail recursion optimization - The current [expr] needs a lot of work, expecially operators && and || are not lazy. Math functions are not present but probably will never be added as expr functions, but as Tcl commands, like [sin], [cos] and so on. - onleave commnad, executing something as soon as the current procedure returns. With no arguments it returns the script set, with one appends the onleave script. There should be a way to reset. COMMANDS NOT IN TCL BUT THAT SHOULD BE IN JIM - commands to operate on sets (that are lists semantically). EXTENSIONS - Regexp extension - OOP system (this will possibly part of the core) SPEED OPTIMIZATIONS - Cache call frames instead to free/realloc they at every proc call. (partially done, now there is to cache the variables has table contained in the call frames). IMPLEMENTATION ISSUES - Objects lazy free. - [split $string {}] should generate a list with Jim_Obj of chars shared. - [closure] command to set/get procedures-specific closure variables. - Rewrite all the commands accepting a set of options to use Jim_GetEnum(). ERROR MESSAGES - Display the procedure relative file number where the error happened. Like: In procedure 'check' line 11, called at file "test.tcl", line 1024 instead of just: In procedure 'check' called at file "test.tcl", line 1024 REFERENCES SYSTEM - The format of the reference will be changed form ~reference:000............: to -000000000......>, where typename is the name of the type supplied to the [ref] command at reference creation time. This name is only informative but is stored inside the reference structure, so that for example [lambda] will have as reference name something like -00000000000000001>, and a list node -00000000000000002> and so on. This makes debugging easier. The name is totally ignored by the garbage collection stage.