Version 0.8.14 ============== - optional indentation for 'case' statement - test the sort implementation again - fix the 'const' issues - threads should not have an inbox per default - make threadvar efficient again on linux after testing version 0.9.0 ============= - unsigned ints and bignums - warning for implicit openArray -> varargs convention - implement explicit varargs - tests: run the GC tests - change overloading resolution - implement closures; implement proper coroutines - make exceptions compatible with C++ exceptions - ``=`` should be overloadable; requires specialization for ``=`` Bugs ---- - bug: generic assign still buggy - Optimization: If we use a temporary for the result anyway the code gen should make use of this fact to generate better code... - bug: memset() without type field initialization? - special case the generic assign that needs to care about case objects version 0.9.XX ============== - GC: marker procs for native Nimrod GC and Boehm GC; precise stack marking - implicit ref/ptr->var conversion; the compiler may store an object implicitly on the heap for write barrier efficiency; better: proc specialization in the code gen - find a way to reintroduce the cleanup() pass for C code generation: this is hard because of partial evaluation --> symbol files will fix this as a side effect - EcmaScript needs a new and better code gen: simply adapt the C code gen to it - tlastmod returns wrong results on BSD (Linux, MacOS X: works) - nested tuple unpacking - 'nimrod def': does not always work? - test branch coverage - checked exceptions - fix implicit generic routines - think about ``{:}.toTable[int, string]()`` - nice idea: p(a, b): echo a echo b is the same as: p(a, b, proc() = echo a echo b) Library ------- - proper URL-parser - wrappers for poppler; libharu - radix tree for strings; maybe suffix tree - locale support - bignums - ftp (and other internet protocols) - pdcurses bindings - for system: proc `@` [T](a: openArray[T]): seq[T] = newSeq(result, a.len) for i in 0..a.len-1: result[i] = a[i] --> ensure @[] calls the array version! Low priority ------------ - ``with proc `+`(x, y: T): T`` for generic code - find a way for easy constructors and destructors; (destructors are much more important than constructors) - code generated for type information is wasteful - resizing of strings/sequences could take into account the memory that is allocated - timeout for locks Version 2 ========= - language change: inheritance should only work with reference types, so that the ``type`` field is not needed for objects! --> zero overhead aggregation BETTER: ``of`` and safe object conversions only work with ref objects. Same for multi methods. - explicit nil types? * nil seq[int] * nil string * nil ref int * nil ptr THallo * nil proc - better for backwards compatibility: default nilable, but ``not nil`` notation: type PWindow = ref TWindow not nil The problem with ``nil`` is that the language currently relies on it for implicit initialization. Initialization is different from assignment. The issues can "easily" dealt with by ensuring: var x = myProc() # checks myProc() initializes every pointer explicitely - the two other parsers - generalized case statement (requires better transf) - rethink the syntax: distinction between expr and stmt is unfortunate; indentation handling is quite complex too; problem with exception handling is that often the scope of ``try`` is wrong and apart from that ``try`` is a full blown statement; a ``try`` expression might be a good idea to make error handling more light-weight people also want ``inc a; inc b``