blob: ab13acc1105aa526c0a9bf00237329bd6224e2b5 [file] [log] [blame]
<!--#set var="title" value="Overview" -->
<!--#include virtual="/incl/header.incl" -->
<h1>HLVM Overview</h1>
<p>The High Level Virtual Machine (HLVM) is currently under development. To
monitor the progress of HLVM as it develops, you can utilize these resources:
</p>
<table>
<tr><th>Written Status Updates</th><th>Source Code Progress</th></tr>
<tr>
<td style="width:50%">
<ul>
<li><a href="/docs/status/index.html">Status Updates</a>:
approximately monthly updates on the statuf of HLVM.</li>
<li><a href="/releases/index.shtml">Releases</a>:
release notes, release media, SVN access</li>
<li><a href="/docs/ReleasePlans.html#status">Plans</a>:
current release plans, status of current release, past releases</li>
</ul>
</td>
<td style="width:50%">
<ul>
<li><a href="/Source.shtml">Latest Sources</a>:
A browsable source tree that is synchronized with the source repository.
<li>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/hlvm-commits">
Commits Archive</a>: an email archive of the Subversion commits
history</li>
<li><a href="irc://irc.oftc.net/#hlvm">IRC Channel</a>: come and talk
to the developers on-line</li>
</ul>
</td>
</tr>
</table>
<p>HLVM is a language designer's toolkit. It's goal is to take care of the many
compilation, optimization and runtime details needed in a language system. Here
is how we envision HLVM when it is completed (written in present tense for
simplicity):</p>
<ol>
<li><em>Based on LLVM</em>
(<a href="http://llvm.org/">Low Level Virtual Machine</a>).
LLVM is HLVM's sister project. HLVM gains tremendous capability from LLVM in
the areas of code generation, optimization, bytecode facilties, JIT
compilation, target machine support, etc.</li>
<li><em>Dynamic Compilation</em>. HLVM supports "dynamic" languages, i.e.
those that that have run-time compilation or interpretation as a language
feature. For example, languages that support an <tt>eval</tt> function that
compiles or interprets a source language statement (or entire program) at
run-time.</li>
<li><em>Language Designer's Toolkit</em>. HLVM provides a complete language
designer's toolkit for creating new programming languages. A plug-in model is
used to allow a language front end to be executed at run-time. A language
plug-in handles the process of translating from the language's source code
into the HLVM Abstract Syntax Tree (AST) representation.
After that, HLVM handles all aspects of code generation, bytecode storage,
JIT execution or interpretation, and native compilation.</li>
<li><em>Common Runtime</em>. HLVM supports a common runtime for a variety of
programming languages including Ruby, Python, Perl, Jython, Haskell, Prolog,
and others.</li>
<li><em>Language Interoperability Framework</em>. Because HLVM uses the same
facilities to implement the execution of different source languages, it is
also a language interoperability framework. All language plug-ins translate
source code into the same AST. This means they <i>can</i> interoperate. It
doesn't mean they <i>will</i> interoperate. Language plug-ins that make use
of the HLVM runtime library for common constructs (e.g. "string") will enhance
the language's ability to interoperate with other languages.</li>
</ol>
<table>
<tr><th>More Info</th><th>HLVM On The Net</th></tr>
<tr><td style="width:50%">
<ul>
<li><a href="/docs/FAQ.html">Frequently Asked Questions</a></li>
<li><a href="/docs/OpenProjects.html">Open Projects (How You Can Help)</a></li>
<li><a href="/docs/index.html">User Documentation</a></li>
<li><a href="/APIs.php">API documentation generated from source code</a></li>
</ul>
</td>
<td style="width:50%">
<ul>
<li><a href="http://osnews.com/comment.php?news_id=14920">OS News</a></li>
<li><a href="http://lambda-the-ultimate.org/node/1562">Lambda-the-Ultimate</a></li>
<li><a href="http://freshmeat.net/projects/hlvm/">Freshmeat.net Project</a></li>
<!--<li><a href="http://silentcentre.net/cgi-bin/hgwebdir.cgi/hlvm?cmd=summary;style=gitweb">Mercurial Repository on 2 hr sync (thanks Owen)</a></li>-->
</ul>
</td></tr>
</table>
<!--#include virtual="/incl/footer.incl" -->