c2nim tool added
This commit is contained in:
parent
c441cdb64c
commit
d10973adb0
28 changed files with 3498 additions and 66 deletions
155
todo.txt
Executable file
155
todo.txt
Executable file
|
|
@ -0,0 +1,155 @@
|
|||
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
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue