summary refs log tree commit diff stats
path: root/todo.txt
diff options
context:
space:
mode:
Diffstat (limited to 'todo.txt')
-rw-r--r--todo.txt218
1 files changed, 184 insertions, 34 deletions
diff --git a/todo.txt b/todo.txt
index 44050d637..3e80ba6f1 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,6 +1,13 @@
 TO IMPLEMENT
 ============
 
+Plan
+----
+
+* implement new memory manager --> hopefully faster turnaround times
+* implement LLVM backend --> faster turnaround times
+
+
 RST
 ---
 - footnotes; prefix :i: whitespace before :i:, _reference, `reference`__
@@ -9,55 +16,181 @@ RST
 Bugs
 ----
 
+- BUG: check if "break" is valid is not complete: "break" within "for"
+  may be incorrect, if the called iterator is not in a loop
+  --> check that "yield" is inside a loop!
+- BUG: returning an array does not work --> see md5.nim module
+- BUG: if not nodeOfDegree(g, 1) >= 0: inc(counter)
 - BUG: addr/deref may not work when interpreting
 - BUG: the parser allows empty object case branches
 - BUG: when optmizing cgen.c with Visual C++, GCC, LLVM (O3), it breaks.
 - BUG: ``-cc:bcc`` command line option does not error
 - BUG: symbol files still do not work
 - BUG: tlastmod returns wrong results on BSD (Linux, MacOS X: works)
-- BUG: sigmatch for ``len`` matches the open array too often... (?)
 
 
 High priority
 -------------
 
+- typeAllowed() for parameters...
+- implicit conversions from ``ptr/ref T`` to ``var T`` and from
+  ``ptr/ref T`` to ``T``? Yes.
+- implement generic types
 - implement tuple unpacking
 - implement closures for the C code generator
-- implement a better memory manager
-- implement stack walking via assembler for horribly advanced optimizers
-
-- documentation: ``[]`` overloading, type convertions,
-  anonymous procs, ``len(s) == s.len``, type converters
+- documentation: type converters
 - implement two-phase lookup for generics (this is hard...): This is useful
   for macros too! Alternative: Explicit early name binding. Both are hard to
   implement
-- get rid of ``nkHiddenStdConv`` in several places: this mechanism caused more
-  bugs than it ever solved!
+- language change: inheritance should only work with reference types, so that
+  the ``type`` field is not needed for objects! --> zero overhead aggregation
+
+For the next versions
+=====================
+
+- multi-processor support
+- IDE
+- better support for GDB?
+- support for generation of dynamic libraries
+- better code generator: skip ropes datastructure, it uses too much memory
+- make set optimizations part of the transformation (--> all backends profit
+  from it), but this really needs a more abstract code generator
+
+
+Further ideas/nice to have
+==========================
+
+- queues additional to streams: have to positions (read/write) instead of one
+- introduce: refany type???
+- CLR code generator; better use XYZ? --> Version 1.2?
+- provide an interactive shell: if the user wants his commands
+  to be executed, the command should end with #
+- implement packed arrays (bit arrays)/ packed records
+- implement tables (implement as library? - no! Builtin because of
+  constructor syntax is nice to have)
+
+
+Version 2
+---------
+
+- language support for aggregation: 
+  type
+    TMyObject = object 
+      x: TOtherObject
+      
+  --> can be done via type converters elegantly
+  
+
+- type tags: 
+  type
+    sqlString* = type string
+
+  everywhere where a string is expected, a "sqlString" is allowed, but not
+  vice versa. However, this causes problems: 
+  
+  type
+    TDollar = type decimal
+    
+  TDollar * int --> allowed
+  TDollar div int --> allowed
+  TDollar + int --> not allowed
+  TDollar + TEuro --> not allowed, or implicit conversion
+
+  --> Explicit converters are probably flawed
+
+- 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 compability: default nilable, but prefix ``!`` operator
+  to specify that null is not allowed
+  
+  type
+    PWindow = ! ref TWindow
+    
 
 
 Library
 -------
-- xml, html, url, fastcgi: implement from scratch
-- socket library (does SDL for us?)
+
+- gui module
+- finish json module: hard
+- socket, http, ftp, email, fastcgi: implement from scratch
+- ncurses bindings
 - osproc for Windows
 - bignums
 - python
+- TCL
+- automate module: expect-like module for Nimrod
+- parsecsv module
+
+- YAML module
 
 
 Low priority
 ------------
 
