mirror of
https://github.com/boostorg/wave.git
synced 2026-01-26 07:02:23 +00:00
110 lines
6.4 KiB
HTML
110 lines
6.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<title>Preface</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<link href="theme/style.css" rel="stylesheet" type="text/css">
|
|
</head>
|
|
|
|
<body text="#000000" background="theme/bkd.gif">
|
|
<table width="100%" border="0" cellspacing="2" background="theme/bkd2.gif">
|
|
<tr>
|
|
<td width="21"> <h1></h1></td>
|
|
<td width="885"> <font face="Verdana, Arial, Helvetica, sans-serif"><b><font size="6">Preface</font></b></font></td>
|
|
<td width="96"><a href="http://spirit.sf.net"><img src="theme/wave.gif" width="93" height="68" align="right" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="10"></td>
|
|
<td width="30"><a href="index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><img src="theme/l_arr_disabled.gif" width="20" height="19" border="0"></td>
|
|
<td width="30"><a href="introduction.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<p>During the last time many new features were developed as additions to the <tt>Spirit</tt>
|
|
<a href="references.html#spirit">[4]</a> parser construction framework and we
|
|
felt more and more, that it would be very helpful, to have a 'real world' example,
|
|
which could be used as a sandbox for testing the usability of certain features.
|
|
Additionally a recent discussion on the Boost mailing list showed the widespread
|
|
interest of developers to have a modern, open source C++ preprocessor library
|
|
to play with. So we had the idea to implement a C++ preprocessor to fit
|
|
this needs - <tt>Wave</tt> was born.</p>
|
|
<p align="justify">The <tt>Wave</tt> C++ preprocessor library uses the <a href="http://spirit.sourceforge.net/">
|
|
</a> <tt>Spirit<a href="references.html#spirit">[4]</a></tt> parser construction
|
|
library to implement a C++ lexer with ISO/ANSI standard conformant preprocessing
|
|
capabilities. It exposes an iterator interface, which returns the current preprocessed
|
|
token from the input stream. This preprocessed token is generated on the fly
|
|
while iterating over the preprocessor iterator sequence (in the terminology
|
|
of the STL these iterators are forward iterators). </p>
|
|
<p align="justify"> The C++ preprocessor is a macro processor that under normal
|
|
circumstances is used automatically by your C++ compiler to transform your program
|
|
before actual compilation. It is called a macro processor because it allows
|
|
you to define macros, which are brief abbreviations for longer constructs. The
|
|
C++ preprocessor provides four separate facilities that you can use as you see
|
|
fit: </p>
|
|
<blockquote>
|
|
<p><b><img src="theme/bullet.gif" width="13" height="13" id="IMG1"> </b>Inclusion
|
|
of header files<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13" id="IMG1"> </b>Macro
|
|
expansion<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13" id="IMG1"> </b>Conditional
|
|
compilation<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13" id="IMG1"> </b>Line
|
|
control</p>
|
|
</blockquote>
|
|
<p>These features are greatly underestimated today, even more, the preprocessor
|
|
has been frowned on for so long that its usage just hasn't been effectively
|
|
pushed until the Boost preprocessor library <a href="references.html#pp_lib">[7]</a>
|
|
came into being a few years ago. Only today we begin to understand, that preprocessor
|
|
generative metaprogramming combined with template metaprogramming in C++ is
|
|
by far one of the most powerful compile-time reflection/metaprogramming facilities
|
|
that any language has ever supported.</p>
|
|
<p align="justify">The main goals for the <tt>Wave</tt> project are:</p>
|
|
<blockquote>
|
|
<p><b><img src="theme/bullet.gif" width="13" height="13" id="IMG1"> </b>full
|
|
conformance with the C++ standard (ISO/IEC 14882:1998) <a href="references.html#iso_cpp">[1]</a>
|
|
and with the C99 standard (INCITS/ISO/IEC 9899:1999) <a href="references.html#iso_c">[2]</a><br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13"> </b>usage of <tt>Spirit<a href="references.html#spirit">[4]</a></tt>
|
|
for the parsing parts of the game (certainly :-)<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13"> </b>maximal usage
|
|
of STL and/or <tt>Boost</tt> libraries (for compactness and maintainability)<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13"> </b>straightforward
|
|
extendability for the implementation of additional features<br>
|
|
<b><img src="theme/bullet.gif" width="13" height="13"> </b>building a
|
|
flexible library for different C++ lexing and preprocessing needs</p>
|
|
</blockquote>
|
|
<p>At the first steps it is not planned to make a very high performance or very
|
|
small C++ preprocessor. If you are looking for these objectives you probably
|
|
have to look at other places. Although our C++ preprocessor iterator should
|
|
work as expected and will be usable as a reference implementation, for instance
|
|
for testing of other preprocessor oriented libraries as the Boost Preprocessor
|
|
library <a href="references.html#pp_lib">[7]</a> et.al.</p>
|
|
<p>As tests showed, the <tt>Wave</tt> library is very conformant to the C++ Standard,
|
|
such that it compiles several strict conformant macro definitions, which are
|
|
not even compilable with EDG based preprocessors (i.e. Comeau or Intel). It
|
|
is shown further, that the EDG preprocessor will outperform the <tt>Wave</tt>
|
|
preprocessor in simple cases. However, as complexity increases, time dilates
|
|
expontentially on EDG. Preprocessing time dilates linearly under <tt>Wave</tt>,
|
|
which causes it to easily outperform EDG based preprocessors when complexity
|
|
increases.</p>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="10"></td>
|
|
<td width="30"><a href="index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><img src="theme/l_arr_disabled.gif" width="20" height="19" border="0"></td>
|
|
<td width="30"><a href="introduction.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<hr size="1">
|
|
<p class="copyright">Copyright © 2003-2004 Hartmut Kaiser<br>
|
|
<br>
|
|
<font size="2">Use, modification and distribution is subject to the Boost Software
|
|
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
</font> </p>
|
|
<span class="updated">Last updated:
|
|
<!-- #BeginDate format:fcAm1m -->Monday, January 5, 2004 14:57<!-- #EndDate -->
|
|
</span></body>
|
|
</html>
|