summary refs log tree commit diff stats
path: root/todo.txt
blob: 66a9d1f0f28e8f9e69eb1598a7891a10dd2583b9 (plain) (blame)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
version 0.11.4
==============

- document NimScript
- document special cased varargs[untyped] and varargs[typed]

- The remaining bugs of the lambda lifting pass that is responsible to enable
  closures and closure iterators need to be fixed.
- ``concept`` needs to be refined, a nice name for the feature is not enough.
- Destructors need to be refined.
- make '--implicitStatic:on' the default; then we can also clean up the
  'static[T]' mess in the compiler!

- add "all threads are blocked" detection to 'spawn'
- Deprecate ``immediate`` for templates and macros
- make people annotate .anchor methods


version 1.0
===========

- map ``string`` and ``seq`` to ``std::string`` and ``std::vector``
- macro support for '='; bind '=' to a memory region
- remove   echo $foo  gotcha
- figure out why C++ bootstrapping is so much slower
- nimsuggest: auto-completion needs to work in 'class' macros
- The bitwise 'not' operator will be renamed to 'bnot' to
  prevent 'not 4 == 5' from compiling. -> requires 'mixin' annotation for procs!
- iterators always require a return type
- split docgen into separate tool
- special rule for ``[]=``, items, pairs
- BUG: echo with template `$`*(info: TLineInfo): expr = toFileLineCol(info)
- make 'nil' work for 'add':
  - resizeString
  - incrSeq
  - addChar


Concurrency
-----------

- test 'deepCopy' for closures
- implement 'foo[1..4] = spawn(f[4..7])'

Low priority:
- support for exception propagation? (hard to implement)
- the copying of the 'ref Promise' into the thead local storage only
  happens to work due to the write barrier's implementation


Misc
----

- prevent 'alloc(TypeWithGCedMemory)'


Bugs
====

- Can lead to wrong C code:

template cd*(dir: string, body: stmt) =
  ## Sets the current dir to ``dir``, executes ``body`` and restores the
  ## previous working dir.
  let lastDir = getCurrentDir()
  setCurrentDir(dir)
  try:
    body
  finally:
    setCurrentDir(lastDir)

proc test =
  cd dir:
    var output = execProcess("git tag")
    case meth
    of DownloadMethod.git:
      output = execProcess("git tag")
    of DownloadMethod.hg:
      output = execProcess("hg tags")
  if output.len > 0:
    case meth
    of DownloadMethod.git:
      result = @[]
      for i in output.splitLines():
        if i == "": continue
        result.add(i)
    of DownloadMethod.hg:
      result = @[]
      for i in output.splitLines():
        if i == "": continue
        var tag = ""
        discard parseUntil(i, tag, ' ')
        if tag != "tip":
          result.add(tag)
  else:
    result = @[]

- VM: Pegs do not work at compile-time
- VM: ptr/ref T cannot work in general
- blocks can "export" an identifier but the CCG generates {} for them ...
- ConcreteTypes in a 'case' means we don't check for duplicated case branches


version 0.9.x
=============

- pragmas need 'bindSym' support
- allow simple read accesses to global variables --> difficult to ensure that
  no data races happen
- pragmas need re-work: 'push' is dangerous, 'hasPragma' does not work
  reliably with user-defined pragmas
- memory manager: add a measure of fragmentation
- implement 'bits' pragmas
- we need a magic thisModule symbol
- optimize 'genericReset'; 'newException' leads to code bloat


version 0.9.X
=============

- macros as type pragmas
- document NimMain and check whether it works for threading

GC
==

- hybrid GC
- use big blocks in the allocator
- provide tool/API to track leaks/object counts
- resizing of strings/sequences could take into account the memory that
  is allocated


CGEN
====
- codegen should use "NIM_CAST" macro and respect aliasing rules for GCC
- ``restrict`` pragma + backend support