+- ``when T is int`` for generic code
+- ``when validCode( proc ()  )`` for generic code
+  
+  when compiles:
+    
+  elif compiles: 
+    
+
+- copy more of C++'s object modell?
+- syntactic sugar for OOP: 
+
+  type
+    TObj* = object
+      fx = 0.nat
+      fy = 0.nat
+      s = ""
+      proc setX(var, val: int) = my.fx = val
+      proc getX: int = return my.fx
+
+      `x=`: proc (var, val: int) = setX
+      x: proc: int = getX
+      
+      proc q*(query: int): int = 
+        # implicit "my: TObj" parameter
+        # variables are looked up automatically:
+        return fx
+              
+      proc setEvent(var, e: TEvent): int = 
+        # implicit "my: var TObj" parameter
+        nil
+        
+      proc init(var) = 
+        # constructor
+        nil
+        
+  o.x = 13 # ambigious
+
+- implement stack walking via assembler for horribly advanced optimizers
 - use `` notation for identifier concatenation?
 - Visual C++: emit ``default: __assume(0);`` for optimization
 - macros: ``typecheck`` pragma; this is really a good idea! This allows
   transformations based on types!
 - make callconv a set
 - partial generic instantation is missing
-- commas are not optional any longer as this may lead to bugs (which?)
 - get code generation for C++ exception handling right!
 - find a way for easy constructors and destructors; though constructors are
   flawed... destructors are not, however!
-- multiple dispatch
+- multiple dispatch: no, but provide a proc ``typeId`` to allow the user to
+  implement it efficiently
+- replace ropes with strings in the C code generator: This may yield a HUGE
+  speedup of the compiler! (10%)
+- code generated for type information is wasteful
 
 
 Changelog
@@ -369,27 +502,44 @@ Changelog
   resolutions
 - ``macros`` are no longer part of the ``system`` module, to use macros you 
   have to import the ``macros`` module
+0.7.5
+- GC now uses the simpler "markStackAndRegisters" version
+- fixed a bug that kept the "recursive modules" example from working
+- docgen: changed ``<blockquote>`` to ``<blockquote><p>`` to generate valid
+  HTML
+- BUGFIX: ``nkCommand``, etc. supported by the C code generator for statements
+- ``addf`` for ``strutils``
+- added common regular expressions for regexprs
+- BUGFIX: ``g.show(name="VC", vc)`` 
+  Error: cannot bind parameter 'name' twice
+- BUGFIX: got rid of debug output in sigmatch module
+- implemented ``nkMacroStmt``
+- ``findSubStr``, ``findChars`` deprecated: use ``find`` instead; the library
+  has already been adapted
+- deprecated items are now warned for
+- BUGFIX: octal numbers with the prefix ``0c`` are now properly supported
+- posix module now declares socket stuff
+- new ``terminal`` module
+- BUGFIX: ``parseInt``, ``ParseBiggestInt`` now throw an exception if the
+  string does not end after the parsed number 
+- libcurl wrapper library
+- BUGFIX: ``semEnum``: enumerations now may start with negative values
+- started ``web`` library
+- added ``system.pop`` built-in for sequences
+- added ``parsexml`` module
+- BUGFIX: c.p.owner is now never nil
+- the scoping rules for ``for``, ``while``, ``if``, ``case`` changed
+  in a subtle way to support the new ``=~`` template
+- BUGFIX: generated ``nimcache`` directory never ends in a slash
+- BUGFIX: ``createDir`` now works for global directories under 
+  UNIX "/somepath/here"
+- BUGFIX: now executes the executable with "./" &exe under UNIX
+- added ``strutils.addSep`` proc
+- BUGFIX: constant array of procs
+- BUGFIX: elif in case statements 
+- mysql, sqlite3 interface
+- md5 module
+- BUGFIX: iterators using open arrays
+- BUGFIX: [$anyEnum]
 
 
-For the next versions
-=====================
-
-- multi-processor support
-- IDE
-- better support for GDB?
-- support for generation of dynamic libraries
-- better code generator: skip ropes datastructure, it uses too much memory
-- make set optimizations part of the transformation (--> all backends profit
-  from it), but this really needs a more abstract code generator
-
-
-Further ideas/nice to have
-==========================
-
-- introduce: refany type???
-- CLR code generator; better use XYZ? --> Version 1.2?
-- provide an interactive shell: if the user wants his commands
-  to be executed, the command should end with #
-- implement packed arrays (bit arrays)/ packed records
-- implement tables (implement as library? - no! Builtin because of
-  constructor syntax is nice to have)