139 lines
3.8 KiB
Text
Executable file
139 lines
3.8 KiB
Text
Executable file
- clean up the tests!
|
|
|
|
|
|
High priority (version 0.9.0)
|
|
=============================
|
|
|
|
- fix implicit generic routines
|
|
- fix the streams implementation so that it uses methods
|
|
- fix overloading resolution
|
|
- wrong co-/contravariance
|
|
- make ^ available as operator
|
|
|
|
|
|
Bugs
|
|
----
|
|
- proc (x: int) is passable to proc (x: var int) !?
|
|
- the parser allows empty object case branches
|
|
- Exception matching needs to take subclasses into account
|
|
- pegs: the anchor '^' does not work because many procs use a linear search
|
|
and matchLen()
|
|
- 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...
|
|
|
|
|
|
To implement
|
|
------------
|
|
|
|
* hash tables and sets; count tables; ordered dicts
|
|
* distinct types for array/seq indexes
|
|
* constant sequences
|
|
|
|
* implement closures for the C code generator
|
|
* GC: marker procs for native Nimrod GC and Boehm GC
|
|
* thread support: threadvar on Windows seems broken;
|
|
add --deadlock_prevention:on|off switch
|
|
* built-in serialization
|
|
|
|
|
|
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``)?
|
|
- 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
|
|
- 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)
|
|
- tlastmod returns wrong results on BSD (Linux, MacOS X: works)
|
|
- nested tuple unpacking; no auto-unpacking in 'for' loops!
|
|
- better error messages for used keywords as identifiers
|
|
- case statement branches should support constant sets
|
|
- 'nimrod def': does not always work
|
|
- test branch coverage
|
|
- checked exceptions
|
|
- slicing
|
|
|
|
|
|
Library
|
|
-------
|
|
|
|
- locale support
|
|
- conversion between character sets
|
|
- bignums
|
|
- ftp (and other internet protocols)
|
|
|
|
- pdcurses bindings
|
|
- queues additional to streams: have two positions (read/write) instead of one
|
|
|
|
- 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!
|
|
|
|
|
|
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
|
|
|
|
- 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
|
|
|
|
|
|
Low priority
|
|
------------
|
|
|
|
- ``when T is int`` for generic code
|
|
- ``when validCode( proc () )`` for generic code
|
|
- 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
|
|
|
|
|
|
Other ideas
|
|
-----------
|
|
- startsWith `=^`
|
|
- endsWith `=$`
|
|
- ignore case `=?` --> `=$?` too?
|
|
|
|
|
|
RST
|
|
---
|
|
- footnotes; prefix :i: whitespace before :i:, _reference, `reference`__
|
|
__ anonymous: www.nimrod.org
|
|
- rewrite the parser to use the new better look ahead technique that c2nim
|
|
uses
|
|
|
|
|