//------------------------------------------------------------------------------
// Copyright (C) 2002 eXtensible Systems, Inc. All Rights Reserved.
//
// This program is open source software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License (GPL) as published by
// the Free Software Foundation; either version 2 of the License, or (at your
// option) any later version. You should have received a copy of the GPL in a
// file named COPYING that was included with this program; if not, you can 
// obtain a copy of the license through the Internet at http://www.fsf.org/
// 
// This program is distributed in the hope that it will be useful, but 
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
// for more details.
//
////////////////////////////////////////////////////////////////////////////////
/// @file docs/doxygen.intro
/// @author Reid Spencer <rspencer@reidspencer.com> (original author)
/// @date 2006/05/04
/// @brief HLVM documentation introduction.
////////////////////////////////////////////////////////////////////////////////

/// @mainpage HLVM: High Level Virtual Machine
///
/// @section main_intro Introduction
/// Welcome to the High Level Virtual Machine (HLVM). 
///
/// This documentation describes the @b internal software that makes 
/// up HLVM, not the @b external use of HLVM. There are no instructions
/// here on how to use HLVM, only how to develop it. For usage instructions 
/// please obtain the programmer's guide or user's guide for HLVM.
///
/// @section main_caveat Caveat
/// This documentation is generated directly from the source code with doxygen. 
/// Since HLVM is constantly under active development, what you're about to
/// read is out of date! However, it may still be useful since  certain 
/// portions of HLVM are relatively stable. When HLVM reaches 
/// full stability (around release 0.9), this caveat will be removed and the 
/// documentation will pertain to a specific release of the software. Until 
/// then, refer back often to this page as it is updated between releases as 
/// significant changes are made.
///
/// @section main_overview Overview
/// HLVM is a comprehensive compiler development toolkit that targets dynamic
/// languages and uses LLVM (Low Level Virtual Machine) for code generation. Its
/// primary goal is to make it easier to develop a dynamic language by providing
/// compilation tools, code generation, and the runtime environment.
/// 
/// We look forward to your future contributions.
///
/// @section main_changelog Change Log
/// - Original Introduction written 4/05/2006 by Reid Spencer
