High priority (version 0.9.0) ============================= - fix implicit generic routines - fix the streams implementation so that it uses methods - fix overloading resolution - wrong co-/contravariance Bugs ---- - proc (x: int) is passable to proc (x: var int) !? - detected by pegs module 64bit: p(result, result) should use a temporary! - the parser allows empty object case branches - SDL event handling To implement ------------ * sort routine * hash tables and sets * the two other parsers * distinct types for array/seq indexes * constant sequences * implement closures for the C code generator Low priority ------------ - resizing of strings/sequences could take into account the memory that is allocated - implicit conversions from ``ptr/ref T`` to ``var T`` (from ``ptr/ref T`` to ``T``)? - documentation: type converters - typeAllowed() for parameters... - 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 - implement better error handling: errornous top level statements are ignored and not part of the symbal table --> for REPL --> this needs deletion operation for symbol table! - floating point checks for EcmaScript - enhance `` notation for identifier concatenation: `concat` a `these` - prefer proc in current module over other procs with same overloading result? - real types for template results - generalized case statement (requires better transf) - normalize for the DOM - tlastmod returns wrong results on BSD (Linux, MacOS X: works) - nested tuple unpacking - fast assignment optimization for TPeg Library ------- - float formatting - locale support - conversion between character sets - bignums - ftp (and other internet protocols) - pdcurses bindings - queues additional to streams: have two positions (read/write) instead of one - 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! 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: ``is`` 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 Low priority ------------ - ``when T is int`` for generic code - ``when validCode( proc () )`` for generic code - macros: ``typecheck`` pragma; this allows transformations based on types! - find a way for easy constructors and destructors; (destructors are much more important than constructors) - code generated for type information is wasteful Other ideas ----------- - startsWith `=^` - endsWith `=$` - ignore case `=?` --> `=$?` too? RST --- - footnotes; prefix :i: whitespace before :i:, _reference, `reference`__ __ anonymous: www.nimrod.org - rewrite the parser to use the new better look ahead technique that c2nim uses