todo.txt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. version 1.0 battle plan
  2. =======================
  3. - make 'not nil' the default (produce warnings instead of errors for
  4. a smooth migration path)
  5. - case objects needs to be safe and need to support pattern matching
  6. - implement a way to forward object type declarations across module
  7. boundaries; C++ style
  8. - fix "high priority" bugs
  9. - try to fix as many compiler crashes as reasonable
  10. Not critical for 1.0
  11. ====================
  12. - get GC:v2 stable: nim c --gc:v2 -r -d:useSysAssert -d:useGcAssert -d:smokeCycles -d:useRealtimeGc tests/gc/gctest
  13. - find a solution for the x.f[T](y) gotcha
  14. - implement ``.delegate`` for .experimental
  15. - Destructors need to be refined.
  16. - annotation support for getType()
  17. - ``concept`` needs to be refined, a nice name for the feature is not enough.
  18. - make '--implicitStatic:on' the default; then we can also clean up the
  19. 'static[T]' mess in the compiler!
  20. - ``not`` or ``~`` for the effects system
  21. - document and stress test ``.partial`` object declarations
  22. - figure out why C++ bootstrapping is so much slower
  23. - The bitwise 'not' operator cold be renamed to 'bnot' to
  24. prevent 'not 4 == 5' from compiling. -> requires 'mixin' annotation for procs!
  25. - make 'nil' work for 'add':
  26. - resizeString
  27. - incrSeq
  28. - addChar
  29. - pragmas need 'bindSym' support
  30. - pragmas need re-work: 'push' is dangerous, 'hasPragma' does not work
  31. reliably with user-defined pragmas
  32. - memory manager: add a measure of fragmentation
  33. - we need a magic thisModule symbol
  34. - optimize 'genericReset'; 'newException' leads to code bloat
  35. - prevent 'alloc(TypeWithGCedMemory)'?
  36. - map ``string`` and ``seq`` to ``std::string`` and ``std::vector``
  37. - macro support for '='; bind '=' to a memory region
  38. - macros as type pragmas
  39. Bugs
  40. ====
  41. - VM: Pegs do not work at compile-time
  42. - blocks can "export" an identifier but the CCG generates {} for them ...
  43. - ConcreteTypes in a 'case' means we don't check for duplicated case branches
  44. GC
  45. ==
  46. - use slightly bigger blocks in the allocator
  47. - resizing of strings/sequences could take into account the memory that
  48. is allocated
  49. Concurrency
  50. ===========
  51. - implement 'foo[1..4] = spawn(f[4..7])'
  52. Low priority:
  53. - support for exception propagation? (hard to implement)
  54. - the copying of the 'ref Promise' into the thead local storage only
  55. happens to work due to the write barrier's implementation
  56. CGEN
  57. ====
  58. - codegen should use "NIM_CAST" macro and respect aliasing rules for GCC
  59. - ``restrict`` pragma + backend support