<!--#set var="title" value="Release Notes" -->
<!--#include virtual="/incl/header.incl" -->
<h1>HLVM Release Notes</h1>
<ol>
  <li><a href="#introduction">Introduction</a>
  <li><a href="#new">What's New</a>
  <ol>
    <li><a href="#features">New Features</a></li>
    <li><a href="#changes">Significant Changes</a></li>
    <li><a href="#platforms">Platform Support</a></li>
  </ol></li>
  <li><a href="#problems">Known Problems</a></li>
  <li><a href="#install">Installation Notes</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>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.</p>
  <p>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 <a href="/releases/">HLVM Releases Site</a>
  to read the most recent version. If you are reading this from the SVN sources,
  the release notes apply to the <i>next</i> release of HLVM, not the most
  recent release.</p>
  <p>For information on upcoming releases and future plans, please refer to the
  <a href="/Plans.shtml">HLVM Release Plans</a> page.
  <p>For more information on HLVM, please visit the main
  <a href="/">HLVM web site</a>. If you have questions or
  comments, you should send them to the 
  <a href="/hlvm-dev.shtml">HLVM Developers List</a>
</div>

<h2><a name="new"><b>What's New</b></a></h2>
<div class="text">
  <p>This is the second public release of the High Level Virtual Machine. This 
  is a very early pre-release, version 0.2. That is, HLVM is not complete yet 
  and it doesn't do very much yet.  The main goal for this release is to get 
  HLVM to be "Turing Complete".</p>
  <h2><a name="features">New Features In HLVM 0.2</a></h2>
  <p>Here are the main things accomplished in this release:</p>
  <ol>
    <li><em>hlvm-gentestcase</em>. This new tool will automatically generate XML
    test cases for HLVM. This tool is incorporated into the test suite and will
    randomly select 100 test cases of varying complexity and size.</li>
  </ol>
  <h2><a name="changes">Significant Changes in HLVM 0.2</a></h2>
  <p>
  <p>Here are things that have changed since the last release:</p>
  <ol>
    <li><em>Aliases Removed</em>. The original intent behind aliases was to
    support some kind of "typedef" feature and provide alternate names for
    types. However, since every type in HLVM is required to have an explicit
    name and type identification is done by name, the alias feature was
    redundant and not well aligned with the other types. Consequently it has
    been removed.</li>
  </ol>
  <h2><a name="platforms">Platform Support</a></h2>
  <p>HLVM is known to work on the following platforms:</p>
  <ol>
    <li>x86 machines running Linux (FC3, FC5, SuSE)</li>
    <li>PPC machines running Mac OS/X (10.4 Tiger)</li>
  </ol>
  <p>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, <i>please let us know!</i></p>
</div>

<h2><a name="problems"><b>Known Problems</b></a></h2>
<div class="text">
  <p>The main known problem with this release is that there isn't enough of HLVM
  implemented to be useful in any significant way.</p>
</div>

<h2><a name="install"><b>Installation Notes</b></a></h2>
<div class="text">
  <p>Please see the <a href="GettingStarted.html">Getting Started Guide</a> that
  accompanies these relese notes. </p>
</div>
<!--#include virtual="/incl/footer.incl" -->
