/// @mainpage Swift
///
/// @section main_intro Introduction
/// Welcome to Swift.
///
/// This documentation describes the @b internal software that makes
/// up Swift, not the @b external use of Swift. There are no instructions
/// here on how to use Swift, only the APIs that make up the software. For usage
/// instructions, please see the programmer's guide or reference manual.
///
/// @section main_caveat Caveat
/// This documentation is generated directly from the source code with doxygen.
/// Since Swift 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 Swift are very stable.
///
/// @section main_changelog Change Log
/// - Original content written 12/30/2003 by Reid Spencer for LLVM
/// - Stolen shamelessly by Michael Gottesman on 08/24/2013 for Swift
