mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
77 lines
2.4 KiB
Plaintext
77 lines
2.4 KiB
Plaintext
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
|
|
- 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
|