| <!--#set var="title" value="Release Plans" --> |
| <!--#include virtual="/incl/header.incl" --> |
| <h1>HLVM Release Plans</h1> |
| <div class="warning"> |
| WARNING: This document is <em>always</em> a work in progress. |
| </div> |
| <ol> |
| <li><a href="#introduction">Introduction</a></li> |
| <li><a href="#releases">Release Index</a> |
| <ol> |
| <li><a href="#upcoming">Upcoming Releases</a></li> |
| <li><a href="#completed">Completed Releases</a></li> |
| </ol> |
| </li> |
| <li><a href="#status">Release Status</a> |
| <ol> |
| <li><a href="#current">Current Release</a></li> |
| <li><a href="#previous">Previous Releases</a></li> |
| </ol> |
| </li> |
| <li><a href="#features">Feature Definitions</a></li> |
| </ol> |
| |
| <div class="author"> |
| <p>Author: <a href="mailto:rspencer@reidspencer.com">Reid Spencer</a>.</p> |
| </div> |
| |
| <h2><a name="introduction">Introduction</a></h2> |
| <div class="text"> |
| <p>This document contains the Release plans for HLVM. Each release is broken |
| down into a set of high-level features that we are intending to implement in |
| that release. For each release, we describe the features and provide a |
| completion matrix to help you track the progress.</p> |
| <p>One of the reasons we publish this information is so that developers can |
| see where they might be able to help. If you have an interest in implementing |
| one of the features, please contact us.</p> |
| <p><b class="warning">NOTE: </b> |
| This document is ephemeral. We change it all the time. It gets updated |
| with our current plans for the definition of a release. As such, referring |
| to it often will help you understand where HLVM is going in upcoming |
| releases. However, <em>nothing</em> within these plans should be relied |
| upon or taken as a committment from the developers. Open Source projects |
| proceed as time and talent permits and this one is no exception. We are |
| simply trying to provide you with information about what is likely to |
| occur in the next few releases.</p> |
| </div> |
| |
| <h2><a name="releases"></a>Release Index</h2> |
| <div class="text"> |
| <table> |
| <tr> |
| <th style="width:15%">Release</th> |
| <th style="width:60%">Description</th> |
| <th style="width:10%">Status</th> |
| <th style="width:15%">Links</th> |
| </tr> |
| <tr> |
| <td>0.1</td> |
| <td>Hello World, AST Construction, Build System</td> |
| <td>100%</td> |
| <td><a href="#f0_1">Features</a> <a href="#s0_1">Status</a></td> |
| </tr> |
| <tr> |
| <td>0.2</td> |
| <td>Turing Complete, JIT Execution</td> |
| <td>55%</td> |
| <td><a href="#f0_2">Features</a> <a href="#current">Status</a></td> |
| </tr> |
| <tr> |
| <td>0.3</td> |
| <td>Front End Library, Object Model, Interpreted Execution</td> |
| <td>1%</td> |
| <td><a href="#f0_3">Features</a></td> |
| </tr> |
| <tr> |
| <td>0.4</td> |
| <td>Ruby Front End</td> |
| <td>0%</td> |
| <td><a href="#f0_4">Features</a></td> |
| </tr> |
| <tr> |
| <td>0.5</td> |
| <td>Scheme Front End</td> |
| <td>0%</td> |
| <td><a href="#f0_5">Features</a></td> |
| </tr> |
| <tr> |
| <td>0.6</td> |
| <td>Python Front End</td> |
| <td>0%</td> |
| <td><a href="#f0_6">Features</a></td> |
| </tr> |
| <tr> |
| <td>0.9</td> |
| <td>Quality Enhancements, Pre-Beta Touchups</td> |
| <td>0%</td> |
| <td><a href="#f0_9">Features</a></td> |
| </tr> |
| </table> |
| </div> |
| |
| <h2><a name="status">Release Status</a></h2> |
| <div class="text"> |
| <p>This section provides the status for the current and previous releases.</p> |
| </div> |
| |
| <h3><a name="current">Current Status (Release 0.2)</a></h3> |
| <div class="text"> |
| <p>The table below shows the status of the current release. Click the feature |
| name to get a complete description of the feature.</p> |
| <table> |
| <tr><th>Feature</th><th>Feature</th><th>Feature</th></tr> |
| <tr> |
| <td><a href="#integer">Integer Arithmetic Operators</a><br/>Done.</td> |
| <td><a href="#boolean">Boolean Arithmetic Operators</a><br/>Done.</td> |
| <td><a href="#floating">Floating Point Arithmetic Operators</a><br/> |
| Done except for code generation to integrate with runtime.</td> |
| </tr><tr> |
| <td><a href="#controlflow">Control Flow Operators</a><br/>Done.</td> |
| <td><a href="#blocknest">Block Nesting</a><br/>Done.</td> |
| <td><a href="#aggrconst">Aggregate Constants</a><br/>Done.</td> |
| </tr><tr> |
| <td><a href="#textops">Text Operators</a><br/> |
| String operators defined. Text operators to follow.</td> |
| <td><a href="#args">Program Arguments</a><br/>Changed to argc/argv.</td> |
| <td><a href="#jit">JIT Compilation</a><br/>Not Started.</td> |
| </tr><tr> |
| <td><a href="#tcgen">Test Case Generator</a><br/> |
| 85% A few generation bugs remain.</td> |
| <td></td> |
| <td></td> |
| </tr> |
| </table> |
| </div> |
| |
| <h3><a name="released">Previous Releases</a></h3> |
| <div class="text"> |
| <p>This section lists the final status information for previous releases.</p> |
| </div> |
| <h4><a name="s0_1">Release 0.1 (Hello World)</a></h4> |
| <div class="text"> |
| <table> |
| <tr><th>Feature</th><th>Feature</th><th>Feature</th></tr> |
| <tr> |
| <td><a href="#buildenv">Build Environment</a> |
| <br/>SCons is working well. All targets necessary for building, testing, |
| document generation, and installation are completed. |
| </td> |
| <td><a href="#testharn">Test Harness</a> |
| <br/>Dejagnu test harness implemented with 2 types of tests based on |
| available tools. This will grow as HLVM grows. |
| </td> |
| <td><a href="#ASTNodes">AST Nodes</a> |
| <br/>61 node classes implemented. The type system is complete. More |
| operators are defined than code generation permits. |
| </td> |
| </tr><tr> |
| <td><a href="#XMLReader">XML Reader</a> |
| <br/>Correctly reads and validates all 61 AST node classes implemented |
| so far. |
| </td> |
| <td><a href="#XMLWriter">XML Writer</a> |
| <br/>Correctly generates XML for all 61 AST node classes implemente so |
| far.</td> |
| <td><a href="#xml2xml">hlvm-xml2xml</a> |
| <br/>Done. This tool will gain functionality as the XML Reader and XML |
| Writer libraries implement more node types to read/write. |
| </td> |
| </tr><tr> |
| <td><a href="#compiler">hlvm-compiler</a> |
| <br/>Sufficient code generation capabilities for "Hello, World" |
| </td> |
| <td><a href="#vm">hlvm</a> |
| <br/>Provides output for "Hello World". Provides options processing. |
| </td> |
| <td><a href="#ASTsuite">AST Test Suite</a> |
| <br/>16 tests written in 2 categories. |
| </td> |
| </tr><tr> |
| <td colspan="3"><a href="#HelloWorld">Hello World</a><br/>Done.</td> |
| </tr> |
| </table> |
| </div> |
| |
| <h2><a name="features">Feature Definitions</a></h2> |
| <div class="text"> |
| <p>This section defines the individual features for all releases.</p> |
| </div> |
| |
| <h3><a name="f0_1">Release 0.1 Features (Hello World)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="buildenv"><em>Build Environment</em></a>. |
| A multi-platform build system so software can be compiled properly.</li> |
| <li><a name="testharn"><em>Test Harness</em></a>. |
| A deja-gnu based test framework to manage and execute the large number of |
| test cases needed to verify that the HLVM system is working correctly.</li> |
| <li><a name="ASTNodes"><em>AST Nodes</em></a>. |
| Define and implement several (not all) AST nodes. The most fundamental |
| nodes should be implemented: structuring, functions, blocks, arithmetic |
| operators, constants, etc. The list will be expanded in subsequent releases. |
| </li> |
| <li><a name="XMLReader"><em>XML Reader</em></a>. |
| A library to read in an XML representation of the AST and generate the AST |
| C++ Nodes.</li> |
| <li><a name="XMLWriter"><em>XML Writer</em></a>. |
| A library to write out an XML representation of the Abstract Syntax |
| Tree.</li> |
| <li><a name="xml2xml"><em>hlvm-xml2xml</em></a>. |
| A program to convert XML AST documents back into XML. This tests the correct |
| construction of the AST as well as the pass management features.</li> |
| <li><a name="ASTsuite"><em>AST Test Suite</em></a>. |
| A suite of XML based test files need to be developed for use with the |
| hlvm_xml2xml program. All implemented aspects of the AST must be covered by |
| one or more test cases.</li> |
| <li><a name="compiler"><em>hlvm-compiler</em></a>. |
| A program to compile HLVM sources into something executable. This release |
| 0.1 vesion will read in XML AST files and produce LLVM bytecode. Other |
| options will be added in the future.</li> |
| <li><a name="vm"><em>hlvm machine</em></a>. |
| This program provides the runtime environment for executing HLVM |
| programs. This 0.1 version will read an LLVM bytecode file and JIT execute |
| it. More features later.</li> |
| <li><a name="HelloWorld"><em>Hello World</em></a>. |
| Sufficient capabilities will be added to the runtime and compiler in order |
| to get the "Hello, World" program running.</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_2">Release 0.2 Features (Turing Complete)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="integer"><em>Integer Operators</em></a>. Extend the AST |
| library to support all the integer arithmetic operators |
| such as add, subtract, multiply, divide, modulo, increment, decrement, |
| bitwise operations, etc. Provide LLVM code generation support for these |
| operators.</li> |
| <li><a name="boolean"><em>Boolean Operators</em></a>. Extend the AST |
| library to support all the boolean operators such as and, or, not, and |
| the six comparison operators. Provide LLVM code generation support for these |
| operators.</li> |
| <li><a name="floating"><em>Floating Point Operators</em></a>. Extend the AST |
| library to support all the floating point arithmetic operators such as add, |
| subtract, multiply, divide, etc. Also include the operators that imply |
| library functions or LLVM intrinsics such as sqrt, power, etc. Provide LLVM |
| code generation support for these operators.</li> |
| <li><a name="controlflow"><em>Control Flow Operators</em></a>. Extend the |
| AST library to support a set of control flow operators (if,while,for,switch) |
| and provide LLVM code generation for them.</li> |
| <li><a name="#blocknest"><em>Block Nesting</em></a><br/>Implement correct |
| code generation for nested blocks, block results, function results, return |
| operator, control flow operators with nested blocks, etc.</li> |
| <li><a name="#aggrconst"><em>Aggregate Constants</em></a><br/>Complete the |
| implementation of literal constants to include the aggregate constants for |
| pointers, arrays, vectors, structures and continuations. Also implement |
| literal constants for the missing simple types: enumerator, any, range, |
| octet, character, etc.</li> |
| <li><a name="textops"><em>Text Operators</em></a>. Extend the AST |
| library to provide a complete set of operators for manipulating strings of |
| text and the LLVM code generation for them.</li> |
| <li><a name="validate"><em>Validate Pass</em></a>. Finish the implementation |
| of the ValidatePass so that AST trees can be fully validated after |
| construction.</li> |
| <li><a name="args"><em>Program Arguments</em></a>. Extend the Runtime |
| library to correctly pass an HLVM program's arguments as an HLVM array of |
| text.</li> |
| <li><a name="tcgen"><em>Test Case Generator</em></a>. Write a test case |
| generator program that randomly generates test cases based on specifications |
| of operator complexity, type complexity, and size. Integrate this generator |
| with the dejagnu test framework to check a few random cases on each run of |
| the "check" target.</li> |
| <li><a name="jit"><em>JIT Compilation</em></a>. Extend the Runtime library |
| to support just-in-time compilation and execution via LLVM's JIT |
| facilities.</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_3">Release 0.3 Features (Front End)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="frontend"><em>Front End Library</em></a>. |
| Add a new library to make it easy to build front end languages. The library |
| will assist with: lexical analysis, parsing, AST node generation, etc.</li> |
| <li><a name="interp"><em>Interpreter</em></a>. |
| We will introduce the HLVM interpreter in this release. It will interpret |
| AST nodes directly and execute them.</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_4">Release 0.4 Features (Ruby)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="ruby"><em>Ruby Features</em></a>. |
| Add sufficient nodes to the system to support the language features of |
| Ruby.</li> |
| <li><a name="rubytest"><em>Ruby Tests</em></a>. |
| Add test cases that exercise the features added for Ruby. These are XML |
| based test cases, not Ruby source</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_5">Release 0.5 Features (Scheme)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="scheme"><em>Scheme Features</em></a>. |
| Add sufficient nodes to the system to support the language features of |
| Scheme.</li> |
| <li><a name="schemetest"><em>Scheme Tests</em></a>. |
| Add test cases that exercise the features added for Scheme. These are XML |
| based test cases, not Ruby source</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_6">Release 0.6 Features (Python)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="python"><em>Python Features</em></a>. |
| Add sufficient nodes to the system to support the language features of |
| Python.</li> |
| <li><a name="pythontest"><em>Python Tests</em></a>. |
| Add test cases that exercise the features added for Scheme. These are XML |
| based test cases, not Python source</li> |
| </ol> |
| </div> |
| |
| <h3><a name="f0_9">Release 0.9 Features (Quality)</a></h3> |
| <div class="text"> |
| <ol> |
| <li><a name="refactor"><em>Refactoring</em></a>. |
| Review the entire HLVM source base and re-factor to common components |
| with the goal of software reuse and shrinkage of library sizes.</li> |
| <li><a name="fulltest"><em>Full Test Suite</em></a>. |
| Ensure that HLVM is covered by a full test suite that tests every aspect of |
| its functionality.</li> |
| <li><a name="quality"><em>Quality</em></a>. |
| Improve quality of HLVM at both compile and run times. This feature ensures |
| that HLVM will properly handle corner conditions, error situations, |
| exceptions, etc.</li> |
| <li><a name="optimize"><em>Performance Optimization</em></a>. |
| Analyze the compile and run time environments to ensure they are running at |
| optimal speeds. Ensure that the generated code can be optimized to run |
| efficiently.</li> |
| <li><a name="docs"><em>Documentation</em></a>. |
| Write sufficient documentation to cover usage of HLVM and programming with |
| HLVM</li> |
| </ol> |
| </div> |
| <!--#include virtual="/incl/footer.incl" --> |