essential for 1.0 ================= - introduce newSeqOfCap(10) - 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 - document NimMain and check whether it works for threading - remove echo $foo gotcha - ``not`` or ``~`` for the effects system Not critical for 1.0 ==================== - figure out why C++ bootstrapping is so much slower - The bitwise 'not' operator cold be renamed to 'bnot' to prevent 'not 4 == 5' from compiling. -> requires 'mixin' annotation for procs! - make 'nil' work for 'add': - resizeString - incrSeq - addChar - 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 - we need a magic thisModule symbol - optimize 'genericReset'; 'newException' leads to code bloat - prevent 'alloc(TypeWithGCedMemory)'? - split docgen into separate tool; not happy how it worked with ``nimsuggest`` though - map ``string`` and ``seq`` to ``std::string`` and ``std::vector`` - macro support for '='; bind '=' to a memory region - macros as type pragmas Bugs ==== - 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 - BUG: echo with template `$`*(info: TLineInfo): expr = toFileLineCol(info) 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 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 CGEN ==== - codegen should use "NIM_CAST" macro and respect aliasing rules for GCC - ``restrict`` pragma + backend support