Welcome to the High Level Virtual Machine (HLVM). This document contains
the release notes for HLVM. Here we describe what's new, what changed, what
platforms are supported, known problems, and installation notes.
This document can be updated as things are discovered after the software
is released. If you are reading this from the release files, you should go
to the HLVM Releases Site
to read the most recent version. If you are reading this from the SVN sources,
the release notes apply to the next release of HLVM, not the most
recent release.
For information on upcoming releases and future plans, please refer to the
HLVM Release Plans page.
For more information on HLVM, please visit the main
HLVM web site. If you have questions or
comments, you should send them to the
HLVM Developers List
This is the first public release of the High Level Virtual Machine. This is
a very early pre-release, version 0.1. That is, HLVM is not complete yet and
it doesn't do very much. The main goal for this release was to get HLVM to
run the "Hello, World" program, which it does. However, completing that goal
means that two things are in place: (1) the build system and (2) the basic
architecture of the project.
This release is probably only of interest to the HLVM developers and those
who are just crazily interested in virtual machine technology. This software
is being released early because of our release policy which follows Linus
Torvald's philosophy: Release Early, Release Often. Essentially, we define
feature sets for upcoming releases in small increments. When those features
are completed we release it to the public. This requires the developers to
quickly cycle through the entire software development life cycle and ensures
that HLVM never gets too far off course or loses quality.
Since this is the first release of HLVM, everything in HLVM is new!
However, here are the main things accomplished in this release:
- Build System. A build system based on
scons was implemented and currently
handles building the software, running the test suite, generating the
documentation, participating in code generation, compiling the runtime with
LLVM, and installing the final product.
- Basic Architecture. We have defined several libraries for HLVM:
- AST. This library provides the implementation of the Abstract
Syntax Tree which is the heart of the HLVM implementation. These classes
form a multi-way tree that is used as the representation of the user's
program.
- Base. This library provides common utilities shared across all
of HLVM.
- Reader. This library will contain readers to translate a
variety of on-disk format into the in-memory AST nodes. Currently there
is only an implemented reader for XML.
- Writer. This library will contain writers to translate from the
in-memory AST nodes to a variety of on-disk formats. Currently there is
only an implemented writer for XML. This library complements the Reader
library and the two libraries should be synchronized in the formats they
read and write.
- Pass. This library provides a mechanism for making a
pass over the AST nodes and various pass implementations.
Currently, only a rudimentary verification pass has been implemented. In
the future this library will contain optimization passes and other
AST->AST passes.
- CodeGen. This library provides code generation passes. This is
a separate library because none of thse passes produce AST nodes. Instead,
they translate the AST into some other form, from which translation back
to AST is not possible. Currently a rudimentary code generator for
LLVM is provided. In the future there may
be other code generators for generating XHTML documentation, C code,
etc.
- Runtime. This library provides the HLVM runtime. This is the
component of HLVM that is linked with the user's program to provide
services to it. Currently, the HLVM runtime provides a few functions for
handling output and command line arguments so that the "Hello, World"
program could be implmented.
- Tools. HLVM has a set of executable tools built from the
libraries that HLVM provides. Currently, the tool set includes:
- hlvm. This tool provides an implementation of the HLVM Runtime
as a stand alone executable. Currently it doesn't do much but tell you its
version and provide help with options
- hlvm-xml2xml. This tool converts HLVM XML input into the AST
tree nodes and then back out to HLVM XML again. This is used mainly as a
test driver to ensure construction and pass management is working in HLVM
without invoking other parts of the sytsem.
- hlvm-compiler. This tool converts HLVM XML into LLVM bytecode
or LLVM assembly code. In the future it may be able to compile HLVM into
any of the other forms that HLVM supports as well as create stand-alone
programs.
- Test Suite. HLVM provides a test suite that uses Deja-Gnu to
automate the tests. Currently the test suite provides two kinds of tests.
The xml2xml test suite uses the hlvm-xml2xml tool to
validate that HLVM can generate its input to its output. These are
fundamental tests that ensure the stability of the AST.
The
return0 test suite uses the hlvm-compiler to generate an
executable program from XML source, execute it, and assert that the program
returns 0. Right now there's only a few programs in this category but there
will be many more in the future.
There have been no changes since the last release.
HLVM is known to work on the following platforms:
- x86 machines running Linux (FC3, FC5, SuSE)
- PPC machines running Mac OS/X (10.4 Tiger)
HLVM probably runs on many other operating systems and hardware but the
developers have not yet tried them. If you are successful in bulding HLVM on
another platform, please let us know!
The main known problem with this release is that there isn't enough of HLVM
implemented to be useful in any significant way.
Please see the Getting Started Guide that
accompanies these relese notes.