nim-wiki/Roadmap.md

4.6 KiB

Language feature Scheduled for Notes
Automatic dereference in more contexts cancelled important to be able to write more generic containers easily
Comment handling is weird implemented for 0.10.0 comments should be optional and not part of the grammar, unless it is a documentation comment
The new concurrency model implemented for 0.10.0 this requires frontend and backend changes, but no changes to the runtime/GC
asFunc pragma 0.9.8 provides a nice bridge from 'var T' to 'returns T'; can be entirely implemented as a macro with the upcoming types API
Extended macros API 0.9.8 missing: an API for working with types; the builtin getImpl
Pragmas are not supported for 'bindSym' 0.9.8 this makes clean macros impossible to write when it comes to pragmas
Support overloading of the assignment operator 0.9.8 like fields and destructors an assignment operator needs to be lifted
Type checking for tuples 0.9.8 needs to be refined. Recursive tuples should be forbidden.
Alias analysis needs to specified and controllable with pragmas after 1.0 alias analysis affects memory safety rules
Destructors need to interact with finalizers after 1.0 destructors and finalizers are implemented, but do not interact. new which takes a finalizer needs to be deprecated. People should use a destructor instead
~ Operator for effects after 1.0 it is not entirely clear what ~F should mean.
Prevent object branch transitions from low(selector) after 1.0 object branch transitions from low(selector) are allowed, because they are simply too useful, but can break memory safety. Now that the language has a proper notion of construction, we can make them safe.
Push pragma needs to be reworked after 1.0 it should be distinguished between 'push' for 'type', 'proc' etc.
Returning 'var T' is unsafe and needs static analysis to make safe after 1.0 the compiler already checks for trivial examples
Some effects like GCMem don't need to be white-listed after 1.0 unclear whether this only affects built-in properties like GCMem, Recursive.
Term rewriting macros need more love after 1.0 we need much more tests and use them in production
Weaken the requirements for forward declarations after 1.0 two different design ideas exist: one conservative and so will work, the other highly experimental
Write tracking after 1.0 algorithm exists. Can be extended to compute lent pointers.

Compiler feature Scheduled for Notes
Deterministic code generation 0.9.8 deterministic code generation makes C code caching much more effective
High level optimizer after 1.0 use the effect system for optimizations; interacts with TR macros; performs:
  • GCSE
  • loop invariant hoisting
  • escape analysis for string/seq
  • inlining of small lambdas
GPU backend after 1.0
Pure RC'ing GC after 1.0 important for better interoperability with Objective-C
Symbol files after 1.0 symbol files provide true incremental compilation beyond the caching of generated C code