aboutsummaryrefslogtreecommitdiff
path: root/TODO
blob: 905cc4f3bd31bb1b6062660887bbd1333c685ee6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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.

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.
  For example:

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 <reference-<typename>-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 <reference-<function>-00000000000000001>, and
  a list node <reference-<listnode>-00000000000000002> and so on.
  This makes debugging easier. The name is totally ignored by the
  garbage collection stage.