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