HLVM Release Plans
WARNING: This document is always a work in progress.
- Introduction
- Release Index
- Upcoming Releases
- Completed Releases
- Release Status
- Current Release
- Previous Releases
- Feature Definitions
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.
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.
NOTE:
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, nothing 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.
Release Index
| Release |
Description |
Status |
Links |
| 0.1 |
Hello World, AST Construction, Build System |
100% |
Features Status |
| 0.2 |
Turing Complete, JIT Execution |
55% |
Features Status |
| 0.3 |
Front End Library, Object Model, Interpreted Execution |
1% |
Features |
| 0.4 |
Ruby Front End |
0% |
Features |
| 0.5 |
Scheme Front End |
0% |
Features |
| 0.6 |
Python Front End |
0% |
Features |
| 0.9 |
Quality Enhancements, Pre-Beta Touchups |
0% |
Features |
This section provides the status for the current and previous releases.
The table below shows the status of the current release. Click the feature
name to get a complete description of the feature.
This section lists the final status information for previous releases.
| Feature | Feature | Feature |
Build Environment
SCons is working well. All targets necessary for building, testing,
document generation, and installation are completed.
|
Test Harness
Dejagnu test harness implemented with 2 types of tests based on
available tools. This will grow as HLVM grows.
|
AST Nodes
61 node classes implemented. The type system is complete. More
operators are defined than code generation permits.
|
XML Reader
Correctly reads and validates all 61 AST node classes implemented
so far.
|
XML Writer
Correctly generates XML for all 61 AST node classes implemente so
far. |
hlvm-xml2xml
Done. This tool will gain functionality as the XML Reader and XML
Writer libraries implement more node types to read/write.
|
hlvm-compiler
Sufficient code generation capabilities for "Hello, World"
|
hlvm
Provides output for "Hello World". Provides options processing.
|
AST Test Suite
16 tests written in 2 categories.
|
Hello World Done. |
This section defines the individual features for all releases.
- Build Environment.
A multi-platform build system so software can be compiled properly.
- Test Harness.
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.
- AST Nodes.
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.
- XML Reader.
A library to read in an XML representation of the AST and generate the AST
C++ Nodes.
- XML Writer.
A library to write out an XML representation of the Abstract Syntax
Tree.
- hlvm-xml2xml.
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.
- AST Test Suite.
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.
- hlvm-compiler.
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.
- hlvm machine.
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.
- Hello World.
Sufficient capabilities will be added to the runtime and compiler in order
to get the "Hello, World" program running.
- Integer Operators. 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.
- Boolean Operators. 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.
- Floating Point Operators. 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.
- Control Flow Operators. Extend the
AST library to support a set of control flow operators (if,while,for,switch)
and provide LLVM code generation for them.
- Block Nesting
Implement correct
code generation for nested blocks, block results, function results, return
operator, control flow operators with nested blocks, etc.
- Aggregate Constants
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.
- Text Operators. Extend the AST
library to provide a complete set of operators for manipulating strings of
text and the LLVM code generation for them.
- Validate Pass. Finish the implementation
of the ValidatePass so that AST trees can be fully validated after
construction.
- Program Arguments. Extend the Runtime
library to correctly pass an HLVM program's arguments as an HLVM array of
text.
- Test Case Generator. 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.
- JIT Compilation. Extend the Runtime library
to support just-in-time compilation and execution via LLVM's JIT
facilities.
- Front End Library.
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.
- Interpreter.
We will introduce the HLVM interpreter in this release. It will interpret
AST nodes directly and execute them.
- Ruby Features.
Add sufficient nodes to the system to support the language features of
Ruby.
- Ruby Tests.
Add test cases that exercise the features added for Ruby. These are XML
based test cases, not Ruby source
- Scheme Features.
Add sufficient nodes to the system to support the language features of
Scheme.
- Scheme Tests.
Add test cases that exercise the features added for Scheme. These are XML
based test cases, not Ruby source
- Python Features.
Add sufficient nodes to the system to support the language features of
Python.
- Python Tests.
Add test cases that exercise the features added for Scheme. These are XML
based test cases, not Python source
- Refactoring.
Review the entire HLVM source base and re-factor to common components
with the goal of software reuse and shrinkage of library sizes.
- Full Test Suite.
Ensure that HLVM is covered by a full test suite that tests every aspect of
its functionality.
- Quality.
Improve quality of HLVM at both compile and run times. This feature ensures
that HLVM will properly handle corner conditions, error situations,
exceptions, etc.
- Performance Optimization.
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.
- Documentation.
Write sufficient documentation to cover usage of HLVM and programming with
HLVM
|