summary refs log blame commit diff stats
path: root/todo.txt
blob: 7597c436afac04fbd411306b6936b078295c552b (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                       
 


                                                                    

                                                                   

                                                   

 

                    
 

                                                                                                                   
                                            
                                           
 
                                 



                                                                             
                                         
                                                           
                                                    
                                                         
                                                                                



                            
                                

                                                                      
                                                
                                   
                                                             
 
                                      


                                                                   
 
 



                                      

                                                                             
 



  
                                             



                                                                       


           







                                                                    


                                                                        
                                       
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