blob: f6609654a203c2b3a780ac706fcdab42be352f98 [file] [log] [blame]
<!--#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>&nbsp;<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>&nbsp;<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" -->