12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- version 1.0 battle plan
- =======================
- - make 'not nil' the default (produce warnings instead of errors for
- a smooth migration path)
- - case objects needs to be safe and need to support pattern matching
- - implement a way to forward object type declarations across module
- boundaries; C++ style
- - fix "high priority" bugs
- - try to fix as many compiler crashes as reasonable
- Not critical for 1.0
- ====================
- - get GC:v2 stable: nim c --gc:v2 -r -d:useSysAssert -d:useGcAssert -d:smokeCycles -d:useRealtimeGc tests/gc/gctest
- - find a solution for the x.f[T](y) gotcha
- - implement ``.delegate`` for .experimental
- - Destructors need to be refined.
- - annotation support for getType()
- - ``concept`` needs to be refined, a nice name for the feature is not enough.
- - make '--implicitStatic:on' the default; then we can also clean up the
- 'static[T]' mess in the compiler!
- - ``not`` or ``~`` for the effects system
- - document and stress test ``.partial`` object declarations
- - 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
- - 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)'?
- - 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
- - blocks can "export" an identifier but the CCG generates {} for them ...
- - ConcreteTypes in a 'case' means we don't check for duplicated case branches
- GC
- ==
- - use slightly bigger blocks in the allocator
- - resizing of strings/sequences could take into account the memory that
- is allocated
- Concurrency
- ===========
- - 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
|