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

              
                                                            



                                                                             

                                                                       
 
                                                    
                                                  

 

           
 
                                                                   
                                                    
                            
                                                    
                                                             

                                                                                
                                        
                                 

                                                                           



                            
 
 


           
                              
                                        



                                                                    





                                                           
                                     
 
 


    





































                                                                        

                                      
                                                                         
                                                                             
 
 
             

             
                                

                                                                             

                                                                      
                                                
                          
                                   
                                                             
 




                        
                                                           



  
           
                                 







                                                                        
                                       
version 0.11.4
==============

- document special cased varargs[untyped] and varargs[typed]
- The remaining bugs of the lambda lifting pass that is responsible to enable
  closures and closure iterators need to be fixed.
- ``concept`` needs to be refined, a nice name for the feature is not enough.
- Destructors need to be refined.
- make '--implicitStatic:on' the default; then we can also clean up the
  'static[T]' mess in the compiler!

- add "all threads are blocked" detection to 'spawn'
- Deprecate ``immediate`` for templates and macros


version 1.0
===========

- map ``string`` and ``seq`` to ``std::string`` and ``std::vector``
- macro support for '='; bind '=' to a memory region
- remove   echo $foo  gotcha
- figure out why C++ bootstrapping is so much slower
- nimsuggest: auto-completion needs to work in 'class' macros
- The bitwise 'not' operator will be renamed to 'bnot' to
  prevent 'not 4 == 5' from compiling. -> requires 'mixin' annotation for procs!
- iterators always require a return type
- split docgen into separate tool
- special rule for ``[]=``, items, pairs
- BUG: echo with template `$`*(info: TLineInfo): expr = toFileLineCol(info)
- make 'nil' work for 'add':
  - resizeString
  - incrSeq
  - addChar


Concurrency
-----------

- test 'deepCopy' for closures
- 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


Misc
----

- prevent 'alloc(TypeWithGCedMemory)'


Bugs
====

- Can lead to wrong C code:

template cd*(dir: string, body: stmt) =
  ## Sets the current dir to ``dir``, executes ``body`` and restores the
  ## previous working dir.
  let lastDir = getCurrentDir()
  setCurrentDir(dir)
  try:
    body
  finally:
    setCurrentDir(lastDir)

proc test =
  cd dir:
    var output = execProcess("git tag")
    case meth
    of DownloadMethod.git:
      output = execProcess("git tag")
    of DownloadMethod.hg:
      output = execProcess("hg tags")
  if output.len > 0:
    case meth
    of DownloadMethod.git:
      result = @[]
      for i in output.splitLines():
        if i == "": continue
        result.add(i)
    of DownloadMethod.hg:
      result = @[]
      for i in output.splitLines():
        if i == "": continue
        var tag = ""
        discard parseUntil(i, tag, ' ')
        if tag != "tip":
          result.add(tag)
  else:
    result = @[]

- VM: Pegs do not work at compile-time
- VM: ptr/ref T cannot work in general
- blocks can "export" an identifier but the CCG generates {} for them ...
- ConcreteTypes in a 'case' means we don't check for duplicated case branches


version 0.9.x
=============

- pragmas need 'bindSym' support
- allow simple read accesses to global variables --> difficult to ensure that
  no data races happen
- pragmas need re-work: 'push' is dangerous, 'hasPragma' does not work
  reliably with user-defined pragmas
- memory manager: add a measure of fragmentation
- implement 'bits' pragmas
- we need a magic thisModule symbol
- optimize 'genericReset'; 'newException' leads to code bloat


version 0.9.X
=============

- macros as type pragmas
- document NimMain and check whether it works for threading

GC
==

- hybrid GC
- use big blocks in the allocator
- provide tool/API to track leaks/object counts
- resizing of strings/sequences could take into account the memory that
  is allocated


CGEN
====
- codegen should use "NIM_CAST" macro and respect aliasing rules for GCC
- ``restrict`` pragma + backend support