HLVM Release Plans

WARNING: This document is always a work in progress.
  1. Introduction
  2. Release Index
    1. Upcoming Releases
    2. Completed Releases
  3. Release Status
    1. Current Release
    2. Previous Releases
  4. Feature Definitions

Author: Reid Spencer.

Introduction

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

Release Status

This section provides the status for the current and previous releases.

Current Status (Release 0.2)

The table below shows the status of the current release. Click the feature name to get a complete description of the feature.

FeatureFeatureFeature
Integer Arithmetic Operators
Done.
Boolean Arithmetic Operators
Done.
Floating Point Arithmetic Operators
Done except for code generation to integrate with runtime.
Control Flow Operators
Done.
Block Nesting
Done.
Aggregate Constants
Done.
Text Operators
String operators defined. Text operators to follow.
Program Arguments
Changed to argc/argv.
JIT Compilation
Not Started.
Test Case Generator
85% A few generation bugs remain.

Previous Releases

This section lists the final status information for previous releases.

Release 0.1 (Hello World)

FeatureFeatureFeature
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.

Feature Definitions

This section defines the individual features for all releases.

Release 0.1 Features (Hello World)

  1. Build Environment. A multi-platform build system so software can be compiled properly.
  2. 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.
  3. 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.
  4. XML Reader. A library to read in an XML representation of the AST and generate the AST C++ Nodes.
  5. XML Writer. A library to write out an XML representation of the Abstract Syntax Tree.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. Hello World. Sufficient capabilities will be added to the runtime and compiler in order to get the "Hello, World" program running.

Release 0.2 Features (Turing Complete)

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Block Nesting
    Implement correct code generation for nested blocks, block results, function results, return operator, control flow operators with nested blocks, etc.
  6. 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.
  7. 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.
  8. Validate Pass. Finish the implementation of the ValidatePass so that AST trees can be fully validated after construction.
  9. Program Arguments. Extend the Runtime library to correctly pass an HLVM program's arguments as an HLVM array of text.
  10. 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.
  11. JIT Compilation. Extend the Runtime library to support just-in-time compilation and execution via LLVM's JIT facilities.

Release 0.3 Features (Front End)

  1. 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.
  2. Interpreter. We will introduce the HLVM interpreter in this release. It will interpret AST nodes directly and execute them.

Release 0.4 Features (Ruby)

  1. Ruby Features. Add sufficient nodes to the system to support the language features of Ruby.
  2. Ruby Tests. Add test cases that exercise the features added for Ruby. These are XML based test cases, not Ruby source

Release 0.5 Features (Scheme)

  1. Scheme Features. Add sufficient nodes to the system to support the language features of Scheme.
  2. Scheme Tests. Add test cases that exercise the features added for Scheme. These are XML based test cases, not Ruby source

Release 0.6 Features (Python)

  1. Python Features. Add sufficient nodes to the system to support the language features of Python.
  2. Python Tests. Add test cases that exercise the features added for Scheme. These are XML based test cases, not Python source

Release 0.9 Features (Quality)

  1. Refactoring. Review the entire HLVM source base and re-factor to common components with the goal of software reuse and shrinkage of library sizes.
  2. Full Test Suite. Ensure that HLVM is covered by a full test suite that tests every aspect of its functionality.
  3. 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.
  4. 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.
  5. Documentation. Write sufficient documentation to cover usage of HLVM and programming with HLVM