Updated Roadmap (markdown)

This commit is contained in:
Araq 2014-09-11 12:55:25 -07:00
parent bef2d4ad7e
commit 63bc7757fa
1 changed files with 157 additions and 272 deletions

View File

@ -1,133 +1,74 @@
<table> <table>
<tr> <tr>
<th>Language feature</th> <th>Language feature</th>
<th>Scheduled for</th> <th>Scheduled for</th>
<th>Notes</th> <th>Notes</th>
</tr> </tr>
<tr> <tr>
<td>Automatic dereference in more contexts</td> <td>Automatic dereference in more contexts</td>
<td>0.9.6</td> <td>0.9.6</td>
<td>important to be able to write more generic containers easily</td> <td>important to be able to write more generic containers easily</td>
</tr> </tr>
<tr> <tr>
<td>support overloading of the assignment operator</td> <td>support overloading of the assignment operator</td>
<td>0.9.8</td>
<td>0.9.6</td>
<td>like <tt class="docutils literal"><span class="pre">fields</span></tt> and destructors an assignment operator needs to be lifted</td> <td>like <tt class="docutils literal"><span class="pre">fields</span></tt> and destructors an assignment operator needs to be lifted</td>
</tr> </tr>
<tr> <tr>
<td>destructors need to interact with finalizers</td> <td>destructors need to interact with finalizers</td>
<td>after 1.0</td>
<td>0.9.6</td>
<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</td> <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</td>
</tr> </tr>
<tr> <tr>
<td>the new concurrency model</td> <td>the new concurrency model</td>
<td>0.9.6</td> <td>0.9.6</td>
<td>this requires frontend and backend changes, but no changes to the runtime/GC</td> <td>this requires frontend and backend changes, but no changes to the runtime/GC</td>
</tr> </tr>
<tr> <tr>
<td>weaken the requirements for forward declarations</td> <td>weaken the requirements for forward declarations</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>two different design ideas exist: one conservative and so will work, the other highly experimental</td> <td>two different design ideas exist: one conservative and so will work, the other highly experimental</td>
</tr> </tr>
<tr> <tr>
<td>comment handling is weird</td> <td>comment handling is weird</td>
<td>0.9.6</td> <td>0.9.6</td>
<td>comments should be optional and not part of the grammar, unless it is a documentation comment</td> <td>comments should be optional and not part of the grammar, unless it is a documentation comment</td>
</tr> </tr>
<tr> <tr>
<td>push pragma needs to be reworked</td> <td>push pragma needs to be reworked</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>it should be distinguished between 'push' for 'type', 'proc' etc.</td> <td>it should be distinguished between 'push' for 'type', 'proc' etc.</td>
</tr> </tr>
<tr> <tr>
<td>pragmas are not supported for 'bindSym'</td> <td>pragmas are not supported for 'bindSym'</td>
<td>0.9.6</td> <td>0.9.6</td>
<td>this makes clean macros impossible to write when it comes to pragmas</td> <td>this makes clean macros impossible to write when it comes to pragmas</td>
</tr> </tr>
<tr> <tr>
<td>type checking for tuples</td> <td>type checking for tuples</td>
<td>0.9.8</td> <td>0.9.8</td>
<td>needs to be refined. Recursive tuples should be forbidden.</td> <td>needs to be refined. Recursive tuples should be forbidden.</td>
</tr> </tr>
<tr> <tr>
<td>extended macros API</td> <td>extended macros API</td>
<td>0.9.8</td> <td>0.9.8</td>
<td>missing: an API for working with types; the builtin getImpl</td> <td>missing: an API for working with types; the builtin getImpl</td>
</tr> </tr>
<tr> <tr>
<td>write tracking</td> <td>write tracking</td>
<td>after 1.0</td>
<td>0.9.8</td>
<td>algorithm exists. Can be extended to compute lent pointers.</td> <td>algorithm exists. Can be extended to compute lent pointers.</td>
</tr> </tr>
<tr> <tr>
@ -138,133 +79,77 @@
<tr> <tr>
<td>prevent object branch transitions from low(selector)</td> <td>prevent object branch transitions from low(selector)</td>
<td>after 1.0</td> <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> <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>
<tr> <tr>
<td><tt class="docutils literal"><span class="pre">~</span></tt> operator for effects</td> <td><tt class="docutils literal"><span class="pre">~</span></tt> operator for effects</td>
<td>after 1.0</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> <td>it is not entirely clear what <tt class="docutils literal"><span class="pre">~F</span></tt> should mean.</td>
</tr> </tr>
<tr> <tr>
<td>some effects like <tt class="docutils literal"><span class="pre">GCMem</span></tt> don't need to be white-listed</td> <td>some effects like <tt class="docutils literal"><span class="pre">GCMem</span></tt> don't need to be white-listed</td>
<td>after 1.0</td> <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> <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>
<tr> <tr>
<td>returning 'var T' is unsafe and needs static analysis to make safe</td> <td>returning 'var T' is unsafe and needs static analysis to make safe</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>the compiler already checks for trivial examples</td> <td>the compiler already checks for trivial examples</td>
</tr> </tr>
<tr> <tr>
<td>alias analysis needs to specified and controllable with pragmas</td> <td>alias analysis needs to specified and controllable with pragmas</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>alias analysis affects memory safety rules</td> <td>alias analysis affects memory safety rules</td>
</tr> </tr>
<tr> <tr>
<td>term rewriting macros need more love</td> <td>term rewriting macros need more love</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>we need much more tests and use them in production</td> <td>we need much more tests and use them in production</td>
</tr> </tr>
<tr> <tr>
<th>Compiler feature</th> <th>Compiler feature</th>
<th>Scheduled for</th> <th>Scheduled for</th>
<th>Notes</th> <th>Notes</th>
</tr> </tr>
<tr> <tr>
<td>high level optimizer</td> <td>high level optimizer</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>use the effect system for optimizations; interacts with TR macros; <td>use the effect system for optimizations; interacts with TR macros;
performs:<ul> performs:<ul>
<li>GCSE</li> <li>GCSE</li>
<li>loop invariant hoisting</li> <li>loop invariant hoisting</li>
<li>escape analysis for string/seq</li> <li>escape analysis for string/seq</li>
<li>inlining of small lambdas</li> <li>inlining of small lambdas</li>
</ul> </ul>
</td> </td>
</tr> </tr>
<tr><td>pure RC'ing GC</td> <tr><td>pure RC'ing GC</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>important for better interoperability with Objective-C</td> <td>important for better interoperability with Objective-C</td>
</tr> </tr>
<tr> <tr>
<td>GPU backend</td> <td>GPU backend</td>
<td>after 1.0</td> <td>after 1.0</td>
</tr> </tr>
<tr> <tr>
<td>symbol files</td> <td>symbol files</td>
<td>after 1.0</td> <td>after 1.0</td>
<td>symbol files provide true incremental compilation beyond the caching of generated C code</td> <td>symbol files provide true incremental compilation beyond the caching of generated C code</td>
</tr> </tr>
<tr> <tr>
<td>deterministic code generation</td> <td>deterministic code generation</td>
<td>0.9.8</td> <td>0.9.8</td>
<td>deterministic code generation makes C code caching much more effective</td> <td>deterministic code generation makes C code caching much more effective</td>
</tr> </tr>