2014-09-11 19:55:25 +00:00
< table >
2014-10-10 23:29:54 +00:00
2014-09-11 19:55:25 +00:00
< tr >
< th > Language feature< / th >
< th > Scheduled for< / th >
< th > Notes< / th >
< / tr >
2015-01-28 18:35:30 +00:00
< tr >
< td > Automatic dereference in more contexts< / td >
< td > implemented but needs to be activated via the .experimental switch< / td >
< td > a.f() and f(a) are rewritten to f(a[]) if overloading resolution fails completely. This rewrite is only performed for the first argument< / td >
< / tr >
2014-09-11 19:55:25 +00:00
< tr >
2014-12-26 13:46:06 +00:00
< td > Implement static[T] properly< / td >
< td > for version 1.0< / td >
< td > The implementation has lots of issues, but what's worse the spec is not nearly clear enough and seems to conflate 2 different ideas.< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > asFunc pragma< / td >
2014-12-26 13:46:06 +00:00
< td > After 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > provides a nice bridge from 'var T' to 'returns T'; can be entirely implemented as a macro with the upcoming types API
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Pragmas are not supported for 'bindSym'< / td >
2014-12-26 13:46:06 +00:00
< td > after 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > this makes clean macros impossible to write when it comes to pragmas< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Alias analysis needs to specified and controllable with pragmas< / td >
< td > after 1.0< / td >
< td > alias analysis affects memory safety rules< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Destructors need to interact with finalizers< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
2014-12-26 13:46:06 +00:00
< td > destructors and finalizers are implemented, but do not interact. < tt class = "docutils literal" > < span class = "pre" > new< / span > < / tt > which takes a finalizer needs to be deprecated. People should use a destructor instead. However, destructors should ultimately depend on an escape analysis.< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > < tt class = "docutils literal" > < span class = "pre" > ~< / span > < / tt > Operator for effects< / td >
< td > after 1.0< / td >
< td > it is not entirely clear what < tt class = "docutils literal" > < span class = "pre" > ~F< / span > < / tt > should mean.< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Prevent object branch transitions from low(selector)< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
< td > 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.< / td >
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Push pragma needs to be reworked< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > it should be distinguished between 'push' for 'type', 'proc' etc.< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Returning 'var T' is unsafe and needs static analysis to make safe< / td >
< td > after 1.0< / td >
< td > the compiler already checks for trivial examples< / td >
< / tr >
< tr >
< td > Some effects like < tt class = "docutils literal" > < span class = "pre" > GCMem< / span > < / tt > don't need to be white-listed< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
< td > unclear whether this only affects built-in properties like < tt class = "docutils literal" > < span class = "pre" > GCMem< / span > < / tt > , < tt class = "docutils literal" > < span class = "pre" > Recursive< / span > < / tt > .< / td >
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Term rewriting macros need more love< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > we need much more tests and use them in production< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Weaken the requirements for forward declarations< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > two different design ideas exist: one conservative and so will work, the other highly experimental< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Write tracking< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
2014-10-10 23:29:54 +00:00
< td > algorithm exists. Can be extended to compute lent pointers.< / td >
2014-09-11 19:55:25 +00:00
< / tr >
2014-10-10 23:29:54 +00:00
< / table >
< br >
< table >
2014-09-11 19:55:25 +00:00
< tr >
< th > Compiler feature< / th >
< th > Scheduled for< / th >
< th > Notes< / th >
< / tr >
2014-10-10 23:29:54 +00:00
< tr >
< td > High level optimizer< / td >
2014-09-11 19:55:25 +00:00
< td > after 1.0< / td >
< td > use the effect system for optimizations; interacts with TR macros;
performs:< ul >
< li > GCSE< / li >
< li > loop invariant hoisting< / li >
< li > escape analysis for string/seq< / li >
< li > inlining of small lambdas< / li >
< / ul >
< / td >
< / tr >
< tr >
< td > GPU backend< / td >
< td > after 1.0< / td >
< / tr >
2014-10-10 23:29:54 +00:00
< tr > < td > Pure RC'ing GC< / td >
2014-12-26 13:46:06 +00:00
< td > unknown< / td >
2014-10-10 23:29:54 +00:00
< td > important for better interoperability with Objective-C< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< tr >
2014-10-10 23:29:54 +00:00
< td > Symbol files< / td >
< td > after 1.0< / td >
< td > symbol files provide true incremental compilation beyond the caching of generated C code< / td >
2014-09-11 19:55:25 +00:00
< / tr >
< / table >