<!--#set var="title" value="Open Projects" -->
<!--#include virtual="/incl/header.incl" -->
<h1>Open HLVM Projects</h1>
<ul>
  <li><a href="#what">What is this?</a></li>
  <li><a href="#code">Coding Projects</a></li>
  <li><a href="#cleanup">Cleanup Projects</a></li>
  <li><a href="#doc">Documentation Projects</a></li>
  <li><a href="#test">Testing Projects</a></li>
  <li><a href="#misc">Miscellaneous Projects</a></li>
</ul>

<h2><a name="what">What is this?</a></h2>
<div class="text">
<p>This document is a "TODO" list for HLVM.  Each project in this document is 
something that would be useful for HLVM to have, and would also be a great way 
to get familiar with the system.  Some of these projects are small and 
self-contained, which may be implemented in a couple of days. Others are 
larger.  In any case, we welcome all contributions.</p>

<p>If you are thinking about tackling one of these projects, please send a mail
to the <a href="/hlvm-dev.shtml">HLVM Developer's</a> mailing 
list, so that we know the project is being worked on.  Additionally this is a 
good way to get more information about a specific project or to suggest other 
projects to add to this page.</p>
</div>

<h2><a name="code">Coding Projects</a></h2>
<div class="text">
  <p>Projects in the list below are related to working on software code</p>
  <ol>
    <li><em>ANTLR Front End</em>. We need to investigate the use of
    <a href="http://www.antlr.org/">ANTLR</a> (ANother Tool for Language
    Recognition) as a possible front end lexer/parser for HLVM. Ideally I would
    like to see a set of C++ constructs to make mapping from a source language
    to the HLVM AST very simple. For example, a simple set of macros or
    functions that build an HLVM AST could be used as the semantic actions for a
    grammar. This task is to analyze the suitability of ANTLR for HLVM.</li>
    <li><em>RNG->XHTML XSLT Stylesheet</em>. We will use the Relax/NG grammar
    for the XML version of the AST to document the AST. However, the Relax/NG
    specification is not particularly user friendly. What we need is a way to
    publish (in XHTML) the specification with descriptive documentation. A
    fairly straightforward XSLT stylsheet to translate Relax/NG to XHTML should
    do nicely. This is a nice self-contained project for someone who knows
    XSLT and can understand Relax/NG.</li>
    <li><em>APR Abstractions</em>. The runtime portion of HLVM will use APR
    as its portability layer. However, APR is written in C and not particularly
    object-oriented. We need some of the things APR supports to be wrapped in
    simple C++ classes that take care of the book keeping such as deleting APR
    objects at the right time.  Abstracts we need to wrap, currently, are Pool
    and File. These should go in HLVM's "base" library.</li>
    <li><em>Yaml Reader/Writer</em>. We intend to support a reader and
    writer of the AST in Yaml syntax. Some people just don't like XML and having
    an alternate way to build the AST from a nicer-to-read source would be
    useful in helping some people comprehend HLVM. The design should be very
    similar to the XML Reader/Writer and be based on the Syck library.</li>
    <li><em>Range Check Code Gen</em>. This is a well contained project having
    to do with emitting LLVM code to do range checking for RangeType
    variables. RangeType's are currently treated like integers without range
    checking.</li>
    <li><em>Use Google hashmaps</em>. We would like to convert HLVM away from
    the slow and bulky STL maps currently being used to google's open source
    maps such as <tt>dense_hash_map</tt> and <tt>sparse_hash_map</tt>. However,
    to do this, several things need to be resolved: 
    <ol>
      <li>Do we incorporate the code into HLVM, or build it separately and
      reference it when configuring HLVM? Its just a few header files, so the
      former approach seems okay, but this needs to be investigated.</li>
      <li>The google code exposes its "config.h" which will conflict with 
      ours. It defines several macros from the config.h info and uses them
      in <tt>sparsetable</tt> as well as other places.</li>
      <li>Deciding whether to use sparse or dense versions of the hash maps
      needs to be decided on a case-by-case basis. In general, where the map is
      not expected to be large (like MultiOperator), dense should give us good
      performance. In cases where the content could be large (like SymbolTable),
      it might be wiser to use the sparse version. Same for the various maps
      used in LLVMGenerator.cpp and LLVMEmitter.cpp.</li>
      <li>Consider writing wrappers for these classes. Since we're going to
      compile HLVM with LLVM (eventually), the wrappers would get discarded by
      LLVM's inliner so the performance loss wouldn't be great.</li>
    </ol>
    </li>
  </ol>
</div>

<h2><a name="cleanup">Cleanup Projects</a></h2>
<div class="text">
  <p>Projects in the list below are things that are missing or need to be
  fixed.</p>
  <ol>
    <li><em>Enumerator Documentation</em>. Right now enumerators are simple
    string values in the EnumerationType. This prevents documentation from being
    associated with the Enumerators. This needs to be fixed so that
    documentation can be associated with the enumerators.</li>
  </ol>
</div>
<h2><a name="doc">Documentation Projects</a></h2>
<div class="text">
  <p>Projects in the list below are related to working on the projects
  documentation.</p>
  <ol>
    <li><em>API Documentation</em>. Documenting the HLVM AST API is very
    important. Currently it needs some work. Someone who knows Doxygen and 
    would like to keep the documentation up to date would be very helpful.</li>
    <li><em>Tool Documentation</em>. As HLVM produces tools, those tools need to
    be documented in a POD file. Also, the packaging of the generated HTML and
    INFO files leaves a little to be desired. In particular these file should be
    available through the public web site</li>
    <li><em>General Documentation</em>. General documentation about HLVM needs
    to be written.</li>
  </ol>
</div>

<h2><a name="test">Testing Projects</a></h2>
<div class="text">
  <p>Projects in the list below are related to testing software.</p>
  <ol>
    <li><em>AST Construction Tests</em>. In order to explore and test the AST 
    node construction, we need to develop test cases that exercise these 
    aspects of HLVM. These test cases are in the <tt>tests/xml2xml</tt>
    directory.  They are snippets of XML to test construction of the
    AST by using the hlvm-xml2xml program. Many of these test cases will
    explore ideas for what should or shouldn't be in the AST.</li>
    <li><em>Code Gen Tests</em>. In order to verify program correctness, a wide
    variety of tests to check for correct code generation are needed. These test
    are found in the <tt>tests/return0</tt> directory.  These are full HLVM 
    programs written in the AST XML language that should return from main with 
    a value of 0 if the test succeeds. They are intended to check control flow,
    arithmetic, and other aspects of runtime behavior of the HLVM code 
    generator and runtime system.</li>
    <li><em>Negative Tests</em>. These are tests that provide invalid input to
    HLVM to ensure that it doesn't crash but instead generates a nice error
    message. There are no tests in this class yet. Help!</li>
  </ol>
</div>

<h2><a name="misc">Miscellaneous Projects</a></h2>
<div class="text">
  <p>Here are some other things that need to get done.</p>
  <ol>
    <li>Add HLVM project to SourceForge.net</li>
    <li>Add HLVM project to collab.net</li>
    <li>Create a logo for the project</li>
  </ol>
</div>
<!--#include virtual="/incl/footer.incl" -->
