From d285e8a69d1bb6ec2abf84c1e68b38b95ca28ef3 Mon Sep 17 00:00:00 2001 From: Kentoseth Date: Fri, 10 Oct 2014 16:29:54 -0700 Subject: [PATCH] Split the tables, versioned all the data clearly, added some punctuation. --- Roadmap.md | 169 ++++++++++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 81 deletions(-) diff --git a/Roadmap.md b/Roadmap.md index 7881188..4ee69b6 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -1,4 +1,5 @@ + @@ -7,68 +8,20 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -78,41 +31,95 @@ - - - + + + - - - + + + - - - + + + - - - + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Language feature Scheduled for
Automatic dereference in more contexts0.9.6cancelled important to be able to write more generic containers easily
support overloading of the assignment operator0.9.8like fields and destructors an assignment operator needs to be lifted
destructors need to interact with finalizersafter 1.0destructors and finalizers are implemented, but do not interact. new which takes a finalizer needs to be deprecated. People should use a destructor instead
the new concurrency model0.9.6this requires frontend and backend changes, but no changes to the runtime/GC
weaken the requirements for forward declarationsafter 1.0two different design ideas exist: one conservative and so will work, the other highly experimental
comment handling is weird0.9.6Comment handling is weirdimplemented for 0.10.0 comments should be optional and not part of the grammar, unless it is a documentation comment
push pragma needs to be reworkedafter 1.0it should be distinguished between 'push' for 'type', 'proc' etc.
pragmas are not supported for 'bindSym'0.9.8this makes clean macros impossible to write when it comes to pragmas
type checking for tuples0.9.8needs to be refined. Recursive tuples should be forbidden.
extended macros API0.9.8missing: an API for working with types; the builtin getImpl
write trackingafter 1.0algorithm exists. Can be extended to compute lent pointers.The new concurrency modelimplemented for 0.10.0this requires frontend and backend changes, but no changes to the runtime/GC
prevent object branch transitions from low(selector)after 1.0object 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.Extended macros API0.9.8missing: an API for working with types; the builtin getImpl
~ operator for effectsafter 1.0it is not entirely clear what ~F should mean.Pragmas are not supported for 'bindSym'0.9.8this makes clean macros impossible to write when it comes to pragmas
some effects like GCMem don't need to be white-listedafter 1.0unclear whether this only affects built-in properties like GCMem, Recursive.Support overloading of the assignment operator0.9.8like fields and destructors an assignment operator needs to be lifted
returning 'var T' is unsafe and needs static analysis to make safeafter 1.0the compiler already checks for trivial examplesType checking for tuples0.9.8needs to be refined. Recursive tuples should be forbidden.
alias analysis needs to specified and controllable with pragmasAlias analysis needs to specified and controllable with pragmas after 1.0 alias analysis affects memory safety rules
term rewriting macros need more loveDestructors need to interact with finalizersafter 1.0destructors 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 effectsafter 1.0it is not entirely clear what ~F should mean.
Prevent object branch transitions from low(selector)after 1.0object 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 reworkedafter 1.0it should be distinguished between 'push' for 'type', 'proc' etc.
Returning 'var T' is unsafe and needs static analysis to make safeafter 1.0the compiler already checks for trivial examples
Some effects like GCMem don't need to be white-listedafter 1.0unclear 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 declarationsafter 1.0two different design ideas exist: one conservative and so will work, the other highly experimental
Write trackingafter 1.0algorithm exists. Can be extended to compute lent pointers.
+ +
+ + + @@ -120,7 +127,13 @@ - + + + + + + + - - - - - + + + + + - + - - - - - -
Compiler feature Scheduled for
high level optimizerDeterministic code generation0.9.8deterministic 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:
    @@ -132,26 +145,20 @@
pure RC'ing GCafter 1.0important for better interoperability with Objective-C
GPU backend after 1.0
Pure RC'ing GCafter 1.0important for better interoperability with Objective-C
symbol filesSymbol files after 1.0 symbol files provide true incremental compilation beyond the caching of generated C code
deterministic code generation0.9.8deterministic code generation makes C code caching much more effective