mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 12:07:51 +00:00
132 lines
3.8 KiB
Plaintext
Executable File
132 lines
3.8 KiB
Plaintext
Executable File
Version 0.8.14
|
|
==============
|
|
|
|
- optional indentation for 'case' statement
|
|
- test the sort implementation again
|
|
- export re-entrant and non-reentrant locks and condition vars; threads should
|
|
not have an inbox per default
|
|
- add --deadlock_prevention:on|off switch? timeout for locks?
|
|
- make threadvar efficient again on linux after testing
|
|
- ``pure`` --> ``noStackFrame``, ``noRtti``
|
|
|
|
|
|
version 0.9.0
|
|
=============
|
|
|
|
- unsigned ints and bignums
|
|
- 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
|
|
- ``=`` should be overloadable; requires specialization for ``=``
|
|
|
|
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]()``
|
|
- nice idea:
|
|
|
|
p(a, b):
|
|
echo a
|
|
echo b
|
|
|
|
is the same as:
|
|
|
|
p(a, b, proc() =
|
|
echo a
|
|
echo b)
|
|
|
|
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``
|
|
|
|
|