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

              
 
                                                         
                                           

                                                       

                                                                              




             
                                                             

                                                      
                         
                               
                                                 
                                                
 

    
                                 

                                                                          
                                                    
                                                                         
 
 

              
 
                                                                           
                                                                    

                                                               


                                                                          
                                                                               
                                                               
                        
                                     

                      
                               
                                            



       

                               
                                           
                
         
                                    
 
                   






                                          

 


            
                                                


                                                                              

                                                                       

 
         
         


                                                                             
                                                                             








                     
                                                                      
           


                                 






                                                                            
                       
                                                     
                                                                        



                                                                            
                                   

 
Version 0.8.14
==============

- ``var T`` as a return type: add ``modGet`` for generics
- optional indentation for 'case' statement
- make threadvar efficient again on linux after testing
- test the sort implementation again
- export re-entrant and non-reentrant locks and condition vars; threads should
  not have an inbox per default


version 0.9.0
=============

- add --deadlock_prevention:on|off switch? timeout for locks?
- warning for implicit openArray -> varargs convention
- implement explicit varargs
- tests: run the GC tests
- change overloading resolution
- implement closures; implement proper coroutines
- make exceptions compatible with C++ exceptions

Bugs
----
- bug: generic assign still buggy
  - Optimization: If we use a temporary for the result anyway the code gen
    should make use of this fact to generate better code...
  - bug: memset() without type field initialization?
  - special case the generic assign that needs to care about case objects


version 0.9.XX
==============

- GC: marker procs for native Nimrod GC and Boehm GC; precise stack marking
- implicit ref/ptr->var conversion; the compiler may store an object
  implicitly on the heap for write barrier efficiency; better: 
  proc specialization in the code gen
- find a way to reintroduce the cleanup() pass for C code generation: this
  is hard because of partial evaluation --> symbol files will fix this as
  a side effect
- EcmaScript needs a new and better code gen: simply adapt the C code gen to it
- tlastmod returns wrong results on BSD (Linux, MacOS X: works)
- nested tuple unpacking
- 'nimrod def': does not always work?
- test branch coverage
- checked exceptions
- fix implicit generic routines
- think about ``{:}.toTable[int, string]()``

Library
-------

- proper URL-parser
- wrappers for poppler; libharu
- radix tree for strings; maybe suffix tree
- locale support
- bignums
- ftp (and other internet protocols)

- pdcurses bindings

- for system:
  proc `@` [T](a: openArray[T]): seq[T] = 
    newSeq(result, a.len)
    for i in 0..a.len-1: result[i] = a[i]
    
  --> ensure @[] calls the array version!


Low priority
------------

- ``with proc `+`(x, y: T): T`` for generic code
- find a way for easy constructors and destructors; (destructors are much more
  important than constructors)
- code generated for type information is wasteful
- resizing of strings/sequences could take into account the memory that
  is allocated


Version 2
=========

- language change: inheritance should only work with reference types, so that
  the ``type`` field is not needed for objects! --> zero overhead aggregation
  BETTER: ``of`` and safe object conversions only work with ref objects. Same
  for multi methods.
  
- explicit nil types?
  * nil seq[int]
  * nil string
  * nil ref int
  * nil ptr THallo
  * nil proc 

- better for backwards compatibility: default nilable, but ``not nil``
  notation:
  
  type
    PWindow = ref TWindow not nil
    
  The problem with ``nil`` is that the language currently relies on it for
  implicit initialization. Initialization is different from assignment. The
  issues can "easily" dealt with by ensuring:
  
    var x = myProc() # checks myProc() initializes every pointer explicitely
    
- the two other parsers
- generalized case statement (requires better transf)
- rethink the syntax: distinction between expr and stmt is unfortunate; 
  indentation handling is quite complex too; problem with exception handling
  is that often the scope of ``try`` is wrong and apart from that ``try`` is
  a full blown statement; a ``try`` expression might be a good idea to make
  error handling more light-weight
  people also want ``inc a; inc b``
f result.len > 1: result.add(", ") result.add($key) result.add("}") proc `$`*(s: TIntSet): string = ## The `$` operator for int sets. dollarImpl() iterator items*(s: TIntSet): int {.inline.} = ## iterates over any included element of `s`. var r = s.head while r != nil: var i = 0 while i <= high(r.bits): var w = r.bits[i] # taking a copy of r.bits[i] here is correct, because # modifying operations are not allowed during traversation var j = 0 while w != 0: # test all remaining bits for zero if (w and 1) != 0: # the bit is set! yield (r.key shl TrunkShift) or (i shl IntShift +% j) inc(j) w = w shr 1 inc(i) r = r.next when isMainModule: var x = initIntSet() x.incl(1) x.incl(2) x.incl(7) x.incl(1056) for e in items(x): echo e