summary refs log blame commit diff stats
path: root/todo.txt
blob: 553efb8849aa179c060d62896329fa2062ddd152 (plain) (tree)


























































































































































                                                                              
For version 0.8.10
==================

- fix exception handling
- fix implicit generic routines
- fix the streams implementation so that they use methods


TO IMPLEMENT
============

* fix overloading resolution
* wrong co-/contravariance
* startsWith `=^`
* endsWith `=$`
* ignore case `=?` --> `=$?`

Bugs
----
- proc (x: int) is passable to proc (x: var int)  !?
- detected by pegs module 64bit: p(result, result) should use a temporary!
- seq[TLoc] in C code generator always failed --> probably some reference
  counting is wrong; try to reproduce this in the GC test
- the parser allows empty object case branches
- SDL event handling
- accurate file/line information


To implement
------------

* icon installation for the Windows installer
* sort routine
* hash tables and sets
* the two other parsers
* distinct types for array/seq indexes
* constant sequences
* IMPLEMENT GENERIC TYPES!
  - implement expr parameters
  - document generic types better

* implement closures for the C code generator



Low priority
------------
- resizing of strings/sequences could take into account the memory that
  is allocated
- implicit conversions from ``ptr/ref T`` to ``var T`` (from
  ``ptr/ref T`` to ``T``)?
- documentation: type converters
- typeAllowed() for parameters...
- 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
- implement better error handling: errornous top level statements are ignored
  and not part of the symbal table --> for REPL
  --> this needs deletion operation for symbol table!
- floating point checks for EcmaScript
- enhance `` notation for identifier concatenation: `concat` a `these`
- prefer proc in current module over other procs with same overloading result?
- real types for template results
- generalized case statement (requires better transf)
- normalize for the DOM
- script layer!
- tlastmod returns wrong results on BSD (Linux, MacOS X: works)
- nested tuple unpacking


Library
-------

- float formatting
- locale support
- conversion between character sets
- bignums
- ftp, smtp (and other internet protocols)

- finish json module: use coroutines for this!

- pdcurses bindings
- automate module: expect-like module for Nimrod

- 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!
  

For the next versions
=====================

- support for generation of dynamic libraries


Further ideas/nice to have
==========================

- queues additional to streams: have two positions (read/write) instead of one


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: ``is`` 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 

.. code-block:: nimrod
  var
    x: string = nil # initialized with invalid value!
  if not isNil(x):
    # now x 
  
- better for backwards compatibility: default nilable, but ``not nil``
  notation::
  
  type
    PWindow = ref TWindow not nil


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

- ``when T is int`` for generic code
- ``when validCode( proc ()  )`` for generic code
  
  
  when compiles:
    
  elif compiles: 
    

- macros: ``typecheck`` pragma; this allows transformations based on types!
- find a way for easy constructors and destructors; (destructors are much more
  important than constructors)
- code generated for type information is wasteful


RST
---
- footnotes; prefix :i: whitespace before :i:, _reference, `reference`__
  __ anonymous: www.nimrod.org