diff options
author | nobody <nobody@localhost> | 2000-09-09 10:20:25 +0000 |
---|---|---|
committer | nobody <nobody@localhost> | 2000-09-09 10:20:25 +0000 |
commit | a340c71456a820985b425580218b1daeb9960f2f (patch) | |
tree | a4eb2510b15d3714f211e5fa963c4ca64fc8f7b8 | |
parent | ce5e16b6ae28e66369cdcfc6c416db64fd0298ba (diff) | |
download | boost-a340c71456a820985b425580218b1daeb9960f2f.tar.gz |
This commit was manufactured by cvs2svn to create branch
'boost-graph-library'.
[SVN r7698]
84 files changed, 3864 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules index d72a772305..9385b51e5b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,51 @@ path = libs/smart_ptr url = ../smart_ptr.git fetchRecurseSubmodules = on-demand +[submodule "random"] + path = libs/random + url = ../random.git + fetchRecurseSubmodules = on-demand +[submodule "timer"] + path = libs/timer + url = ../timer.git + fetchRecurseSubmodules = on-demand +[submodule "utility"] + path = libs/utility + url = ../utility.git + fetchRecurseSubmodules = on-demand +[submodule "functional"] + path = libs/functional + url = ../functional.git + fetchRecurseSubmodules = on-demand +[submodule "integer"] + path = libs/integer + url = ../integer.git + fetchRecurseSubmodules = on-demand +[submodule "compose"] + path = libs/compose + url = ../compose.git + fetchRecurseSubmodules = on-demand +[submodule "conversion"] + path = libs/conversion + url = ../conversion.git + fetchRecurseSubmodules = on-demand +[submodule "rational"] + path = libs/rational + url = ../rational.git + fetchRecurseSubmodules = on-demand +[submodule "config"] + path = libs/config + url = ../config.git + fetchRecurseSubmodules = on-demand +[submodule "array"] + path = libs/array + url = ../array.git + fetchRecurseSubmodules = on-demand +[submodule "iterator"] + path = libs/iterator + url = ../iterator.git + fetchRecurseSubmodules = on-demand +[submodule "type_traits"] + path = libs/type_traits + url = ../type_traits.git + fetchRecurseSubmodules = on-demand diff --git a/c++boost.gif b/c++boost.gif Binary files differnew file mode 100644 index 0000000000..58be431a3f --- /dev/null +++ b/c++boost.gif diff --git a/index.htm b/index.htm new file mode 100644 index 0000000000..229b50e9d0 --- /dev/null +++ b/index.htm @@ -0,0 +1,148 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Boost C++ Libraries</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Welcome to Boost.org!</h1> +<p>The Boost web site provides free, peer-reviewed, C++ <a href="libraries.htm">libraries</a>. +The emphasis is on portable libraries which work well with the C++ Standard +Library.</p> +<p><a href="more/lib_guide.htm">Library Requirements and Guidelines</a> and <a href="more/submission_process.htm">Library +Submission Process</a> provides basic information for library authors.</p> +<p>If you are interested in who writes the libraries and maintains the web site, +check out <a href="people.htm">people</a>.</p> +<p>The <a href="more/faq.htm">FAQ</a> answers questions we hope someone will +bother to ask.</p> +<p>You may <a href="file:///c:/boost/site/boost_all.zip">download all of boost</a> +as a single ZIP file. Click here for <a href="libraries.htm#Download">download</a> +details. The source code is also publicly accessible in a CVS <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</p> +<p>See <a href="libs/compiler_status.htm">Compiler Status</a> to find out what +library works with which compiler.</p> +<h2><a name="Mailing List">Membership</a></h2> +<p>If you are interested in Boost.org, please join our mailing list for +discussions of both technical and site-related issues, and to participate in +library reviews. Discussions can be received via email in summary or in full, or +viewed online via a web browser. We use the <a href="http://www.egroups.com">eGroups</a> +list hosting service. Subscribe or unsubscribe by sending email to <a href="mailto:boost-subscribe@egroups.com">boost-subscribe@egroups.com</a> +or <a href="mailto:boost-unsubscribe@egroups.com">boost-unsubscribe@egroups.com</a> +respectively, or go to the eGroups <a href="http://www.egroups.com/list/boost">list +manager home page</a>. Dave Abrahams and Beman Dawes are the list +moderators.</p> +<p>For mailing list members only, preliminary libraries under discussion are +available from the eGroups <a href="http://www.egroups.com/files/boost/">Files +section</a> (formerly called the "vault").</p> +<p>Beman Dawes is the Boost <a name="webmaster">webmaster</a>; email him at <a href="mailto:beman@boost.org">beman@boost.org</a> +with any concerns you don't want to just post to the mailing list.</p> +<h2>Latest News</h2> +<p>August 3, 2000 - Version 1.17.0</p> +<ul> + <li><a href="libs/array/array.htm">Array Library</a> added - An STL compliant + container wrapper for arrays of constant size from Nicolai Josuttis.</li> + <li><a href="libs/array_traits/index.html">array traits</a> header renamed + array_traits.hpp (was array.hpp).</li> + <li><a href="libs/random/index.html">Random Number Library</a>: more minor + changes to support more compilers.</li> + <li><a href="libs/smart_ptr/index.htm">Smart Pointer Library</a>: performance + reducing exception-specifications removed.</li> + <li><a href="libs/utility/index.htm">Utility Library</a>: compiler and test + program fixes for call_traits, compressed_pair, and type_traits.</li> + <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="boost/cast.hpp">cast.hpp</a> + to clear compiler warning messages..</li> + <li>Linux <a href="libs/compiler_status.htm">Compiler Status</a> added.</li> + <li>Boost source code now lives in a publicly accessible Concurrent Versions + System (CVS) <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</li> +</ul> +<p>July 5, 2000 - Version 1.16.1</p> +<ul> + <li><a href="libs/integer/index.htm">Integer</a> library: fixed <a href="boost/cstdint.hpp">cstdint.hpp</a> + bug, added <a href="libs/integer/cstdint_test.cpp">cstdint_test.cpp</a>, + updated <a href="libs/integer/cstdint.htm">docs</a>.</li> + <li><a href="libs/random/index.html">Random Number Library</a>: minor fixes to + <a href="boost/random.hpp">random.hpp</a> and <a href="libs/random/random_test.cpp">random_test.cpp</a> + to support more compilers.</li> + <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="boost/cast.hpp">cast.hpp</a> + with more Microsoft compiler workarounds.</li> + <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="libs/utility/call_traits.htm">call_traits + docs</a>, added <a href="libs/utility/call_traits_test.cpp">call_traits_test.cpp</a></li> + <li><a href="libs/utility/index.htm">Utility Library</a>: cleanup and bug + fixes for <a href="boost/operators.hpp">operators.hpp</a> and <a href="libs/utility/operators_test.cpp">operators_test.cpp</a></li> +</ul> +<p>June 28, 2000 - Version 1.16.0:</p> +<ul> + <li>Added <a href="libs/functional/index.html">Functional Library</a> - + Enhanced function object adaptors from Mark Rodgers.</li> + <li>Added missing <a href="libs/random/index.html">Random Number Library</a> + files.</li> + <li>Updated <a href="libs/utility/operators.htm">operators docs</a> and <a href="boost/operators.hpp">operators.hpp</a>.</li> + <li>New <a href="boost/iterator.hpp">iterator.hpp</a> header.</li> + <li>Minor <a href="boost/rational.hpp">rational.hpp</a>, <a href="libs/rational/rational_example.cpp">rational_example.cpp</a>, + and <a href="libs/integer/integer_traits_test.cpp">integer_traits_test.cpp</a> + changes to support more compilers.</li> + <li>Revised <a href="boost/cast.hpp">cast.hpp</a>; removed implicit_cast, plus + fixes for broken compilers.</li> + <li>Minor <a href="boost/smart_ptr.hpp">smart_ptr.hpp</a> workaround for some + GCC builds</li> + <li>Several <a href="boost/config.hpp">config.hpp</a> changes for Microsoft, + Intel, and other compilers.</li> + <li>Added <a href="libs/config/index.htm">Configuration Header</a> page and + test program.</li> + <li>Added Experimental <a href="libs/compiler_status.htm">Compiler Status</a> + page showing what library works with which compilers.</li> +</ul> +<p>June 21, 2000 - Version 1.15.1 - Fixes to <a href="boost/cast.hpp">cast.hpp</a> +and <a href="libs/utility/operators.htm">operators</a> fix. Minor additions to <a href="boost/config.hpp">config.hpp</a> +for Microsoft compilers. The 1.15.0 operators changes seem to have introduced +incompatibilities. We are working on fixing them, and have started to +build a regression test to prevent similar future problems.</p> +<p>June 17, 2000 - Version 1.15.0 - <a href="libs/random/index.html">Random +Number Library</a> from Jens Maurer added. Updated utility library <a href="libs/utility/operators.htm">operators</a> +eliminates code bloat. Minor additions to <a href="boost/config.hpp">config.hpp</a> +and <a href="boost/cast.hpp">cast.hpp</a> for Microsoft compilers.</p> +<p>May 29, 2000 - Version 1.14.3 - Minor additions to <a href="boost/config.hpp">config.hpp</a> +for Borland compilers. Minor fix to <a href="libs/utility/type_traits.htm">type_traits</a> +example. Minor web site fixes. <a href="more/formal_review_process.htm">Library +Formal Review Process</a> page added.</p> +<p>May 9, 2000 - Version 1.14.2 - No libraries updated. <a href="more/lib_guide.htm">Library +Requirements and Guidelines</a> expanded, <a href="more/submission_process.htm">Library +Submission Process</a> added.</p> +<p>March 17, 2000 - Version 1.14.1 - Minor fix to <a href="boost/rational.hpp">rational.hpp</a>. +Minor documentation changes to the <a href="libs/smart_ptr/index.htm">Smart +Pointer</a> Library and <a href="libs/utility/call_traits.htm">call_traits</a>, <a href="libs/utility/compressed_pair.htm">compressed_pair</a>, +and <a href="libs/utility/type_traits.htm">type_traits</a>. Updated <a href="more/lib_guide.htm">Library +Guidelines</a> and <a href="people.htm">People</a> page.</p> +<p>March 5, 2000 - Version 1.14.0 - <a href="libs/integer/index.htm">Integer +Library</a> status upgraded after removing bin_bun.hpp. The +"Experimental" library category has been removed; the boost +files/vault now serves the purpose. Minor fix to <a href="boost/smart_ptr.hpp">smart_ptr.hpp</a> +line endings.</p> +<p>February 29, 2000 - Version 1.13.0 - Adds <a href="libs/utility/index.htm">Utility +Library</a> <a href="libs/utility/type_traits.htm">type_traits</a>, <a href="libs/utility/call_traits.htm">call_traits</a>, +and <a href="libs/utility/compressed_pair.htm">compressed_pair</a> headers from +John Maddock, Steve Cleary and Howard Hinnant.</p> +<p>February 23, 2000 - Version 1.12.0 - Adds a <a href="libs/integer/integer_traits.html">integer_traits</a> +header from Jens Maurer to the <a href="libs/integer/index.htm">Integer Library</a>.</p> +<p>February 21, 2000 - Version 1.11.2 - <a href="libs/smart_ptr/smarttests.htm">Smart +pointer timings</a> added (thanks to Gavin Collings). Minor fix <a href="libs/min_rand/index.htm">min_rand</a> +sample program. Minor fixes to <a href="boost/config.hpp">config.hpp</a>.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->03 August 2000<!--webbot bot="Timestamp" endspan i-checksum="31242" --></p> + +</body> + +</html> diff --git a/libraries.htm b/libraries.htm new file mode 100644 index 0000000000..185f10ba98 --- /dev/null +++ b/libraries.htm @@ -0,0 +1,88 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Libraries</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost Libraries</h1> +<ul> + <li><a href="libs/array/index.htm">array</a> - STL compliant container wrapper + for arrays of constant size from Nicolai Josuttis.</li> + <li><a href="libs/compose/index.htm">compose</a> - functional composition + adapters for the STL from Nicolai Josuttis.</li> + <li><a href="libs/dir_it/index.htm">dir_it</a> - a set of file system + directory level iterators from Dietmar Kühl.</li> + <li><a href="libs/functional/index.html">functional</a> - enhanced function + object adaptors from Mark Rodgers.</li> + <li><a href="libs/integer/index.htm">integer</a> - headers for dealing with + integral types.</li> + <li><a href="libs/random/index.html">random</a> - a complete system for random + number generation from Jens Maurer.</li> + <li><a href="libs/rational/index.html">rational</a> - a rational number class + from Paul Moore.</li> + <li><a href="libs/smart_ptr/index.htm">smart_ptr</a> - four smart pointer + classes from Greg Colvin and Beman Dawes.</li> + <li><a href="libs/timer/index.htm">timer</a> - event timer, progress timer, + and progress display classes from Beman Dawes</li> + <li><a href="libs/utility/index.htm">utility</a> - various utility classes and + functions: + <ul> + <li><a href="libs/utility/call_traits.htm">call_traits</a> Defines types + for passing parameters from John Maddock, Howard Hinnant, et al.</li> + <li><a href="libs/utility/compressed_pair.htm">compressed_pair</a> Empty + member optimization from John Maddock, Howard Hinnant, et al.</li> + <li><a href="libs/utility/operators.htm">operators</a> Templates ease + arithmetic classes and iterators from Dave Abrahams and Jeremy Siek</li> + <li><a href="libs/utility/type_traits.htm">type_traits</a> Templates for + fundamental properties of types from John Maddock, Steve Cleary, et al.</li> + <li><a href="libs/utility/utility.htm">utility</a> Class <b>noncopyable</b> + plus <b>next()</b> and <b>prior()</b> template functions from Dave + Abrahams</li> + </ul> + </li> +</ul> +<p>See <a href="libs/compiler_status.htm">Compiler Status</a> to find out what +library works with which compiler.</p> +<h2>Obsolete Libraries</h2> +<ul> + <li><a href="libs/min_rand/index.htm">min_rand</a> - a random number generator + class from Beman Dawes. Replaced by <a href="libs/random/index.html">random</a>.</li> +</ul> +<h2>Beta Libraries</h2> +<ul> + <li><a href="libs/array_traits/index.html">array_traits</a> - tools to treat + built-in arrays more like STL containers from Dietmar Kühl. Also see <a href="libs/array/index.htm">array</a>.</li> + <li><a href="libs/utility/cast.htm">casts</a> - cast templates improve clarity + and safety; utility library contribution from Dave Abrahams and Kevlin + Henney.</li> + <li><a href="libs/pri_queue/index.html">heaps</a> - a heap of priority queues + from Dietmar Kühl.</li> +</ul> +<h2><a name="Download">Download</a></h2> +<p>You may <a href="boost_all.zip">download all of boost</a> as a single ZIP +file. As many boost headers include other boost headers, installing one at +at time is painful. This is a first try at making installation easier. </p> +<p>If you don't already have a ZIP file decoder, download one from the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> +web site.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->03 Aug 2000<!--webbot bot="Timestamp" endspan i-checksum="14750" --></p> + +</body> + +</html> diff --git a/libs/array b/libs/array new file mode 160000 +Subproject 2a876cf76e77735d28fdd6ad29227f8ea632a7c diff --git a/libs/compiler_status.htm b/libs/compiler_status.htm new file mode 100644 index 0000000000..744ae72ca2 --- /dev/null +++ b/libs/compiler_status.htm @@ -0,0 +1,57 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Compiler Status Report</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Compiler Status</h1> +<p>Will all boost libraries work with your compiler? Unfortunately, the +answer is "it depends.".</p> +<p>Boost libraries rely on modern C++ features such as templates and the C++ +Standard Library. But even today, years after the adoption of the C++ +Standard, some compilers still don't support important features like partial +template specialization.</p> +<p>Boost library authors often expend a great deal of effort trying to work +around compiler deficiencies. Nevertheless, some libraries will not +compile at all with certain compilers or may have crippled functionality. +Even if the current release of a compiler supports a boost library, older +version of the compiler may not work properly.</p> +<h2>Compiler Status Tables</h2> +<ul> + <li><a href="cs-linux2.html">Linux/x86</a> Contributed by Jens Maurer</li> + <li><a href="cs-win32.html">Windows NT / Windows 2000</a> Contributed by Beman + Dawes</li> +</ul> +<p>Boost releases are run through a regression test which automatically +generates the above tables. Unless otherwise indicated, the C++ Standard Library +implementation is the one shipped with the compiler.</p> +<p><b>Warning:</b> These tables are not a good indication of a particular +compiler's compliance with the C++ Standard. The boost libraries often +contain workarounds which mask compiler deficiencies.</p> +<p><b>Warning: </b>The regression test is under development and cannot yet be +relied upon. The current version is a compile only test; the programs are +not executed or otherwise tested. Even the compilation results may be +spurious; many negative results stem from problems with the immature test suite +rather that with the library or compiler. Furthermore, some library tests +have not yet been included.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->03 August 2000<!--webbot bot="Timestamp" endspan i-checksum="31242" --></p> + +</body> + +</html> diff --git a/libs/compose b/libs/compose new file mode 160000 +Subproject 37a6c2a159861851baafadee4da3e6eab1648bb diff --git a/libs/config b/libs/config new file mode 160000 +Subproject 1036984586fdca215ca5963fe9bc2f2a8b18f12 diff --git a/libs/conversion b/libs/conversion new file mode 160000 +Subproject 66834ebe526b30900ea54c18559ef49b1879e40 diff --git a/libs/cs-linux2.html b/libs/cs-linux2.html new file mode 100644 index 0000000000..85fe77262e --- /dev/null +++ b/libs/cs-linux2.html @@ -0,0 +1,99 @@ +<html> +<head> +<title> +Compiler Status: Linux/x86 +</title> +</head><body bgcolor="#FFFFFF" text="#000000"> +<h1><img border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: Linux/x86</h1> +<p><b>Run Date:</b> 04 Sep 2000 GMT</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>GNU<br>GCC<br>2.95.2</td> +<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td> +</tr> +<tr> +<td><a href="config/config_test.cpp">config/config_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="array/array1.cpp">array/array1.cpp</a></td> +<td>no</td> +<td>yes</td> +</tr> +<tr> +<td><a href="functional/function_test.cpp">functional/function_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="integer/cstdint_test.cpp">integer/cstdint_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="integer/integer_test.cpp">integer/integer_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="integer/integer_traits_test.cpp">integer/integer_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="rational/rational_example.cpp">rational/rational_example.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="random/random_test.cpp">random/random_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="random/random_demo.cpp">random/random_demo.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="smart_ptr/smart_ptr_test.cpp">smart_ptr/smart_ptr_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/call_traits_test.cpp">utility/call_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/cast_test.cpp">utility/cast_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/compressed_pair_test.cpp">utility/compressed_pair_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/iterators_test.cpp">utility/iterators_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/operators_test.cpp">utility/operators_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/type_traits_test.cpp">utility/type_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +</tr> +</table> +</body> +</html> diff --git a/libs/cs-win32.html b/libs/cs-win32.html new file mode 100644 index 0000000000..9ece1bd96a --- /dev/null +++ b/libs/cs-win32.html @@ -0,0 +1,150 @@ +<html> +<head> +<title> +Compiler Status: Windows NT / Windows 2000 +</title> +</head><body bgcolor="#FFFFFF" text="#000000"> +<h1><img border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: Windows NT / Windows 2000</h1> +<p><b>Run Date:</b> 03 Aug 2000 GMT</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Borland<br>BCC<br>5.4</td> +<td>Borland<br>BCC<br>5.5</td> +<td>Metrowerks<br>CodeWarrior<br>5.3</td> +<td>Microsoft<br>VC++<br>6.0 SP3</td> +<td>Microsoft<br>VC++<br>6.0 SP3<br>STLport<br>3.2.1</td> +</tr> +<tr> +<td><a href="config/config_test.cpp">config/config_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="array/array1.cpp">array/array1.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>no</td> +</tr> +<tr> +<td><a href="functional/function_test.cpp">functional/function_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>no</td> +</tr> +<tr> +<td><a href="integer/cstdint_test.cpp">integer/cstdint_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="integer/integer_test.cpp">integer/integer_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>no</td> +</tr> +<tr> +<td><a href="integer/integer_traits_test.cpp">integer/integer_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="rational/rational_example.cpp">rational/rational_example.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="random/random_test.cpp">random/random_test.cpp</a></td> +<td>no</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="random/random_demo.cpp">random/random_demo.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="smart_ptr/smart_ptr_test.cpp">smart_ptr/smart_ptr_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/call_traits_test.cpp">utility/call_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/cast_test.cpp">utility/cast_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/compressed_pair_test.cpp">utility/compressed_pair_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/iterators_test.cpp">utility/iterators_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/operators_test.cpp">utility/operators_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +<td>yes</td> +</tr> +<tr> +<td><a href="utility/type_traits_test.cpp">utility/type_traits_test.cpp</a></td> +<td>yes</td> +<td>yes</td> +<td>no</td> +<td>yes</td> +<td>yes</td> +</tr> +</table> +</body> +</html> diff --git a/libs/functional b/libs/functional new file mode 160000 +Subproject 2fea553297e9f4fb8657ae88672652ae821dc69 diff --git a/libs/integer b/libs/integer new file mode 160000 +Subproject 0101ecf6efce51c6bc917af2d43999ebd54d8bd diff --git a/libs/iterator b/libs/iterator new file mode 160000 +Subproject 65ad89dd5845bac8108092a75327e6ca7b29157 diff --git a/libs/random b/libs/random new file mode 160000 +Subproject 2ec49b3e5a2c262d2f8af051d003b44bb2f7c08 diff --git a/libs/rational b/libs/rational new file mode 160000 +Subproject 815153068b62c5839c8fb07ae475ad060b16f6a diff --git a/libs/regrtest.py b/libs/regrtest.py new file mode 100644 index 0000000000..d4b1286c91 --- /dev/null +++ b/libs/regrtest.py @@ -0,0 +1,212 @@ +#!/usr/bin/python + +# boost compilation regression test + +# Usage: regrtest [*|compiler] [*|library/program] +# +# Default: regrtest * * +# +# Compilers: bcc54 = Borland 5.4 +# bcc55 = Borland 5.5 +# cw = Metrowerks CodeWarrior +# gcc = GNU GCC/egcs +# vc = Microsoft Visual C++ +# vcstlport = Microsoft Visual C++ with STLport library +# +# Examples: regrtest +# regrtest +# regrtest gcc +# regrtest * smart_ptr/smart_ptr_test.cpp +# regrtest gcc smart_ptr/smart_ptr_test.cpp +# +# Note: use the following command line syntax if output is to be redirected: +# python regrtest.py [*|compiler] [*|library/program] >log 2>&1 + +# Revision history: +# 21 Jun 00 Redesign to allow specifying compiler and program (Beman Dawes) +# 18 Jun 00 Initial Version (Beman Dawes) + +# The Metrowerks and Microsoft compilers require various environment variables be set. +# See mwcc -help +# See http://msdn.microsoft.com/library/devprods/vs6/visualc/vccore/_core_building_on_the_command_line.3a_.overview.htm +# Others: +# See bcb4.hlp. Don't bother with bcb4tools.hlp; it has a bad link to the command line options + +import sys +import os +import time + +#------------------------------------------------------------------------------# + +def invoke( desc, command ): + + print " ", desc + f.write( "<td>" ) + print " ", command #script debugging aid + sys.stdout.flush() + rs=os.system( command ) + print " return status: ", rs + if rs==0: + f.write( "yes" ) + else: + f.write( "no" ) + f.write( "</td>\n" ) + +#------------------------------------------------------------------------------# + +def compile( program ): + + fullpath= path + "/libs/" + program + + print + print "*****", program, "*****" + + f.write( "<tr>\n" ) + f.write( "<td><a href=\"" + program + "\">" + program + "</a></td>\n" ) + + if sys.platform == "linux2": + if compiler_arg == "*" or compiler_arg == "gcc": + invoke( "GCC 2.95.2", 'g++ -ftemplate-depth-30 -I' + path + ' ' + fullpath ) + if compiler_arg == "*" or compiler_arg == "gcc-stlport": + invoke( "GCC 2.95.2 STLport 4.0b8", 'g++ -V 2.95.2-stlport -ftemplate-depth-30 -I' + path + ' ' + fullpath ) +# if compiler_arg == "*" or compiler_arg == "gcc-exp": +# invoke( "GCC pre-2.96 experimental", '/opt/exp/gcc/bin/g++ -ftemplate-depth-30 -I' + path + ' ' + fullpath ) + else: + if compiler_arg=="*" or compiler_arg=="bcc54": + bcc54_path=os.environ["BOOST_BCC54_PATH"] + invoke( "Borland C++ 5.4", "\"" + bcc54_path + "/bcc32\" -I" + path + " -j10 -q " + fullpath ) + if compiler_arg=="*" or compiler_arg=="bcc55": + bcc55_path=os.environ["BOOST_BCC55_PATH"] + invoke( "Borland C++ 5.5", "\"" + bcc55_path + "/bcc32\" -I" + path + " -j10 -q " + fullpath ) + + # GCC 2.95.2 is looping on some tests, so only invoke if asked for by name + #if compiler_arg=="*" or compiler_arg=="gcc": + if compiler_arg=="gcc": + # TODO: fix the absolute STLport paths + invoke( "GNU GCC", "c++ -ftemplate-depth-30 -I" + path + " -IC:/stl/STLport-4.0b8/stlport " + fullpath + " c:/stl/STLport-4.0b8/lib/libstlport_gcc.a" ) + + if compiler_arg=="*" or compiler_arg=="cw": + invoke( "Metrowerks CodeWarrior", "mwcc -maxerrors 10 -I- -I" + path + " " + fullpath ) + +#John Maddock says use /Zm400 switch; it increases compiler memory + if compiler_arg=="*" or compiler_arg=="vc": + invoke( "VC++ with MS library", 'cl /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" ' + fullpath ) + if compiler_arg=="*" or compiler_arg=="vcstlport": + stl=os.environ["BOOST_STLPORT_PATH"] + invoke( "VC++ with STLport library", 'cl /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + stl + '" /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" ' + fullpath ) + + + f.write( "</tr>\n" ) + +#------------------------------------------------------------------------------# + +def library(): + + print + print "***** Boost Library *****" + + f.write( "<tr>\n" ) + f.write( "<td>Boost library build</td>\n" ) + + #if compiler_arg=="*" or compiler_arg=="bcc32": + #if compiler_arg=="*" or compiler_arg=="gcc": + #if compiler_arg=="*" or compiler_arg=="cw": + + #if compiler_arg=="*" or compiler_arg=="vc": + # command='cl /nologo /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB /c"' + # command=command + " " + path + "/libs/" + ... + # invoke( "VC++ with MS library", command ) + +# invoke( "MS Lib with MS library", 'lib /nologo /out:"boost_vc.lib" boost_timer_vc.obj boost_prg_timer_vc.obj boost_prg_display_vc.obj' ) + + #if compiler_arg=="*" or compiler_arg=="vcstlport": + + f.write( "</tr>\n" ) + +#---------------------------------- main ------------------------------------# + +# set up environment variables + +path=os.environ["BOOST_PATH"] + +compiler_arg="*" +if len(sys.argv)>1: + compiler_arg=sys.argv[1] + +program_arg="*" +if len(sys.argv)>2: + program_arg=sys.argv[2] + +if sys.platform == "linux2": + platform = "Linux/x86" +elif sys.platform == "win32": + platform = "Windows" + if os.name == "nt": + platform = platform + " NT / Windows 2000" +else: + print "**** Error: unknown platform ****" + sys.exit(1) + +f=open( "cs-" + sys.platform + ".html", "w" ) + +f.write( "<html>\n<head>\n<title>\nCompiler Status: " + platform + "\n</title>\n</head>" ) +f.write( "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n" ) +f.write( "<h1><img border=\"0\" src=\"../c++boost.gif\" width=\"277\" height=\"86\"></h1>\n" ) +f.write( "<h1>Compiler Status: " + platform + "</h1>\n" ) +f.write( "<p><b>Run Date:</b> " + time.strftime("%d %b %Y GMT", time.gmtime(time.time())) + "</p>\n" ) +f.write( "<p>\n" ) +f.write( "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n" ) +f.write( "<tr>\n" ) +f.write( "<td>Program</td>\n" ) + +if sys.platform == "linux2": + if compiler_arg == "*" or compiler_arg == "gcc": + f.write( "<td>GNU<br>GCC<br>2.95.2</td>\n" ) + if compiler_arg == "*" or compiler_arg == "gcc-stlport": + f.write( "<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td>\n" ) +# if compiler_arg == "*" or compiler_arg == "gcc-exp": +# f.write( "<td>GNU<br>GCC<br>pre-2.96 experimental</td>\n" ) +else: + if compiler_arg=="*" or compiler_arg=="bcc54": + f.write( "<td>Borland<br>BCC<br>5.4</td>\n" ) + if compiler_arg=="*" or compiler_arg=="bcc55": + f.write( "<td>Borland<br>BCC<br>5.5</td>\n" ) + + # GCC 2.95.2 is looping on some tests, so only invoke if asked for by name + #if compiler_arg=="*" or compiler_arg=="gcc": + if compiler_arg=="gcc": + f.write( "<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td>\n" ) + if compiler_arg=="*" or compiler_arg=="cw": + f.write( "<td>Metrowerks<br>CodeWarrior<br>5.3</td>\n" ) + if compiler_arg=="*" or compiler_arg=="vc": + f.write( "<td>Microsoft<br>VC++<br>6.0 SP3</td>\n" ) + if compiler_arg=="*" or compiler_arg=="vcstlport": + f.write( "<td>Microsoft<br>VC++<br>6.0 SP3<br>STLport<br>3.2.1</td>\n" ) + +f.write( "</tr>\n" ) + +if program_arg=="*": + compile( "config/config_test.cpp" ) + compile( "array/array1.cpp" ) +# compile( "compose/compose1.cpp" ) + compile( "functional/function_test.cpp" ) + compile( "integer/cstdint_test.cpp" ) + compile( "integer/integer_test.cpp" ) + compile( "integer/integer_traits_test.cpp" ) + compile( "rational/rational_example.cpp" ) + compile( "random/random_test.cpp" ) + compile( "random/random_demo.cpp" ) + compile( "smart_ptr/smart_ptr_test.cpp" ) +# compile( "utility/algo_opt_examples.cpp" ) + compile( "utility/call_traits_test.cpp" ) + compile( "utility/cast_test.cpp" ) + compile( "utility/compressed_pair_test.cpp" ) + compile( "utility/iterators_test.cpp" ) + compile( "utility/operators_test.cpp" ) + compile( "utility/type_traits_test.cpp" ) +else: + compile( program_arg ) + +f.write( "</table>\n</body>\n</html>\n" ) + +# end diff --git a/libs/smart_ptr b/libs/smart_ptr -Subproject c47f309991b83794f0f037a320dc223939d65b0 +Subproject cfece50d17566a12660f1c1f0037698163419ac diff --git a/libs/timer b/libs/timer new file mode 160000 +Subproject afa8614e39f476fe14c8b8ddb57ff52c29b41a1 diff --git a/libs/type_traits b/libs/type_traits new file mode 160000 +Subproject f729d1b593836bfd1470bb24bd5d2be14988df3 diff --git a/libs/utility b/libs/utility new file mode 160000 +Subproject be4b817c83a879c2ae1493bde837b0e78e59112 diff --git a/more/count_bdy.htm b/more/count_bdy.htm new file mode 100644 index 0000000000..0dd6f0bc79 --- /dev/null +++ b/more/count_bdy.htm @@ -0,0 +1,1166 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> + +<HTML> + +<HEAD> + + <TITLE>Counted Body Techniques</TITLE> + + <META NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0"> + + <META NAME="Author" CONTENT="Kevlin Henney"> + + <META NAME="KeyWords" CONTENT="C++, Reference Counting, Advanced Techniques, Smart Pointers, Patterns"> + +</HEAD> + +<BODY bgcolor="#FFFFFF" text="#000000"> + + + +<H1 ALIGN=CENTER><I><FONT SIZE=+4>Counted Body Techniques</FONT></I></H1> + + + +<CENTER><P><B><FONT SIZE=+1><a href="../people/kevlin_henney.htm">Kevlin Henney</a><BR> + +</FONT>(<A HREF="mailto:kevlin@acm.org">kevlin@acm.org</A>, <a HREF="mailto:khenney@qatraining.com">khenney@qatraining.com</a>)</B></P></CENTER> + + + +<UL> + +<P>Reference counting techniques? Nothing new, you might think. Every good + +C++ text that takes you to an intermediate or advanced level will introduce + +the concept. It has been explored with such thoroughness in the past that + +you might be forgiven for thinking that everything that can be said has + +been said. Well, let's start from first principles and see if we can unearth + +something new....</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>And then there were none...</H2> + + +<UL> + +<P>The principle behind reference counting is to keep a running usage count + +of an object so that when it falls to zero we know the object is unused. + +This is normally used to simplify the memory management for dynamically + +allocated objects: keep a count of the number of references held to that + +object and, on zero, delete the object.</P> + + + +<P>How to keep a track of the number of users of an object? Well, normal + +pointers are quite dumb, and so an extra level of indirection is required + +to manage the count. This is essentially the P<FONT SIZE=-1>ROXY</FONT> + +pattern described in <I>Design Patterns</I> [Gamma, Helm, Johnson & + +Vlissides, Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-63361-2]. The + +intent is given as</P> + + + +<UL> + +<P><I>Provide a surrogate or placeholder for another object to control + +access to it.</I></P> + +</UL> + + + +<P>Coplien [<I>Advanced C++ Programming Styles and Idioms</I>, Addison-Wesley, + +<FONT SIZE=-1>ISBN </FONT>0-201-56365-7] defines a set of idioms related + +to this essential separation of a handle and a body part. The <I>Taligent + +Guide to Designing Programs </I>[Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-40888-0] + +identifies a number of specific categories for proxies (aka surrogates). + +Broadly speaking they fall into two general categories:</P> + + + +<UL> + +<LI><I>Hidden</I>: The handle is the object of interest, hiding the body + +itself. The functionality of the handle is obtained by delegation to the + +body, and the user of the handle is unaware of the body. Reference counted + +strings offer a transparent optimisation. The body is shared between copies + +of a string until such a time as a change is needed, at which point a copy + +is made. Such a C<FONT SIZE=-1>OPY</FONT> <FONT SIZE=-1>ON</FONT> W<FONT SIZE=-1>RITE</FONT> + +pattern (a specialisation of L<FONT SIZE=-1>AZY</FONT> E<FONT SIZE=-1>VALUATION</FONT>) + +requires the use of a hidden reference counted body.</LI> + + + +<LI><I>Explicit</I>: Here the body is of interest and the handle merely + +provides intelligence for its access and housekeeping. In C++ this is often + +implemented as the S<FONT SIZE=-1>MART</FONT> P<FONT SIZE=-1>OINTER</FONT> + +idiom. One such application is that of reference counted smart pointers + +that collaborate to keep a count of an object, deleting it when the count + +falls to zero.</LI> + +</UL> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Attached vs detached</H2> + + +<UL> + +<P>For reference counted smart pointers there are two places the count + +can exist, resulting in two different patterns, both outlined in <I>Software + +Patterns</I> [Coplien, SIGS, <FONT SIZE=-1>ISBN </FONT>0-884842-50-X]:</P> + + + +<UL> + +<LI>C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> or A<FONT SIZE=-1>TTACHED</FONT> + +C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +places the count within the object being counted. The benefits are that + +countability is a part of the object being counted, and that reference + +counting does not require an additional object. The drawbacks are clearly + +that this is intrusive, and that the space for the reference count is wasted + +when the object is not heap based. Therefore the reference counting ties + +you to a particular implementation and style of use.</LI> + + + +<LI>D<FONT SIZE=-1>ETACHED</FONT> C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +places the count outside the object being counted, such that they are handled + +together. The clear benefit of this is that this technique is completely + +unintrusive, with all of the intelligence and support apparatus in the + +smart pointer, and therefore can be used on classes created independently + +of the reference counted pointer. The main disadvantage is that frequent + +use of this can lead to a proliferation of small objects, i.e. the counter, + +being created on the heap.</LI> + +</UL> + + + +<P>Even with this simple analysis, it seems that the D<FONT SIZE=-1>ETACHED</FONT> + +C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +approach is ahead. Indeed, with the increasing use of templates this is + +often the favourite, and is the principle behind the common - but not standard + +- <TT><FONT SIZE=+1>counted_ptr</FONT></TT>. +<I>[The Boost name is <a href="../libs/smart_ptr/shared_ptr.htm"><TT><FONT SIZE=+1>shared_ptr</FONT></TT></a> + +rather than <TT><FONT SIZE=+1>counted_ptr</FONT></TT>.]</I></P> + + + +<P>A common implementation of C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> + +is to provide the counting mechanism in a base class that the counted type + +is derived from. Either that, or the reference counting mechanism is provided + +anew for each class that needs it. Both of these approaches are unsatisfactory + +because they are quite closed, coupling a class into a particular framework. + +Added to this the non-cohesiveness of having the count lying dormant in + +a non-counted object, and you get the feeling that excepting its use in + +widespread object models such as COM and CORBA the C<FONT SIZE=-1>OUNTED</FONT> + +B<FONT SIZE=-1>ODY</FONT> approach is perhaps only of use in specialised + +situations.</P> + +</UL> + + + +<HR WIDTH="100%"> +<H2>A requirements based approach</H2> + + +<UL> + +<P>It is the question of openness that convinced me to revisit the problems + +with the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> idiom. + +Yes, there is a certain degree of intrusion expected when using this idiom, + +but is there anyway to minimise this and decouple the choice of counting + +mechanism from the smart pointer type used?</P> + + + +<P>In recent years the most instructive body of code and specification + +for constructing open general purpose components has been the Stepanov + +and Lee's STL (Standard Template Library), now part of the C++ standard + +library. The STL approach makes extensive use of compile time polymorphism + +based on well defined operational requirements for types. For instance, + +each container, contained and iterator type is defined by the operations + +that should be performable on an object of that type, often with annotations + +describing additional constraints. Compile time polymorphism, as its name + +suggests, resolves functions at compile time based on function name and + +argument usage, i.e. overloading. This is less intrusive, although less + +easily diagnosed if incorrect, than runtime poymorphism that is based on + +types, names and function signatures.</P> + + + +<P>This requirements based approach can be applied to reference counting. + +The operations we need for a type to be <I>Countable</I> are loosely:</P> + + + +<UL> + +<LI>An <TT><FONT SIZE=+1>acquire</FONT></TT> operation that registers interest + +in a <I>Countable </I>object.</LI> + + + +<LI>A <TT><FONT SIZE=+1>release</FONT></TT> operation unregisters interest + +in a <I>Countable </I>object.</LI> + + + +<LI>An <TT><FONT SIZE=+1>acquired</FONT></TT> query that returns whether + +or not a <I>Countable </I>object is currently acquired.</LI> + + + +<LI>A <TT><FONT SIZE=+1>dispose</FONT></TT> operation that is responsible + +for disposing of an object that is no longer acquired.</LI> + +</UL> + + + +<P>Note that the count is deduced as a part of the abstract state of this + +type, and is not mentioned or defined in any other way. The openness of + +this approach derives in part from the use of global functions, meaning + +that no particular member functions are implied; a perfect way to wrap + +up an existing counted body class without modifying the class itself. The + +other aspect to the openness comes from a more precise specification of + +the operations.</P> + + + +<P>For a type to be <I>Countable</I> it must satisfy the following requirements, + +where <TT><FONT SIZE=+1>ptr</FONT></TT> is a non-null pointer to a single + +object (i.e. not an array) of the type, and <I><TT><FONT SIZE=+1>#function</FONT></TT></I> + +indicates number of calls to <TT><FONT SIZE=+1><I>function(</I>ptr<I>)</I></FONT></TT>:</P> + + + +<CENTER><TABLE BORDER=1 CELLSPACING=2 CELLPADDING=2 > + +<TR> + +<TD><I>Expression</I></TD> + + + +<TD><I>Return type</I></TD> + + + +<TD><I>Semantics and notes</I></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquire(ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>release(ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>pre</I>: <TT><FONT SIZE=+1>acquired(ptr)<BR> + +</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr) == #acquire - + +#release</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD> + + + +<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD> + + + +<TD><I>return</I>: <TT><FONT SIZE=+1>#acquire > #release</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>dispose(ptr, ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>pre</I>: <TT><FONT SIZE=+1>!acquired(ptr)<BR> + +</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>*ptr</FONT></TT> no longer usable</TD> + +</TR> + +</TABLE></CENTER> + + + +<P>Note that the two arguments to <TT><FONT SIZE=+1>dispose</FONT></TT> + +are to support selection of the appropriate type safe version of the function + +to be called. In the general case the intent is that the first argument + +determines the type to be deleted, and would typically be templated, while + +the second selects which template to use, e.g. by conforming to a specific + +base class.</P> + + + +<P>In addition the following requirements must also be satisfied, where + +<TT><FONT SIZE=+1>null</FONT></TT> is a null pointer to the <I>Countable</I> + +type:</P> + + + +<CENTER><TABLE BORDER=1 > + +<TR> + +<TD><I>Expression</I></TD> + + + +<TD><I>Return type</I></TD> + + + +<TD><I>Semantics and notes</I></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquire(null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>release(null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquired(null)</FONT></TT></TD> + + + +<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD> + + + +<TD><I>return</I>: <TT><FONT SIZE=+1>false</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>dispose(null, null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + +</TABLE></CENTER> + + + +<P>Note that there are no requirements on these functions in terms of exceptions + +thrown or not thrown, except that if exceptions are thrown the functions + +themselves should be exception safe.</P> + +</UL> + + + +<HR WIDTH="100%"> +<H2>Getting smart</H2> + + +<UL> + +<P>Given the <I>Countable</I> requirements for a type, it is possible to + +define a generic smart pointer type that uses them for reference counting:</P> + + + +<UL> +<PRE><TT>template<typename countable_type> +class countable_ptr +{ +public: // construction and destruction + + explicit countable_ptr(countable_type *); + countable_ptr(const countable_ptr &); + ~countable_ptr(); + +public: // access + + countable_type *operator->() const; + countable_type &operator*() const; + countable_type *get() const; + +public: // modification + + countable_ptr &clear(); + countable_ptr &assign(countable_type *); + countable_ptr &assign(const countable_ptr &); + countable_ptr &operator=(const countable_ptr &); + +private: // representation + + countable_type *body; + +}; +</TT></PRE> + +</UL> + + + +<P>The interface to this class has been kept intentionally simple, e.g. + +member templates and <TT><FONT SIZE=+1>throw</FONT></TT> specs have been + +omitted, for exposition. The majority of the functions are quite simple + +in implementation, relying very much on the <TT><FONT SIZE=+1>assign</FONT></TT> + +member as a keystone function:</P> + + + +<UL> + +<PRE><TT>template<typename countable_type> +countable_ptr<countable_type>::countable_ptr(countable_type *initial) + : body(initial) +{ + acquire(body); +} + +template<typename countable_type> +countable_ptr<countable_type>::countable_ptr(const countable_ptr &other) + : body(other.body) +{ + acquire(body); +} + +template<typename countable_type> +countable_ptr<countable_type>::~countable_ptr() +{ + clear(); +} + +template<typename countable_type> +countable_type *countable_ptr<countable_type>::operator->() const +{ + return body; +} + +template<typename countable_type> +countable_type &countable_ptr<countable_type>::operator*() const +{ + return *body; +} + +template<typename countable_type> +countable_type *countable_ptr<countable_type>::get() const +{ + return body; +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::clear() +{ + return assign(0); +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::assign(countable_type *rhs) +{ + // set to rhs (uses Copy Before Release idiom which is self assignment safe) + acquire(rhs); + countable_type *old_body = body; + body = rhs; + + // tidy up + release(old_body); + if(!acquired(old_body)) + { + dispose(old_body, old_body); + } + + return *this; +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::assign(const countable_ptr &rhs) +{ + return assign(rhs.body); +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::operator=(const countable_ptr &rhs) +{ + return assign(rhs); +} +</TT></PRE> + +</UL> + +</UL> + + + +<HR WIDTH="100%"> +<H2>Public accountability</H2> + + +<UL> + +<P>Conformance to the requirements means that a type can be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>. + +Here is an implementation mix-in class (<I>mix-imp</I>) that confers countability + +on its derived classes through member functions. This class can be used + +as a class adaptor:</P> + + + +<UL> + +<PRE><TT>class countability +{ +public: // manipulation + + void acquire() const; + void release() const; + size_t acquired() const; + +protected: // construction and destruction + + countability(); + ~countability(); + +private: // representation + + mutable size_t count; + +private: // prevention + + countability(const countability &); + countability &operator=(const countability &); + +}; +</TT></PRE> + +</UL> + + + +<P>Notice that the manipulation functions are <TT><FONT SIZE=+1>const</FONT></TT> + +and that the <TT><FONT SIZE=+1>count</FONT></TT> member itself is <TT><FONT SIZE=+1>mutable</FONT></TT>. + +This is because countability is not a part of an object's abstract state: + +memory management does not depend on the <TT><FONT SIZE=+1>const</FONT></TT>-ness + +or otherwise of an object. I won't include the definitions of the member + +functions here as you can probably guess them: increment, decrement and + +return the current count, respectively for the manipulation functions. + +In a multithreaded environment you should ensure that such read and write + +operations are atomic.</P> + + + +<P>So how do we make this class <I>Countable</I>? A simple set of forwarding + +functions does the job:</P> + + + +<UL> + +<PRE><TT>void acquire(const countability *ptr) +{ + if(ptr) + { + ptr->acquire(); + } +} + +void release(const countability *ptr) +{ + if(ptr) + { + ptr->release(); + } +} + +size_t acquired(const countability *ptr) +{ + return ptr ? ptr->acquired() : 0; +} + +template<class countability_derived> +void dispose(const countability_derived *ptr, const countability *) +{ + delete ptr; +} +</TT></PRE> + +</UL> + + + +<P>Any type that now derives from <TT><FONT SIZE=+1>countability</FONT></TT> + +may now be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>:</P> + + + +<UL> + +<PRE><TT>class example : public countability +{ + ... +}; + +void simple() +{ + countable_ptr<example> ptr(new example); + countable_ptr<example> qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs +</TT></PRE> +</UL> +</UL> + + + + +<HR WIDTH="100%"> +<H2>Runtime mixin</H2> + + +<UL> + +<P>The challenge is to apply C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> + +in a non-intrusive fashion, such that there is no overhead when an object + +is not counted. What we would like to do is confer this capability on a + +per object rather than on a per class basis. Effectively we are after <I>Countability + +</I>on any object, i.e. anything pointed to by a <TT><FONT SIZE=+1>void + +*</FONT></TT>! It goes without saying that <TT><FONT SIZE=+1>void</FONT></TT> + +is perhaps the least committed of any type.</P> + + + +<P>The forces to resolve on this are quite interesting, to say the least. + +Interesting, but not insurmountable. Given that the class of a runtime + +object cannot change dynamically in any well defined manner, and the layout + +of the object must be fixed, we have to find a new place and time to add + +the counting state. The fact that this must be added only on heap creation + +suggests the following solution:</P> + + + +<UL> + +<PRE><TT>struct countable_new; +extern const countable_new countable; + +void *operator new(size_t, const countable_new &); +void operator delete(void *, const countable_new &);</TT></PRE> +</UL> + + + +<P>We have overloaded <TT><FONT SIZE=+1>operator new</FONT></TT> with a + +dummy argument to distinguish it from the regular global <TT><FONT SIZE=+1>operator + +new</FONT></TT>. This is comparable to the use of the <TT><FONT SIZE=+1>std::nothrow_t</FONT></TT> + +type and <TT><FONT SIZE=+1>std::nothrow</FONT></TT> object in the standard + +library. The placement <TT><FONT SIZE=+1>operator delete</FONT></TT> is + +there to perform any tidy up in the event of failed construction. Note + +that this is not yet supported on all that many compilers.</P> + + + +<P>The result of a <TT><FONT SIZE=+1>new</FONT></TT> expression using <TT><FONT SIZE=+1>countable</FONT></TT> + +is an object allocated on the heap that has a header block that holds the + +count, i.e. we have extended the object by prefixing it. We can provide + +a couple of features in an anonymous namespace (not shown) in the implementation + +file for for supporting the count and its access from a raw pointer:</P> + + + +<UL> + +<PRE><TT>struct count +{ + size_t value; +}; + +count *header(const void *ptr) +{ + return const_cast<count *>(static_cast<const count *>(ptr) - 1); +} +</TT></PRE> + +</UL> + + + +<P>An important constraint to observe here is the alignment of <TT><FONT SIZE=+1>count</FONT></TT> + +should be such that it is suitably aligned for any type. For the definition + +shown this will be the case on almost all platforms. However, you may need + +to add a padding member for those that don't, e.g. using an anonymous <TT><FONT SIZE=+1>union</FONT></TT> + +to coalign <TT><FONT SIZE=+1>count</FONT></TT> and the most aligned type. + +Unfortunately, there is no portable way of specifying this such that the + +minimum alignment is also observed - this is a common problem when specifying + +your own allocators that do not directly use the results of either <TT><FONT SIZE=+1>new</FONT></TT> + +or <TT><FONT SIZE=+1>malloc</FONT></TT>.</P> + + + +<P>Again, note that the count is not considered to be a part of the logical + +state of the object, and hence the conversion from <TT><FONT SIZE=+1>const</FONT></TT> + +to non-<TT><FONT SIZE=+1>const</FONT></TT> - <TT><FONT SIZE=+1>count</FONT></TT> + +is in effect a <TT><FONT SIZE=+1>mutable</FONT></TT> type.</P> + + + +<P>The allocator functions themselves are fairly straightforward:</P> + + + +<UL> + +<PRE><TT>void *operator new(size_t size, const countable_new &) +{ + count *allocated = static_cast<count *>(::operator new(sizeof(count) + size)); + *allocated = count(); // initialise the header + return allocated + 1; // adjust result to point to the body +} + +void operator delete(void *ptr, const countable_new &) +{ + ::operator delete(header(ptr)); +} +</TT></PRE> + +</UL> + + + +<P>Given a correctly allocated header, we now need the <I>Countable </I>functions + +to operate on <TT><FONT SIZE=+1>const void *</FONT></TT> to complete the + +picture:</P> + + + +<UL> + +<PRE><TT>void acquire(const void *ptr) +{ + if(ptr) + { + ++header(ptr)->value; + } +} + +void release(const void *ptr) +{ + if(ptr) + { + --header(ptr)->value; + } +} + +size_t acquired(const void *ptr) +{ + return ptr ? header(ptr)->value : 0; +} + +template<typename countable_type> +void dispose(const countable_type *ptr, const void *) +{ + ptr->~countable_type(); + operator delete(const_cast<countable_type *>(ptr), countable); +} +</TT></PRE> + +</UL> + + + +<P>The most complex of these is the <TT><FONT SIZE=+1>dispose</FONT></TT> + +function that must ensure that the correct type is destructed and also + +that the memory is collected from the correct offset. It uses the value + +and type of first argument to perform this correctly, and the second argument + +merely acts as a strategy selector, i.e. the use of <TT><FONT SIZE=+1>const + +void *</FONT></TT> distinguishes it from the earlier dispose shown for + +<TT><FONT SIZE=+1>const countability *</FONT></TT>.</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Getting smarter</H2> + + + +<UL> + +<P>Now that we have a way of adding countability at creation for objects + +of any type, what extra is needed to make this work with the <TT><FONT SIZE=+1>countable_ptr</FONT></TT> + +we defined earlier? Good news: nothing!</P> + + + +<UL> + +<PRE><TT>class example +{ + ... +}; + +void simple() +{ + countable_ptr<example> ptr(new(countable) example); + countable_ptr<example> qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs +</TT></PRE> + +</UL> + + + +<P>The <TT><FONT SIZE=+1>new(countable)</FONT></TT> expression defines + +a different policy for allocation and deallocation and, in common with + +other allocators, any attempt to mix your allocation policies, e.g. call + +<TT><FONT SIZE=+1>delete</FONT></TT> on an object allocated with <TT><FONT SIZE=+1>new(countable)</FONT></TT>, + +results in undefined behaviour. This is similar to what happens when you + +mix <TT><FONT SIZE=+1>new[]</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT> + +or <TT><FONT SIZE=+1>malloc</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT>. + +The whole point of <I>Countable </I>conformance is that <I>Countable </I>objects + +are used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, and this ensures + +the correct use.</P> + + + +<P>However, accidents will happen, and inevitably you may forget to allocate + +using <TT><FONT SIZE=+1>new(countable)</FONT></TT> and instead use <TT><FONT SIZE=+1>new</FONT></TT>. + +This error and others can be detected in most cases by extending the code + +shown here to add a check member to the <TT><FONT SIZE=+1>count</FONT></TT>, + +validating the check on every access. A benefit of ensuring clear separation + +between header and implementation source files means that you can introduce + +a checking version of this allocator without having to recompile your code.</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Conclusion</H2> + + + +<UL> + +<P>There are two key concepts that this article has introduced:</P> + + + +<UL> + +<LI>The use of a generic requirements based approach to simplify and adapt + +the use of the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern.</LI> + + + +<LI>The ability, through control of allocation, to dynamically and non-intrusively + +add capabilities to fixed types using the R<FONT SIZE=-1>UNTIME</FONT> + +M<FONT SIZE=-1>IXIN</FONT> pattern.</LI> + +</UL> + + + +<P>The application of the two together gives rise to a new variant of the + +essential C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern, + +U<FONT SIZE=-1>NINTRUSIVE</FONT> C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT>. + +You can take this theme even further and contrive a simple garbage collection + +system for C++.</P> + + + +<P>The complete code for <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, <TT><FONT SIZE=+1>countability</FONT></TT>, + +and the <TT><FONT SIZE=+1>countable new</FONT></TT> is also available.</P> + +</UL> + + + +<DIV ALIGN=right><P> + +<HR WIDTH="100%"><FONT SIZE=-1><I>First published in </I><a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a> <I>25, + +April 1998, ISSN 1354-3172<BR> + +© Copyright Kevlin Henney, 1998, 1999</I></FONT></DIV> + + + +</BODY> + +</HTML> + diff --git a/more/faq.htm b/more/faq.htm new file mode 100644 index 0000000000..3315268506 --- /dev/null +++ b/more/faq.htm @@ -0,0 +1,118 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>FAQ</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="Microsoft Theme" content="none, default"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" + HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<h1>Frequently Asked Questions</h1> + +<p><b>How is a library accepted for posting on the site?</b> An initial review by the +library master filters out libraries which do not meet the absolute requirements (must be +C++, ownership clear, reasonable format, etc.) The author is free to rework and +resubmit libraries which do not pass initial muster. This is encouraged, particularly when +reviewers like the idea behind a library but feel that details are lacking.</p> + +<p><b>Is there any assurance libraries actually work as claimed?</b> No. The review +process will hopefully eliminate the most seriously flawed libraries, but a well +constructed library with hidden defects is likely to slip through. Encouraging ordinary +users to report their experience with a library is intended to address such concerns. </p> + +<p><b>How does someone submit a comment?</b> Send email to <a +href="mailto:boost@egroups.com">boost@egroups.com</a>. </p> + +<p><strong>How does someone submit a library?</strong> See <a href="lib_guide.htm">Library +Guidelines</a></p> + +<p><b>Are commercial libraries requiring a fee acceptable?</b> No. However, a library that +a commercial enterprise makes available without fee is acceptable. If the description of +the library makes a low-key plug for the supplier, that is acceptable as long as the +library delivers real value and isn’t just a Trojan horse for the plug.</p> + +<p><b>Are shareware libraries acceptable?</b> No. At least initially, only free libraries +will be accepted.</p> + +<p><strong>Are open source license libraries acceptable?</strong> No, not currently. +Open source licenses often require redistribution or availability of source code, +inclusion of license document with machine-executable redistribution, give the initial +developer rights to licensee modifications, and need a lawyer to understand. These +would be immediate disqualifications for many business, commercial, and consumer +applications. Boost aims to avoid subjecting users to hard-to-comply-with license terms.<br> +<br> +This is subject to review for a particularly important piece of software, or as the +industry changes.</p> + +<p><b>Must full source code be provided?</b> Yes, these are source code libraries.</p> + +<p><b>What about documentation?</b> A very simple library might be accepted with only a +well commented header file. For more substantial libraries, some form of documentation is +certainly going to be expected. HTML is the preferred form.</p> + +<p><b>Are platform specific libraries acceptable?</b> There is a preference for portable +libraries. Libraries will be accepted that have portable interfaces but require platform +specific implementations, as long as the author supplies implementations for a couple of +disparate major operating systems.</p> + +<p><b>Must a library do useful work? </b>No. A library meant as a teaching example or +demonstration might not actually do any work.</p> + +<p><b>Who owns the libraries?</b> Presumably many authors will copyright their libraries. +Others authors may wish to place their libraries in the public domain. The Boost.org +policy is to only accept libraries with a clear copyright notice. It is up to +potential users to decide if they find the copyright terms acceptable, and to not use +libraries with unacceptable copyrights.</p> + +<p><b>What support is available for the libraries?</b> Try the <a +href="mailto:boost@egroups.com">boost@egroups.com</a> mailing list. </p> + +<p><b>Is there a relationship between Boost.org and the C++ Standards Committee?</b> + No. The people who started Boost.org were all on the committee, but that was just +happenstance.</p> + +<p><b>Will the Boost.org libraries become part of the next C++ Standard?</b> Some +might, someday off in the future, but that is up to the standards committee. To the +extent a library becomes "existing practice", the likelihood increases that +someone will propose it for future standardization. Submitting a library to Boost.org is +one way to establish existing practice - as long as enough people are interested to +download and use it!</p> + +<p><b>Is the site a commercial business?</b> No. It is just some people getting together +as a kind of cyberspace civic association. If it ever needs to incorporate, it would be as +non-profit organization.</p> + +<p><b>Is there any charge for submitting libraries or reviews to Boost.org?</b> No. Unlike +the standards committees, you don’t have to pay to volunteer!</p> + +<p><b>Will the site include material beyond libraries?</b> The main focus is on libraries, +but if people contribute occasional articles or other material to make the site more +interesting, that could be a nice fit.</p> + +<p><strong>How do I unzip the distribution files on my [whatever] computer?</strong> + The .zip format is used for distribution because there are free decoders and +encoders available for many, many different platforms. See the <a +HREF="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> web site, which includes a FAQ and +much other useful information about the .zip format. Many commercial compressor-archiver +utilities also support this format.</p> + +<p>-- End of FAQ --</p> + +<p>Revised May 17, 1999</p> +</body> +</html> diff --git a/more/feature_model_diagrams.htm b/more/feature_model_diagrams.htm new file mode 100644 index 0000000000..40e807be3b --- /dev/null +++ b/more/feature_model_diagrams.htm @@ -0,0 +1,103 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Feature Model Diagrams</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<h1>Feature Model Diagrams in text and HTML</h1> +<p>By <a href="../people/beman_dawes.html">Beman Dawes</a></p> +<h2>Introduction</h2> +<p>In their seminal book, Generative Programming, Czarnecki and Eisenecker (<a href="#Generative Programming">C&E</a>) +describe how to build feature models [C&E 4.4] consisting of a feature +diagram plus semantic, rationale, and other attributes. Feature models are +then used to drive design cycles which eventually lead to manual or automatic +assembly of configurations.</p> +<p>Feature models provide a language to describe the library variability that is +often such an issue in boost.org discussions. The Whorf hypothesis that +"Language shapes the way we think, and determines what we can think +about" seems to apply. In discussion of library variability issues, +we have been crippled by lack of a good language. With feature models we now +have a language to carry on the dialog.</p> +<p>The graphical feature diagrams presented by C&E are not in a suitable +form for the email discussions boost.org depends upon. The hierarchical nature +of feature diagrams can be represented by a simple text-based feature diagram +language. A feature model can also take advantage of the hyperlinks +inherent in HTML.</p> +<h2><a name="Grammar">Grammar</a></h2> +<p>The grammar for the feature diagram language is expressed in Extended +Bakus-Naur Form; ::= represents productions, [...] represents options, {...} +represents zero or more instances, and represents | alternatives.</p> +<blockquote> + <pre>feature-model ::= concept-name details { feature }</pre> + <pre>feature ::= feature-name [details]</pre> + <pre>details ::= "(" feature-list ")" // required features + | "[" feature-list "]" // optional features</pre> + <pre>feature-list ::= element { "|" element } // one only + | element { "+" element } // one or more + | element { "," element } // all + // [a+b] equivalent to [a,b]</pre> + <pre>element ::= feature + | details</pre> + <pre>concept-name ::= name</pre> + <pre>feature-name ::= name</pre> +</blockquote> +<p>The usual lexical conventions apply. Names are case-insensitive and consist +of a leading letter, followed by letters, digits, underscores or hyphens, with +no spaces allowed.</p> +<p>At least one instance of each name should be hyperlinked to the corresponding +<a href="#Feature Descriptions">Feature Description</a>.</p> +<p>While the grammar is intended for written communication between people, it +may also be trivially machine parsed for use by automatic tools.</p> +<h2><a name="Feature Descriptions">Feature Description</a></h2> +<p>Descriptive information is associated with each concept or feature. According +to [C&E 4.4.2] this includes:</p> +<ul> + <li>Semantic descriptions.</li> + <li>Rationale.</li> + <li>Stakeholders and client programs.</li> + <li>Exemplar systems.</li> + <li>Constraints and default dependency rules.</li> + <li>Availability sites, binding sites, and binding mode.</li> + <li>Open/Closed attribute.</li> +</ul> +<h2>What is a Feature?</h2> +<p>A feature [C&E 4.9.1] is "anything users or client programs might +want to control about a concept. Thus, during feature modeling, we +document no only functional features ... but also implementation features, ..., +various optimizations, alternative implementation techniques, and so on."</p> +<h2>Example</h2> +<blockquote> + <pre>special-container ( organization, + performance, + interface ) // all required</pre> + <pre>organization [ ordered + indexed ] // zero or more (4 configurations)</pre> + <pre>indexed [ hash-function ] // zero or one (2 configurations)</pre> + <pre>performance ( fast | small | balanced ) // exactly one (3 configurations)</pre> + <pre>interface ( STL-style + cursor-style ) // one or more (3 configurations)</pre> +</blockquote> +<p>There should be feature descriptions for <code>some-container, organization, +ordered, indexed, hash-function, performance, fast, small, balanced, interface, +STL-style, and cursor-style</code>.</p> +<p>The number of possible configurations is (2 + 2*2) * 3 * 3 = 54, +assuming no constraints.</p> +<p>There are equivalent representations. For example:</p> +<blockquote> + <pre>special-container ( organization[ ordered+indexed[ hash-function ]], + performance( fast|small|balanced ), + interface( STL-style+cursor-style ) )</pre> +</blockquote> +<h2>References</h2> +<p>Krzysztof Czarnecki and Ulrich W. Eisenecker, <a name="Generative Programming" href="http://www.generative-programming.org">Generative +Programming</a>, Addison-Wesley, 2000, ISBN 0-210-30977-7</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->23 July 2000<!--webbot bot="Timestamp" endspan i-checksum="18762" --></p> +<p>© Copyright Beman Dawes, 2000</p> + +</body> + +</html> diff --git a/more/formal_review_process.htm b/more/formal_review_process.htm new file mode 100644 index 0000000000..a552056649 --- /dev/null +++ b/more/formal_review_process.htm @@ -0,0 +1,94 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Formal Review Process</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Formal Review Process</h1> +<p>The Formal Review process determines if a proposed library should be accepted +as a Boost library.</p> +<p>The final "accept" or "reject" decision is made by the +Review Manager, based on review comments received from boost mailing list +members.</p> +<p>Members only can see <a href="http://www.egroups.com/files/boost/Members+Only/formal_review_schedule.htm">Formal +Review Schedule</a> for the current review schedule. </p> +<h2>Comments</h2> +<p>All Boost mailing list members are encouraged to submit Formal Review +comments:</p> +<blockquote> + <ul> + <li>Publicly on the mailing list.</li> + <li>Privately to the Review Manager. (See Formal Review Status page )</li> + <li>Privately to the library submitter.</li> + </ul> +</blockquote> +<p>Private comments to a library submitter may be helpful to her or him, but +won't help the Review Manager reach a decision, so the other forms are +preferred.</p> +<h2>Preparing review comments</h2> +<p>Comments may be brief or lengthy, but basically the Review Manager needs your +answers to several questions. If you identify problems along the way, +please note if they are minor, serious, or showstoppers.</p> +<ul> + <li>What is your evaluation of the design?<br> + </li> + <li>What is your evaluation of the implementation?<br> + </li> + <li>What is your evaluation of the documentation?<br> + </li> + <li>What is your evaluation of the potential usefulness of the library?<br> + </li> + <li>Did you try to use the library? With what compiler? Did you + have any problems?<br> + </li> + <li>How much effort did you put into your evaluation? A glance? A quick + reading? In-depth study?<br> + </li> + <li>Are you knowledgeable about the problem domain?<br> + </li> + <li>Finally, do you think the library should be accepted as a Boost + library? Be sure to say this explicitly so that your other comments + don't obscure your overall opinion.</li> +</ul> +<h2>Results</h2> +<p>At the conclusion of the comment period, the Review Manager will post a +message to the mailing list saying if the library has been accepted or +rejected. A rationale should be provided, but its extent is up to the +Review Manager.</p> +<h2>Notes for Review Managers</h2> +<p>Consider writing a Review page for posting on the web site.</p> +<p>In Review pages or mailing list postings, do quote review comments if you +wish, but don't identify authors of private comments.</p> +<h2>Notes for Library Authors</h2> +<p>A proposed library should remain stable during the review period; it is just +going to confuse and irritate reviewers if there are numerous changes. It +is, however, useful to upload fixes for serious bugs right away, particularly +those which prevent reviewers from fully evaluating the library. Post a +notice of such fixes on the mailing list.</p> +<p>Library improvements suggested by reviewers should be held until after the +completion of review period. Such changes can then be incorporated in the <a href="submission_process.htm#Final">final +submission file</a> sent to the webmaster for posting. If the suggested +changes might affect reviewer's judgments, post a notice of the pending +change on the mailing list.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->13 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19835" --></p> +<p> </p> + +</body> + +</html> diff --git a/more/header.htm b/more/header.htm new file mode 100644 index 0000000000..e4d4c269d4 --- /dev/null +++ b/more/header.htm @@ -0,0 +1,102 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Header policy</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Header Policy</h1> +<p>Header files are the place where a library comes into contact with user code +and other libraries. To co-exist peacefully and productively, headers must +be "good neighbors".</p> +<p>Here are the standards for namespace boost headers. Many of +these are also reasonable guidelines for general use. +<ul> + <li>Headers should have a .hpp (lowercase) filename extension. </li> + <li>Identify the file with an initial comment line. The sample header + identifies both the name of the header and the library it is a part of.</li> + <li>Specify copyright ownership and any restrictions on use. If you + don't want to retain ownership, say something like "Written by Jane + Programmer and placed in the public domain".</li> + <li>Supply version information, possibly generated automatically by your + version control system.</li> + <li>Macro names should be all uppercase, and begin with the namespace + name. Underscores separate words.</li> + <li>Wrap the header in #ifndef guards so that multiple inclusion is + benign. Use a naming convention that minimizes the chance of clashes + with macro names from other's code. The <a href="#Sample header">sample + header</a> uses the Boost convention of all uppercase letters, with the + header name prefixed by the namespace name, and suffixed with HPP, separated + by underscores.</li> + <li>Wrap the header contents in a namespace to prevent global namespace + pollution. The namespace approach to pollution control is strongly preferred + to older approaches such as adding funny prefixes to global names. + Libraries which are designed to work well with other Boost libraries should + be placed namespace <tt>boost</tt>.</li> + <li>Place the header file in a sub-directory to prevent conflict with + identically named header files in other libraries. The parent + directory is added to the compiler's include search path. Then both + your code and user code specifies the sub-directory in <tt>#include</tt> + directives. Thus the header <a href="#Sample header">sample header</a> + would be included by <tt>#include <boost/furball.hpp></tt></li> + <li>The preferred ordering for class definitions is public members, protected + members, and finally private members.</li> + <li>Include the boost/config.hpp <a href="../libs/config/index.htm">configuration + header</a> if there is a need to deal with compiler or platform + configuration issues.</li> +</ul> +<h2><a name="Sample header"></a>Sample Header</h2> +<pre><tt>// Boost general library furball.hpp header file ---------------------------// + +// (C) Copyright Your Name 1998. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +// $Id$ or other version information + +#ifndef BOOST_FURBALL_HPP +#define BOOST_FURBALL_HPP + +namespace boost { + +// Furball class declaration -----------------------------------------------// + + class furball + { + public: + void throw_up(); + private: + int whatever; + }; // furball + +} // namespace + +#endif // BOOST_FURBALL_HPP</tt></pre> +<h2>Coding Style</h2> +<p>The alert reader will have noticed that the <a href="#Sample header">sample +header</a> employs a certain coding style for indentation, positioning braces, +commenting ending braces, and similar formatting issues. These stylistic +issues are viewed as personal preferences and are not part of the Boost Header +Policy.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->27 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21060" --></p> + +</body> + +</html> diff --git a/more/imp_vars.htm b/more/imp_vars.htm new file mode 100644 index 0000000000..9d1a191135 --- /dev/null +++ b/more/imp_vars.htm @@ -0,0 +1,201 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Implementation Variations</title> +</head> + +<body link="#0000ff" vlink="#800080" bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Implementation Variations</h1> +<h2>Separation of interface and implementation</h2> +<p>The interface specifications for boost.org library components (as well as for +quality software in general) are conceptually separate from implementations of +those interfaces. This may not be obvious, particularly when a component is +implemented entirely within a header, but this separation of interface and +implementation is always assumed. From the perspective of those concerned with +software design, portability, and standardization, the interface is what is +important, while the implementation is just a detail.</p> +<p>Dietmar Kühl, one of the original boost.org contributors, comments "The +main contribution is the interface, which is augmented with an implementation, +proving that it is possible to implement the corresponding class and providing a +free implementation."</p> +<b> +<h2>Implementation variations</h2> +</b> +<p>There may be a need for multiple implementations of an interface, to +accommodate either platform dependencies or performance tradeoffs. Examples of +platform dependencies include compiler shortcomings, file systems, thread +mechanisms, and graphical user interfaces. The classic example of a performance +tradeoff is a fast implementation which uses a lot of memory versus a slower +implementation which uses less memory.</p> +<p>Boost libraries generally use a <a href="../libs/config/index.htm">configuration +header</a>, boost/config.hpp, to capture compiler and platform +dependencies. Although the use of boost/config.hpp is not required, it is +the preferred approach for simple configuration problems. </p> +<h2>Boost policy</h2> +<p>The Boost policy is to avoid platform dependent variations in interface +specifications, but supply implementations which are usable over a wide range of +platforms and applications. That means boost libraries will use the +techniques below described as appropriate for dealing with platform +dependencies.</p> +<p>The Boost policy toward implementation variations designed to enhance +performance is to avoid them unless the benefits greatly exceed the full +costs. The term "full costs" is intended to include both +tangible costs like extra maintenance, and intangible cost like increased +difficulty in user understanding.</p> +<b> +<h2>Techniques for providing implementation variations</h2> +</b> +<p>Several techniques may be used to provide implementation variations. Each is +appropriate in some situations, and not appropriate in other situations.</p> +<h3>Single general purpose implementation</h3> +<p>The first technique is to simply not provide implementation variation at +all. Instead, provide a single general purpose implementation, and forgo +the increased complexity implied by all other techniques.</p> +<p><b>Appropriate:</b> When it is possible to write a single portable +implementation which has reasonable performance across a wide range of +platforms. Particularly appropriate when alternative implementations differ only +in esoteric ways.</p> +<p><b>Not appropriate:</b> When implementation requires platform specific +features, or when there are multiple implementation possible with widely +differing performance characteristics.</p> +<p>Beman Dawes comments "In design discussions some implementation is often +alleged to be much faster than another, yet a timing test discovers no +significant difference. The lesson is that while algorithmic differences may +affect speed dramatically, coding differences such as changing a class from +virtual to non-virtual members or removing a level of indirection are unlikely +to make any measurable difference unless deep in an inner loop. And even in an +inner loop, modern CPU’s often execute such competing code sequences in the +same number of clock cycles! A single general purpose implementation is +often just fine."</p> +<p>Or as Donald Knuth said, "Premature optimization is the root of all +evil." (Computing Surveys, vol 6, #4, p 268).</p> +<h3>Macros</h3> +<p>While the evils of macros are well known, there remain a few cases where +macros are the preferred solution:</p> +<blockquote> + <ul> + <li> Preventing multiple inclusion of headers via #include guards.</li> + <li> Passing minor configuration information from a configuration + header to other files.</li> + </ul> +</blockquote> +<p><b>Appropriate:</b> For small compile-time variations which would +otherwise be costly or confusing to install, use, or maintain. More appropriate +to communicate within and between library components than to communicate with +library users.</p> +<p><b>Not appropriate: </b> If other techniques will do.</p> +<p>To minimize the negative aspects of macros:</p> +<blockquote> + <ul> + <li>Only use macros when they are clearly superior to other + techniques. They should be viewed as a last resort.</li> + <li>Names should be all uppercase, and begin with the namespace name. This + will minimize the chance of name collisions. For example, the #include + guard for a boost header called foobar.h might be named BOOST_FOOBAR_H.</li> + </ul> +</blockquote> +<h3>Separate files</h3> +<p>A library component can have multiple variations, each contained in its own +separate file or files. The files for the most appropriate variation are +copied to the appropriate include or implementation directories at installation +time.</p> +<p>The way to provide this approach in boost libraries is to include specialized +implementations as separate files in separate sub-directories in the .ZIP +distribution file. For example, the structure within the .ZIP distribution file +for a library named foobar which has both default and specialized variations +might look something like:</p> +<blockquote> + <pre>foobar.h // The default header file +foobar.cpp // The default implementation file +readme.txt // Readme explains when to use which files +self_contained/foobar.h // A variation with everything in the header +linux/foobar.cpp // Implementation file to replace the default +win32/foobar.h // Header file to replace the default +win32/foobar.cpp // Implementation file to replace the default</pre> +</blockquote> +<p><b>Appropriate:</b> When different platforms require different +implementations, or when there are major performance differences between +possible implementations. </p> +<p><b>Not appropriate:</b> When it makes sense to use more that one of the +variations in the same installation.</p> +<h3>Separate components</h3> +<p>Rather than have several implementation variations of a single component, +supply several separate components. For example, the Boost library currently +supplies <code>scoped_ptr</code> and <code>shared_ptr</code> classes rather than +a single <code>smart_ptr</code> class parameterized to distinguish between the +two cases. There are several ways to make the component choice:</p> +<blockquote> + <ul> + <li>Hardwired by the programmer during coding.</li> + <li>Chosen by programmer written runtime logic (trading off some extra + space, time, and program complexity for the ability to select the + implementation at run-time.)</li> + </ul> +</blockquote> +<p><b>Appropriate: </b>When the interfaces for the variations diverge, and when +it is reasonably to use more than one of the variations. When run-time selection +of implementation is called for.</p> +<p><b>Not appropriate:</b> When the variations are data type, traits, or +specialization variations which can be better handled by making the component a +template. Also not appropriate when choice of variation is best done by some +setup or installation mechanism outside of the program itself. Thus +usually not appropriate to cope with platform differences.</p> +<p><b>Note:</b> There is a related technique where the interface is specified as +an abstract (pure virtual) base class (or an interface definition language), and +the implementation choice is passed off to some third-party, such as a +dynamic-link library or object-request broker. While that is a powerful +technique, it is way beyond the scope of this discussion.</p> +<h3>Template-based approaches</h3> +<p>Turning a class or function into a template is often an elegant way to cope +with variations. Template-based approaches provide optimal space and time +efficiency in return for constraining the implementation selection to compile +time. </p> +<p>Important template techniques include:</p> +<blockquote> + <ul> + <li>Data type parameterization. This allows a single component to + operate on a variety of data types, and is why templates were originally + invented.</li> + <li>Traits parameterization. If parameterization is complex, bundling + up aspects into a single traits helper class can allow great variation + while hiding messy details. The C++ Standard Library provides + several examples of this idiom, such as <code>iterator_traits<></code> + (24.3.1 lib.iterator.traits) and <tt>char_traits<></tt> (21.2 + lib.char.traits).</li> + <li>Specialization. A template parameter can be used purely for the + purpose of selecting a specialization. For example:</li> + </ul> + <blockquote> + <blockquote> + <pre>SomeClass<fast> my_fast_object; // fast and small are empty classes +SomeClass<small> my_small_object; // used just to select specialization</pre> + </blockquote> + </blockquote> +</blockquote> +<p><b>Appropriate: </b>When the need for variation is due to data type or +traits, or is performance related like selecting among several algorithms, and +when a program might reasonably use more than one of the variations.</p> +<p><b>Not appropriate:</b> When the interfaces for variations are +different, or when choice of variation is best done by some mechanism outside of +the program itself. Thus usually not appropriate to cope with platform +differences.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->23 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19836" --></p> + +</body> + +</html> diff --git a/more/index.htm b/more/index.htm new file mode 100644 index 0000000000..1c97f2d736 --- /dev/null +++ b/more/index.htm @@ -0,0 +1,62 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>More Information</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>More Information</h1> +<h2>Boost Policies</h2> +<p>These policies explain what is expected of boost libraries and the process +for library submissions.</p> +<blockquote> + <p><b><a href="lib_guide.htm">Library Requirements and Guidelines</a></b>. + Basic standards for those preparing a submission.</p> + <p><a href="submission_process.htm"><b>Library Submission Process</b></a>. + How to submit a library to Boost.</p> + <p><b><a href="formal_review_process.htm">Library Formal Review Process</a></b>. + Including how to submit a review comment.</p> + <p><b><a href="header.htm">Header Policy</a></b>. Headers are where a + library contacts its users, so programming practices are particularly + important.</p> + <p><b><a href="imp_vars.htm">Implementation Variations</a></b>. + Sometimes one size fits all, sometimes it doesn't. This page deals with + the trade-offs.</p> +</blockquote> +<h2>Links</h2> +<blockquote> + <p>The C++ Standard (ISO/IEC 14882) is available online as a PDF file from the + <a href="http://www.ansi.org">ANSI</a> (American National Standards Institute) + Electronic Standards Store. The price is $US 18.00. The document is + certainly not a tutorial, but is interesting to those who care about the + precise specification of the language and the standard library.</p> +</blockquote> +<h2>Articles and Papers</h2> +<blockquote> + <p><b><a href="count_bdy.htm">Counted Body Techniques</a></b> by <a href="../people/kevlin_henney.htm">Kevlin + Henney</a> is must reading for those interested in reference counting, a + widely used object management idiom. Originally published in <a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a> + magazine.</p> + <p><b><a href="feature_model_diagrams.htm">Feature Model Diagrams in text and + HTML</a></b> describes how to represent feature model diagrams in text form.</p> +</blockquote> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->16 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21057" --></p> + +</body> + +</html> diff --git a/more/lib_guide.htm b/more/lib_guide.htm new file mode 100644 index 0000000000..260ea55f25 --- /dev/null +++ b/more/lib_guide.htm @@ -0,0 +1,268 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Library Requirements and Guidelines</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1 align="left">Boost Library Requirements and Guidelines</h1> +<p align="left">This page describes requirements and guidelines for the content +of a library submitted to Boost.</p> +<p align="left">See the <a href="submission_process.htm">Boost Library +Submission Process</a> page for a description of the process involved.</p> +<h2 align="left">Requirements</h2> +<p>To avoid the frustration and wasted time of a proposed library being +rejected, it must meets these requirements:</p> +<ul> + <li>The license must meet the <a href="#License">license requirements</a> + below. Restricted licenses like the GPL and LGPL are not acceptable. The + copyright <a href="#Ownership">ownership</a> must be clear.<br> + </li> + <li>The library must be generally useful and not restricted to a narrow + problem domain.<br> + </li> + <li>The library must meet the <a href="#Portability">portability requirements</a> + below. <br> + </li> + <li>The library must come reasonably close to meeting the <a href="#Guidelines">Guidelines</a> + below.<br> + </li> + <li>The author must be willing to participate in discussions on the mailing + list, and to refine the library accordingly.</li> +</ul> +<p>There's no requirement that an author read the mailing list for a time before +making a submission. It has been noted, however, that submissions which begin +"I just started to read this mailing list ..." seem to fail, often +embarrassingly.</p> +<h3 align="left"><a name="License">License</a> requirements</h3> +<ul> + <li>Must be simple to read and understand.<br> + </li> + <li>Must grant permission to copy, use and modify the software for any use + (commercial and non-commercial) for no fee.<br> + </li> + <li>Must require that the license appear on all copies of the software source + code.<br> + </li> + <li>Must not require that the license appear with executables or other binary + uses of the library. Must not require that the source code be + available for execution or other binary uses of the library.<br> + </li> + <li>May restrict the use of the name and description of the library to the + standard version found on the Boost web site.</li> +</ul> +<h3 align="left"><a name="Portability">Portability</a> requirements</h3> +<ul> + <li> + <p align="left">A library's interface must portable and not restricted to a + particular compiler or operating system.<br> + </li> + <li> + <p align="left">A library's implementation must if possible be portable and + not restricted to a particular compiler or operating system. If a + portable implementation is not possible, non-portable constructions are + acceptable if reasonably easy to port to other environments.<br> + </li> + <li> + <p align="left">There is no requirement that a library run on all C++ + compilers. <br> + </li> + <li> + <p align="left">There is no requirement that a library run on any particular + C++ compiler. Boost contributors often try to ensure their libraries + work with popular compilers. The boost/config.hpp <a href="../libs/config/index.htm">configuration + header</a> is the preferred mechanism for working around compiler + deficiencies.</li> +</ul> +<p align="left">Since there is no absolute way to prove portability, many boost +submissions demonstrate practical portability by compiling and executing +correctly with two different C++ compilers, often under different operating +systems. Otherwise reviewers may disbelieve that porting is in fact +practical.</p> +<h3 align="left"><a name="Ownership">Ownership</a></h3> +<p align="left">Are you sure you own the library you are thinking of +submitting? "How to Copyright Software" by MJ Salone, Nolo +Press, 1990 says:</p> +<blockquote> + <p align="left">Doing work on your own time that is very similar to + programming you do for your employer on company time can raise nasty legal + problems. In this situation, it's best to get a written release from + your employer in advance.</p> +</blockquote> +<p align="left">Place a copyright notice in all the important files you submit. +Boost.org won't accept libraries without clear copyright information.</p> +<h2 align="left"><a name="Guidelines">Guidelines</a></h2> +<p align="left">Please use these guidelines as a checklist for preparing the +content a library submission. Not every guideline applies to every +library, but a reasonable effort to comply is expected.</p> +<h3>Design and Programming</h3> +<ul> + <li>Aim for ISO Standard C++. Than means making effective use of the standard + features of the language, and avoiding non-standard compiler extensions. It + also means using the C++ Standard Library where applicable.</li> +</ul> +<ul> + <li>Headers should be good neighbors. See the <a href="header.htm">header + policy</a>.</li> +</ul> +<ul> + <li>Follow the <a href="imp_vars.htm">implementation variation policy</a>. </li> +</ul> +<ul> + <li>Follow quality programming practices. See, for example, "Effective + C++" 2nd Edition, and "More Effective C++", both by Scott + Meyers, published by Addison Wesley.</li> +</ul> +<ul> + <li>Use the lowercase/underscore <a href="#Naming">naming conventions</a> of + the C++ standard library. Template parameter names begin with an + uppercase letter. Macro (gasp!) names should be all uppercase and begin with + BOOST_.</li> +</ul> +<ul> + <li>Use exceptions to report errors where appropriate, and write code that is + safe in the face of exceptions.</li> +</ul> +<ul> + <li>Avoid exception-specifications. See <a href="#Exception-specification">exception-specification + rationale</a>.</li> +</ul> +<ul> + <li>Provide sample programs, confidence tests, or regression tests so + potential users can see how to use your library and verify that it has + compiled correctly.</li> +</ul> +<ul> + <li>Although some boost members use proportional fonts, tabs, and unrestricted + line lengths in their own code, boost's widely distributed source code + should follow more conservative guidelines: + <ul> + <li>Use fixed-width fonts. See <a href="#code fonts">fonts rationale</a>.</li> + <li>Use spaces rather than tabs.</li> + <li>Limit line lengths to 80 characters.</li> + </ul> + </li> +</ul> +<h3>Documentation</h3> +<p>Even the simplest library needs some documentation; the amount should be +proportional to the need. The documentation should assume the readers have +a basic knowledge of C++, but are not necessarily experts.</p> +<p>The format for documentation should be HTML, and should not require an +advanced browser or server-side extensions.</p> +<p>There is no single right way to do documentation. HTML documentation is often +organized quite differently from traditional printed documents. Task-oriented +styles differ from reference oriented styles. In the end, it comes down to the +question: Is the documentation sufficient for the mythical "average" +C++ programmer to use the library successfully?</p> +<p>Appropriate topics for documentation often include: +<ul> + <li>General introduction to the library.</li> + <li>Description of each class.</li> + <li>Relationship between classes.</li> + <li>For each function, as applicable, description, requirements + (preconditions), effects, post-conditions, returns, and throws.</li> + <li>Discussion of error detection and recovery strategy.</li> + <li>How to use including description of typical uses.</li> + <li>How to compile and link.</li> + <li>How to test.</li> + <li>Version or revision history.</li> + <li>Rationale for design decisions. See <a href="#Rationale">Rationale + rationale</a>.</li> + <li>Acknowledgements. See <a href="#Acknowledgements">Acknowledgments + rationale.</a></li> +</ul> +<h2>Rationale</h2> +<p>Rationale for some of the requirements and guidelines follows.</p> +<h3><a name="Exception-specification">Exception-specification</a> rationale</h3> +<p>Exception specifications [ISO 15.4] are sometimes coded to indicate what +exceptions may be thrown, or because the programmer hopes they will improved +performance. But consider the follow member from a smart pointer:</p> +<pre> T& operator*() const throw() { return *ptr; }</pre> +<p>This function calls no other functions; it only manipulates fundamental data +types like pointers Therefore, no runtime behavior of the +exception-specification can ever be invoked. The function is completely +exposed to the compiler; indeed it is declared inline Therefore, a smart +compiler can easily deduce that the functions are incapable of throwing +exceptions, and make the same optimizations it would have made based on the +empty exception-specification. A "dumb" compiler, however, may make +all kinds of pessimizations.</p> +<p>For example, some compilers turn off inlining if there is an +exception-specification. Some compilers add try/catch blocks. Such +pessimizations can be a performance disaster which makes the code unusable in +practical applications.</p> +<p>Although initially appealing, an exception-specification tends to have +consequences that require <b>very</b> careful thought to understand. The biggest +problem with exception-specifications is that programmers use them as though +they have the effect the programmer would like, instead of the effect they +actually have.</p> +<p>A non-inline function is the one place a "throws nothing" +exception-specification may have some benefit with some compilers.</p> +<hr> +<h3><a name="Naming">Naming</a> conventions rationale</h3> +<p>The C++ standard committee's Library Working Group discussed this issue in +detail, and over a long period of time. The discussion was repeated again in +early boost postings. A short summary:</p> +<ul> + <li>Naming conventions are contentious, and although several are widely used, + no one style predominates.<br> + </li> + <li>Given the intent to propose portions of boost for the next revision of the + C++ standard library, boost decided to follow the standard library's + conventions.<br> + </li> + <li>Once a library settles on a particular convention, a vast majority of + stakeholders want that style to be consistently used.<br> + </li> + <li>There is a strong preference for clear and descriptive names, even if + lengthy.</li> +</ul> +<hr> +<h3>Source <a name="code fonts">code fonts</a> rationale</h3> +<p>Dave Abrahams comments: An important purpose (I daresay the primary purpose) +of source code is communication: the documentation of intent. This is a doubly +important goal for boost, I think. Using a fixed-width font allows us to +communicate with more people, in more ways (diagrams are possible) right there +in the source. Code written for fixed-width fonts using spaces will read +reasonably well when viewed with a variable-width font, and as far as I can tell +every editor supporting variable-width fonts also supports fixed width. I don't +think the converse is true.</p> +<hr> +<h3><a name="Rationale">Rationale</a> rationale</h3> +<p>Rationale is defined as "The fundamental reasons for something; +basis." by the American Heritage Dictionary.</p> +<p>Beman Dawes comments: Failure to supply contemporaneous rationale for +design decisions is a major defect in many software projects. Lack of accurate +rationale causes issues to revisited endlessly, causes maintenance bugs when a +maintainer changes something without realizing it was done a certain way for +some purpose, and shortens the useful lifetime of software.</p> +<p>Rationale is fairly easy to provide at the time decisions are made, but very +hard to accurately recover even a short time later.</p> +<hr> +<h3><a name="Acknowledgements">Acknowledgements</a> rationale</h3> +<p>As a library matures, it almost always accumulates improvements suggested to +the authors by other boost members. It is a part of the culture of +boost.org to acknowledge such contributions, identifying the person making the +suggestion. Major contributions are usually acknowledged in the +documentation, while minor fixes are often mentioned in comments within the code +itself.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->24 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21054" --></p> + +</body> + +</html> diff --git a/more/submission_process.htm b/more/submission_process.htm new file mode 100644 index 0000000000..63d722b23d --- /dev/null +++ b/more/submission_process.htm @@ -0,0 +1,169 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Library Submission Process</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost Library Submission Process</h1> +<p>This page describes the process of getting a library accepted by Boost. +The process is still evolving, so if you have suggestions for improvement by all +means post them on the mailing list.</p> +<p>See the <a href="lib_guide.htm">Boost Library Requirements and Guidelines</a> +page for issues of content.</p> +<h3><b>Steps for getting a library accepted by Boost:</b></h3> +<ul> + <li><a href="#Learn">Learn about Boost</a>.</li> + <li><a href="#interest">Determine interest</a>.</li> + <li><a href="#Preliminary">Preliminary submission</a>.</li> + <li><a href="#Refinement">Refinement</a>.</li> + <li><a href="#Review">Formal Review</a>.</li> + <li><a href="#site posting">Web site posting</a>.</li> + <li><a href="#Lifecycle">Lifecycle</a>.</li> +</ul> +<h2><a name="Learn">Learn</a> about Boost</h2> +<p>Subscribe to the <a href="../index.htm#Mailing List">mailing list</a> for a +while, or look through the <a href="http://www.egroups.com/messages/boost">archives</a>. +Click around the <a href="../index.htm">web site</a>. Understand the <a href="lib_guide.htm">Requirements</a>. +Read the rest of this page to learn about the process. Otherwise, you will +just end up wasting everyone's time.</p> +<p>There is a culture associated with Boost, aimed at encouraging high quality +libraries by a process of discussion and refinement.</p> +<p>If what you really want is a site that will just post your library without +even looking at it, you should go elsewhere.</p> +<h2>Determine <a name="interest">interest</a></h2> +<p>Potential library submitters should use the <a href="../index.htm#Mailing List">mailing +list</a> as a forum to gauge interest a possible submission.</p> +<p>A message might be as simple as "Is there any interest in a library +which solves Traveling Salesperson problems in linear time?"</p> +<p>A bit of further description or snippet of code may be helpful. Messages +should be plain text; not rich text, HTML, etc.</p> +<p>Please don't post lengthy descriptions, documentation, or code to the mailing +list, and no attachments, even small ones. Please post lengthy material in +the eGroups boost <a href="http://www.egroups.com/files/boost/">Files section</a> +(formerly called the " vault"). </p> +<h2><a name="Preliminary">Preliminary</a> submission</h2> +<p>If response to an initial query indicates interest, then post preliminary +files in the <a href="http://www.egroups.com/files/boost/">Files section</a> of +the boost eGroups web site if you haven't already done so.</p> +<h2><a name="Refinement">Refinement</a></h2> +<p>Discuss, refine, resubmit. Repeat until satisfied.</p> +<p>The exact details of this process varies a lot. Sometimes it is public, +on the mailing list, sometimes a lot of discussion happens in private +emails. For some libraries the process is over quickly, for others it goes +on for months. It's often challenging, and sometimes leads off in +completely unexpected directions. </p> +<p>The <a href="http://www.egroups.com/messages/boost">archive</a> of past +messages is one way to see how this process worked for other boost +libraries. </p> +<h2>Formal <a name="Review">Review</a></h2> +<p><i>[The Formal Review procedure is new as of 9 May, 2000, and will be refined +as experience dictates.]</i></p> +<p>Once a library author feels a submission (which presumably is now in the +files/vault) has matured enough for formal review, the author sends a message +requesting a formal review to the mailing list. Please use a subject in +the form "Review Request: library" where <i>library</i> is replaced by +the library name.</p> +<p>Reviews are scheduled so that:</p> +<ul> + <li>Each library gets review time proportional to its size, complexity, and + importance.</li> + <li>Only a small number of libraries are under active review at any one time.</li> + <li>Members know ahead of time when a particular library will be under active + review. </li> +</ul> +<p>Before a library can be scheduled for review, an active boost member not +connected with the library submission must volunteer to be the "Review +Manager" for that library. The review manager decides on the schedule, +posts a notice when the review period starts, how long it lasts, and how boost +members can contribute their comments. The review manager collects comments, +chairs any discussions, and then when the review period is over, decides if +there is enough consensus to accept the library.</p> +<p>See <a href="formal_review_process.htm">Formal Review Process</a> for +details.</p> +<p>Members only can see <a href="http://www.egroups.com/files/boost/Members+Only/formal_review_schedule.htm">Formal +Review Schedule</a> for the current library review schedule. </p> +<p><i>[The plan is that the first several reviews will be managed by long-time +boost contributors who will be encouraged to experiment with the review +process. Presumably, successful processes will evolve over time and +can then be documented.]</i></p> +<h2>Boost <a name="site posting">site posting</a></h2> +<h3>Packaging</h3> +<p>All of the files which make up the library should be combined and compressed +into a single final submission file using the .zip format. Free encoders +and decoders for this format running on many different platforms are available +at the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> web site, which +includes a FAQ and much other useful information about the .zip format. Many +commercial compressor-archiver utilities also support this format.</p> +<h3><a name="Final">Final</a> Submission file</h3> +<p>The final submission file contains the material that will live on the +boost.org web site. The closer the submission file mirrors the directory +structure and format of the web site, the easier it is for the webmaster to +integrate it into the web site. +<p>The submission file for a library named <b>foo</b> should include these +subdirectories, with the contents indicated: +<blockquote> + <p><b>libs/foo</b> + <ul> + <li>An introductory page named index.html or index.htm which looks like the + initial page of other libraries. <a href="../libs/rational/index.html">Rational</a> + is a model for single part libraries, <a href="../libs/integer/index.htm">Integer</a> + or <a href="../libs/utility/index.htm">Utility</a> are models for + multi-part libraries.</li> + <li>The documentation page or pages, also in HTML format.</li> + <li>Source files implementing the library if it isn't entirely header + based. The boost file type convention for source files is <b>.cpp</b>.</li> + <li>Test programs and data files if supplied.</li> + <li>If the library has a large number of subsidiary files which aren't + linked to from the documentation pages, these subsidiary files can be + combined into a single .zip file.</li> + </ul> + <p><b>boost</b></p> + <ul> + <li>Public header files as described in the documentation for the + library. The boost file type convention for header files is <b>.hpp</b>.</li> + </ul> + <p><b>boost/detail</b></p> + <ul> + <li>Implementation header files not normally accessed by library users.</li> + </ul> +</blockquote> +<h3>Transmission</h3> +<p>Submit via email to <a href="mailto:webmaster@boost.org">webmaster@boost.org</a>. +Attach the .zip submission file. In the email message, please include your +email address, postal mail address, and telephone number, if boost.org doesn't +already have them. Your addresses and phone number will not appear on the web +site (unless you include them in your biography). Anonymous postings are +not accepted.</p> +<h3>People pages</h3> +<p>If the boost.org web site doesn't already have your capsule biography +and picture (optional, with not-too-serious pictures preferred), please +send them <a href="../index.htm#webmaster">mailto:webmaster@boost.org</a>. It is +up to you as to whether or not the biography includes your email address or +other contact information. The preferred picture format is .jpg, but other +common formats are acceptable. The preferred image size is 500x375 but the +webmaster has photo editing software and can do the image preparation if +necessary.</p> +<h2><a name="Lifecycle">Lifecycle</a></h2> +<p>Libraries are software; they loose their value over time if not +maintained. Details still hazy.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->19 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19847" --></p> + +</body> + +</html> diff --git a/more/use_other_libs.htm b/more/use_other_libs.htm new file mode 100644 index 0000000000..2aecadebb5 --- /dev/null +++ b/more/use_other_libs.htm @@ -0,0 +1,52 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Use other Boost or C</title> +</head> + +<body> + +<ul> + <li>Use other Boost or C++ Standard Library components only when the benefits + outweigh the costs.</li> +</ul> +<p>(Details)</p> +<p>The benefits of using components from other libraries include clearer, more +understandable, code, reduced development and maintenance costs, and the +assurance which comes from using well-known and trusted building blocks.</p> +<p>The costs incurred may include added compilation and runtime costs, and +undesirable coupling between components. If the interface to the +additional component is complex, using it may make code less readable, and thus +actually increase development and maintenance costs.</p> +<p><b>Example where another boost component should be used:</b> +boost::noncopyable (in boost/utility.hpp) has considerable benefits; it +simplifies code, improves readability, and signals intent. Costs are low +as coupling is limited; it uses no other classes and includes only the +generally lightweight headers <boost/config.hpp> and <cstddef>. +There are no runtime costs at all. With costs so low and benefits so high, other +boost libraries should use boost::noncopyable except in exceptional +circumstances.</p> +<p><b>Example where a standard library component might be used:</b> Providing +diagnostic output as a debugging aid can be a nice feature for a library. Yet +using Standard Library iostreams for the purpose involves a lot of additional +coupling, if iostreams is otherwise unused, and may be a complete waste if the +library is used in a GUI or embedded application. It might be better to +redesign the boost library so that the user supplies the output mechanism, +avoiding marginal use of iostreams.</p> +<p><b>Example where another boost component should not be used:</b> The +boost dir_it library has considerable coupling and runtime costs, not to mention +portability issues with unsupported operating systems. While completely +appropriate when directory iteration is required, it would not be reasonable for +another boost library to use dir_it just to check that a file is available +before opening, since Standard Library file open functionality does this at +lower cost. Don't use dir_it just for the sake of using a boost library.</p> +<p> </p> +<p> </p> + +</body> + +</html> diff --git a/people.htm b/people.htm new file mode 100644 index 0000000000..01fdb76d14 --- /dev/null +++ b/people.htm @@ -0,0 +1,103 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>People</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost People</h1> +<p>(Click on the names for biographies)<br> +(Click on the images for enlarged images)</p> +<table border="0" cellpadding="4" cellspacing="4"> + <tr> + <td><a href="people/dave_abrahams.htm">Dave Abrahams</a></td> + <td><a href="people/dave_abrahams.jpg"><img border="0" src="people/dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)" width="100" height="75"></a></td> + </tr> + <tr> + <td><a href="people/darin_adler.htm">Darin Adler</a></td> + <td><a href="people/darin_adler.jpg"><img border="0" src="people/darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/valentin_bonnard.htm">Valentin Bonnard</a></td> + <td><a href="people/valentin_bonnard.jpg"><img src="people/valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" width="100" height="142"></a></td> + </tr> + <tr> + <td><a href="people/ed_brey.htm">Ed Brey</a></td> + <td><a href="people/ed_brey.jpg"><img border="0" src="people/ed_brey_small.jpg" alt="ed_brey.jpg (13913 bytes)" width="100" height="118"></a></td> + </tr> + <tr> + <td><a href="people/gavin_collings.htm">Gavin Collings</a></td> + <td><a href="people/gavin_collings.jpg"><img border="0" src="people/gavin_collings_small.jpg" alt="gavin_collings.jpg (16739 bytes)" width="100" height="137"></a></td> + </tr> + <tr> + <td><a href="people/greg_colvin.htm">Greg Colvin</a></td> + <td><a href="people/greg_colvin.jpg"><img src="people/greg_colvin_small.jpg" alt="greg_colvin.jpg (52740 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="http://www.ocsltd.com/founderff.html">Sean Corfield</a></td> + <td><a href="people/sean_corfield.jpg"><img src="people/sean_corfield_small.jpg" alt="sean_corfield.jpg (51225 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/beman_dawes.html">Beman Dawes</a></td> + <td><a href="people/beman_dawes.jpg"><img src="people/beman_dawes_small.jpg" alt="beman_dawes.jpg (47863 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/aleksey_gurtovoy.htm">Aleksey Gurtovoy</a></td> + <td><a href="people/aleksey_gurtovoy.jpg"><img border="0" src="people/aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" width="100" height="120"></a></td> + </tr> + <tr> + <td><a href="people/kevlin_henney.htm">Kevlin Henney</a></td> + <td><a href="people/kevlin_henney.jpg"><img src="people/kevlin_henney_small.jpg" alt="kevlin_henney.jpg (27191 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/howard_hinnant.htm">Howard Hinnant</a></td> + <td><a href="people/howard_hinnant.jpg"><img border="0" src="people/howard_hinnant_small.jpg" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a></td> + </tr> + <tr> + <td><a href="http://www.josuttis.com">Nicolai Josuttis</a></td> + <td><a href="people/nicolai_josuttis.jpg"><img src="people/nicolai_josuttis_small.jpg" alt="nicolai_josuttis.jpg (40745 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/dietmar_kuehl.htm">Dietmar Kühl</a></td> + <td><a href="people/dietmar_kuehl.jpg"><img src="people/dietmar_kuehl_small.jpg" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="people/john_maddock.htm">John Maddock</a></td> + <td><a href="people/john_maddock.jpg"><img border="0" src="people/john_maddock_small.jpg" alt="john_maddock.jpg (14611 bytes)" width="100" height="132"></a></td> + </tr> + <tr> + <td><a href="people/jens_maurer.htm">Jens Maurer</a></td> + <td><a href="people/jens_maurer.jpg"><img border="0" src="people/jens_maurer_small.jpg" width="100" height="124"></a></td> + </tr> + <tr> + <td><a href="people/paul_moore.htm">Paul Moore</a></td> + <td><a href="people/paul_moore.jpg"><img border="0" src="people/paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" width="100" height="81"></a></td> + </tr> + <tr> + <td><a href="people/mark_rodgers.htm">Mark Rodgers</a></td> + <td><a href="people/mark_rodgers.jpg"><img border="0" src="people/mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" width="100" height="75"></a></td> + </tr> + <tr> + <td><a href="people/jeremy_siek.htm">Jeremy Siek</a></td> + <td><a href="people/jeremy_siek.jpg"><img border="0" src="people/jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" width="100" height="133"></a></td> + </tr> +</table> + +</body> + +</html> diff --git a/people/aleksey_gurtovoy.htm b/people/aleksey_gurtovoy.htm new file mode 100644 index 0000000000..fa31707cbb --- /dev/null +++ b/people/aleksey_gurtovoy.htm @@ -0,0 +1,50 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Aleksey Gurtovoy</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="aleksey_gurtovoy.jpg"><img border="0" src="aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" align="left" hspace="10" vspace="5" width="100" height="120"></a></p> +<p>Aleksey Gurtovoy is just a one Russian guy from Siberia, who now lives and +works in the United States. He is a technical lead in a small software company <a href="http://www.meta-comm.com">MetaCommunications</a>, +a job and people which have taught him so much.</p> +<p>He was born in early 1977, has been in love with computers since 1989, and +still has a lot of (exciting) ideas for his "spare time" in the next +few years. The first computer he worked with was DEC PDP-11, and he still has a +kind of nostalgia about this amazing machine. He graduated with honors from +Krasnoyarsk Technical State University in 1998 with a Master Degree in Computer +Science.</p> +<p>While being acknowledged as a talented programmer, Aleksey tries to be a +better engineer than he is now and hopes that reading good books will help him +with that task. He reads a lot... One of his favorite books about his profession +is 'The Mythical Man-Month' by Frederic P. Brooks, Jr.</p> +<p>He has been working with C++ since 1993, he loves the language and wants to +be involved in its progress. Sometimes you can come across his articles in the <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a> +and <a href="news:comp.std.c++">comp.std.c++</a><a> newsgroups. The other +numerous things Aleksey is interested in include patterns, object-oriented +methodology and programming languages, organization of software development +process and tools & technologies which make programmer's life easier (e.g. +compilers).</p> +<p>He is not married, but he has in mind one great girl he hopes to be with +someday.</p> +<p>You can contact him by sending mail to </a><a href="mailto:alexy@meta-comm.com">alexy@meta-comm.com</a><a>.</p> +</a> + +</body> + +</html> diff --git a/people/aleksey_gurtovoy.jpg b/people/aleksey_gurtovoy.jpg Binary files differnew file mode 100644 index 0000000000..fd49271502 --- /dev/null +++ b/people/aleksey_gurtovoy.jpg diff --git a/people/aleksey_gurtovoy_small.jpg b/people/aleksey_gurtovoy_small.jpg Binary files differnew file mode 100644 index 0000000000..65157fc9bf --- /dev/null +++ b/people/aleksey_gurtovoy_small.jpg diff --git a/people/beman_dawes.html b/people/beman_dawes.html new file mode 100644 index 0000000000..2a4113990e --- /dev/null +++ b/people/beman_dawes.html @@ -0,0 +1,36 @@ +<html> + +<head> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Beman Dawes</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="beman_dawes.jpg"><img src="beman_dawes_small.jpg" alt="beman_dawes.jpg (62536 bytes)" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a> +Beman Dawes is a software developer from Virginia in the United States.</p> +<p>He is the author of the StreetQuick® geographic atlas library used by +digital map publishers to help people get really, really, lost.</p> +<p>He wrote his first computer program 40 years ago, and does not mourn the +passing of <a href="http://www.mta.ca/~amiller/cs3711/ibm650/ibm650.htm">bi-quinary</a> +arithmetic.</p> +<p>Beman has been a voting member of the ANSI/ISO C++ Standards Committee since +1992, and chaired the Library Working Group for five years.</p> +<p>He enjoys travel, sailing, hiking, and biking. He is married, and he and his +wife have three cats.</p> +<p>Email: <a href="mailto:beman@esva.net">beman@esva.net</a></p> + +</body> + +</html> diff --git a/people/beman_dawes.jpg b/people/beman_dawes.jpg Binary files differnew file mode 100644 index 0000000000..0c871cf3ab --- /dev/null +++ b/people/beman_dawes.jpg diff --git a/people/beman_dawes_small.jpg b/people/beman_dawes_small.jpg Binary files differnew file mode 100644 index 0000000000..69db86240c --- /dev/null +++ b/people/beman_dawes_small.jpg diff --git a/people/darin_adler.htm b/people/darin_adler.htm new file mode 100644 index 0000000000..176b05fe51 --- /dev/null +++ b/people/darin_adler.htm @@ -0,0 +1,48 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Darin Adler</title> +</head> + +<body> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="darin_adler.jpg"><img border="0" src="darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" align="left" hspace="10" vspace="5" width="100" height="135"></a>Darin Adler has been programming computers since 1976. He loves to do it.</p> +<p>His first major professional experience was at <a href="http://apple.com">Apple +Computer</a>. In 1988 he led the team that rewrote the Macintosh Finder in C++. +Before that project was completed, he was shanghaied to be the technical lead +for the System 7 project (these days they would call it "Mac OS 7"). +The group he formed to help him do that, the Blue Meanies, is still a <a href="http://www.spies.com/~greg/bluemeanies.html">legend</a> +in the Apple community.</p> +<p>Since Apple, Darin has worked at <a href="http://www.generalmagic.com">General +Magic</a> as an architect of the <a href="http://www.google.com/search?q=Magic+Cap">Magic +Cap</a> OS, used the moniker <a href="http://bentspoon.com">Bent Spoon Software</a> +to do consulting, and helped start <a href="http://www.eazel.com">Eazel</a>, a +company that is working to make Linux easier to use. Since 1997, he has worked +from his home in Los Angeles, CA, collaborating with clients and coworkers in +other locations.</p> +<p>He prefers to use and program Macintosh computers with C++. But Eazel's +mission to make Linux easier to use is best accomplished with a non-Macintosh +PC. (That is why Darin is sitting in front of <a href="darin_adler.jpg">two computers</a>.) +The other people working on the <a href="http://www.gnome.org">GNOME</a> project +don't like C++, so he's writing a lot of C code these days.</p> +<p>The <a href="darin_adler.jpg">larger version</a> of his picture shows him hard at +work with his C++ guru, his daughter Sophia.</p> +<p>He has hobbies and stuff but you don't want to read about that here.</p> +<p>You can contact him by sending mail to <a href="mailto:darin@bentspoon.com">darin@bentspoon.com</a>.</p> + +</body> + +</html> diff --git a/people/darin_adler.jpg b/people/darin_adler.jpg Binary files differnew file mode 100644 index 0000000000..8a17394ddb --- /dev/null +++ b/people/darin_adler.jpg diff --git a/people/darin_adler_small.jpg b/people/darin_adler_small.jpg Binary files differnew file mode 100644 index 0000000000..2b7771d95f --- /dev/null +++ b/people/darin_adler_small.jpg diff --git a/people/dave_abrahams.htm b/people/dave_abrahams.htm new file mode 100644 index 0000000000..48881bbe3d --- /dev/null +++ b/people/dave_abrahams.htm @@ -0,0 +1,29 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Dave Abrahams</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="dave_abrahams.jpg"><img src="dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)" +border="0" align="left" hspace="10" vspace="5" width="100" height="75"></a> +Dave Abrahams often shows up at C++ standards committee meetings on a bicycle.</p> +<p>Beyond that, we will just have to wait until he sends in a biography.</p> + +</body> + +</html> diff --git a/people/dave_abrahams.jpg b/people/dave_abrahams.jpg Binary files differnew file mode 100644 index 0000000000..ff45c4c306 --- /dev/null +++ b/people/dave_abrahams.jpg diff --git a/people/dave_abrahams_small.jpg b/people/dave_abrahams_small.jpg Binary files differnew file mode 100644 index 0000000000..ebc7077400 --- /dev/null +++ b/people/dave_abrahams_small.jpg diff --git a/people/dietmar_kuehl.htm b/people/dietmar_kuehl.htm new file mode 100644 index 0000000000..281155eb20 --- /dev/null +++ b/people/dietmar_kuehl.htm @@ -0,0 +1,42 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Dietmar Kuehl </title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="dietmar_kuehl.jpg"><img src="dietmar_kuehl_small.jpg" hspace="10" vspace="5" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" align="left" WIDTH="100" HEIGHT="133"></a>Dietmar Kuehl (the +"ue" is actually a "u-umlaut", ie. one of those funny German +characters which has two dots above it) was fork(2)ed in early 1968.</p> + +<p>He visited school more or less successfully from 1973 to 1987. In 1987 he started to +study at the Technical University of Berlin. He finished his studies in 1997 with a Diplom +(roughly the German equivalent of a masters) in Mathematics. His thesis was "Design +Pattern for the Implementation of Graph Algorithms"; strike the "Design +Pattern" and put in "Generic" somehow to get an idea of the main topic. The +thesis is available from <a href="ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz">ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz</a>.</p> + +<p>Since 1997 he has worked as consultant for a small company called Claas Solutions (the +"aa" is no typo), mainly working for major German banks. Since late 1995 Dietmar +Kuehl has been one of the moderators of the newsgroup <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a>. He is active on the C++ +Standards committee.</p> + +<p>Email: <a href="mailto:dietmar.kuehl@claas-solutions.de">dietmar.kuehl@claas-solutions.de</a></p> + +<p>Home page: <a href="http://www.claas-solutions.de/kuehl/">http://www.claas-solutions.de/kuehl/</a></p> +</body> +</html> diff --git a/people/dietmar_kuehl.jpg b/people/dietmar_kuehl.jpg Binary files differnew file mode 100644 index 0000000000..c97f54e4fe --- /dev/null +++ b/people/dietmar_kuehl.jpg diff --git a/people/dietmar_kuehl_small.jpg b/people/dietmar_kuehl_small.jpg Binary files differnew file mode 100644 index 0000000000..ac63acaf51 --- /dev/null +++ b/people/dietmar_kuehl_small.jpg diff --git a/people/ed_brey.htm b/people/ed_brey.htm new file mode 100644 index 0000000000..9ac29f3dd5 --- /dev/null +++ b/people/ed_brey.htm @@ -0,0 +1,60 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Ed Brey</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="ed_brey.jpg"><img src="ed_brey_small.jpg" alt="ed_brey.jpg" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a> +Ed Brey lives in Menomonee Falls, Wisconsin, a village outside of +Milwaukee. In the summertime, he likes to play tennis with his fiancée, and +in the winter, if there is enough snow, he likes to go tobogganing or +ice-skating. If it is not nice enough outside for either of those, he plays +on the piano. Although Ed enjoys doing those activities, most of his time is +currently spent at work and at home studying. He works at <A +HREF="http://www.eaton.com">Eaton Corporation</A> in Milwaukee and is working +on his masters degree in computer engineering through <A +HREF="http://www.ntu.edu">NTU</A>. + +<P>Ed started working for Eaton as part of <A +HREF="http://www.mu.edu">Marquette University</A>'s engineering co-op program. +Upon graduation in 1995 from Marquette with a BS in electrical and computer +engineering, he was hired on full-time at Eaton. At Eaton, Ed has been +primarily focused on embedded system design and programming in the industrial +controls industry. Recently, however, he has delved into writing a +near-real-time database engine running under Windows. + +<P>Ed has held programming as a pastime since his grade school days, when he +wrote a babysitting invoicing program. Soon after, he wrote a game inspired +by the TV game show "Press Your Luck". Ever since, programming languages and +concepts, along with finding ways to improve the art and science of coding +software, have always peeked his interest. + +<P>Lastly, Ed has managed to retain his perspective. As fun as computers and +programming are, Ed's true love in his life is his fiancée Beth.</P> + +<HR> + +<P>Email: <A HREF="mailto:brey@ductape.net">brey@ductape.net</A> + +<P>Home page: <A +HREF=http://www.cc.edu/~eschmied/>http://ww.cc.edu/~eschmied/</A> + +</body> + +</html> diff --git a/people/ed_brey.jpg b/people/ed_brey.jpg Binary files differnew file mode 100644 index 0000000000..3a37894726 --- /dev/null +++ b/people/ed_brey.jpg diff --git a/people/ed_brey_small.jpg b/people/ed_brey_small.jpg Binary files differnew file mode 100644 index 0000000000..bf7849a914 --- /dev/null +++ b/people/ed_brey_small.jpg diff --git a/people/gavin_collings.htm b/people/gavin_collings.htm new file mode 100644 index 0000000000..bb6dbc4fde --- /dev/null +++ b/people/gavin_collings.htm @@ -0,0 +1,31 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Gavin Collings</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><img border="0" src="gavin_collings_small.jpg" alt="gavin_collings.jpg (16786 bytes)" align="left" hspace="10" vspace="5" width="100" height="137">Gavin Collings was born and bred in Wiltshire in the UK. After spending the +1960s in childish pursuits, he spent the 1970s at school becoming ever more fascinated with the mysteries of physics. This he went on to study at St +John's College, Cambridge until 1985, at which time he entered the world of employment.</p> +<p>After early work with other languages, he became involved with C++ in the early 1990s and now works as consultant, not far from his original home, in +Gloucestershire.</p> +<p>He enjoys playing the piano, walking in the local countryside, playing 5-a-side (indoor soccer), and sailing.</p> + +</body> + +</html> diff --git a/people/gavin_collings.jpg b/people/gavin_collings.jpg Binary files differnew file mode 100644 index 0000000000..b3ef794763 --- /dev/null +++ b/people/gavin_collings.jpg diff --git a/people/gavin_collings_small.jpg b/people/gavin_collings_small.jpg Binary files differnew file mode 100644 index 0000000000..f9abc3b792 --- /dev/null +++ b/people/gavin_collings_small.jpg diff --git a/people/greg_colvin.htm b/people/greg_colvin.htm new file mode 100644 index 0000000000..9d4701e74c --- /dev/null +++ b/people/greg_colvin.htm @@ -0,0 +1,28 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Greg Colvin</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="greg_colvin.jpg"><img src="greg_colvin_small.jpg" alt="greg_colvin.jpg (52k bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a> Dr. +Greg Colvin has been hacking happily since 1972. He is a member of the ANSI/ISO C++ +standards committee and a Principal Member of Technical Staff with the Java Products Group +at Oracle Corporation. In his spare time he plays apocalyptic electric blues guitar in his +Colorado, USA home studio.</p> +</body> +</html> diff --git a/people/greg_colvin.jpg b/people/greg_colvin.jpg Binary files differnew file mode 100644 index 0000000000..8bde68f374 --- /dev/null +++ b/people/greg_colvin.jpg diff --git a/people/greg_colvin_small.jpg b/people/greg_colvin_small.jpg Binary files differnew file mode 100644 index 0000000000..3c82cbc5bb --- /dev/null +++ b/people/greg_colvin_small.jpg diff --git a/people/howard_hinnant.htm b/people/howard_hinnant.htm new file mode 100644 index 0000000000..d953eb8e1c --- /dev/null +++ b/people/howard_hinnant.htm @@ -0,0 +1,34 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Howard Hinnant</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="howard_hinnant.jpg"><img border="0" src="howard_hinnant_small.jpg" align="left" hspace="10" vspace="5" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a>When +Howard Hinnant is not monkeying around, he is the principal author of the +Metrowerks CodeWarrior C++ library. He is also a member of the C++ Standards +committee.</p> +<p>Howard is married with four children, two dogs, one cat, a rabbit, an +undetermined number of rodents (which the cat ignores), and ... well, we're +really not sure what else. When not sitting in front of his computer, Howard +enjoys snow skiing and ... more, snow skiing.</p> + +</body> + +</html> diff --git a/people/howard_hinnant.jpg b/people/howard_hinnant.jpg Binary files differnew file mode 100644 index 0000000000..a63a446b47 --- /dev/null +++ b/people/howard_hinnant.jpg diff --git a/people/howard_hinnant_small.jpg b/people/howard_hinnant_small.jpg Binary files differnew file mode 100644 index 0000000000..373892bb51 --- /dev/null +++ b/people/howard_hinnant_small.jpg diff --git a/people/jens_maurer.htm b/people/jens_maurer.htm new file mode 100644 index 0000000000..ba3805da08 --- /dev/null +++ b/people/jens_maurer.htm @@ -0,0 +1,39 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Jens Maurer</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="jens_maurer.jpg"><img border="0" src="jens_maurer_small.jpg" alt="jens_maurer.jpg (15698 bytes)" hspace="10" vspace="5" align="left" width="100" height="124"></a> +Jens Maurer is a software developer from Germany who lives close to +Frankfurt/Main. He was born in 1973 and hasn't died yet.</p> +<p>He has worked for a multimedia company programming home-banking applications, +CGI scripts and Java applications. He also helped program some simulation +systems for long-term decision support to aid businessmen in arguing about +company investments.</p> +<p>He is neither married nor does he have a girl friend, but asked his +colleagues to find one for him.</p> +<p>In his spare time, he likes visiting foreign countries but dislikes getting +there in uncomfortable airplane seats. On random week-ends, he enjoys +participating in historic dance courses (without a costume, of course). +Sometimes, he needs fresh air and goes for a walk. </p> +<p>Email: <a href="mailto:Jens.Maurer@gmx.net">Jens.Maurer@gmx.net</a></p> + +</body> + +</html> diff --git a/people/jens_maurer.jpg b/people/jens_maurer.jpg Binary files differnew file mode 100644 index 0000000000..2dc21b42f5 --- /dev/null +++ b/people/jens_maurer.jpg diff --git a/people/jens_maurer_small.jpg b/people/jens_maurer_small.jpg Binary files differnew file mode 100644 index 0000000000..6cdc572db8 --- /dev/null +++ b/people/jens_maurer_small.jpg diff --git a/people/jeremy_siek.htm b/people/jeremy_siek.htm new file mode 100644 index 0000000000..4f1d81eeab --- /dev/null +++ b/people/jeremy_siek.htm @@ -0,0 +1,36 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Jeremy Siek</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="jeremy_siek.jpg"><img border="0" src="jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" align="left" hspace="10" vspace="5" width="100" height="133"></a>Jeremy Siek is a student at Univ. of Notre Dame, though currently +he's on "sabatical", working with the SGI C++ compiler and library team.<br> +<br> +He is the author of the Matrix Template Library (MTL), and helped design the new Generic Graph Component Library (GGCL).<br> +<br> +Once in a while Jeremy "comes up for air" and enjoys fencing, hiking, skiing, and reading. He's also been spotted at a few fightin' irish +tailgaters (BYOB).<br> +<br> +Jeremy has an intense fear for the ancient dark forests where dusty decks thrive and devour programmers, places where the light of abstraction +has not yet reached.</p> + +</body> + +</html> diff --git a/people/jeremy_siek.jpg b/people/jeremy_siek.jpg Binary files differnew file mode 100644 index 0000000000..2b8115ce20 --- /dev/null +++ b/people/jeremy_siek.jpg diff --git a/people/jeremy_siek_small.jpg b/people/jeremy_siek_small.jpg Binary files differnew file mode 100644 index 0000000000..514e1bdb26 --- /dev/null +++ b/people/jeremy_siek_small.jpg diff --git a/people/john_maddock.htm b/people/john_maddock.htm new file mode 100644 index 0000000000..95c7cdb5d7 --- /dev/null +++ b/people/john_maddock.htm @@ -0,0 +1,41 @@ +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> +<title>John Maddock</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" cellpadding="2" bgcolor="#007F7F"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" + alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font color="#FFFFFF" size="4" + face="Arial">Home </font></a></td> + <td><a href="../libraries.htm"><font color="#FFFFFF" + size="4" face="Arial">Libraries </font></a></td> + <td><a href="../people.htm"><font color="#FFFFFF" + size="4" face="Arial">People </font></a></td> + <td><a href="../more/faq.htm"><font color="#FFFFFF" + size="4" face="Arial">FAQ </font></a></td> + <td><a href="../more/index.htm"><font color="#FFFFFF" + size="4" face="Arial">More </font></a></td> + </tr> +</table> + +<p><a href="john_maddock.jpg"><img src="john_maddock_small.jpg" +alt="john_maddock.jpg (14611bytes)" align="left" border="0" +hspace="10" vspace="5" width="100" height="133"></a> John Maddock +is a software developer from England and holds a PhD in Chemistry, +but found that computers smell less and explode less often!</p> + +<p>John is the author of the <a +href="http://ourworld.compuserve.com/homepages/John_Maddock/regexpp.htm">regex++ +regular expression package</a>, has an almost pathological +interest in anything that "can't be done", and can be +contacted at <a href="mailto:John_Maddock@compuserve.com">John_Maddock@compuserve.com</a>.</p> +</body> +</html> diff --git a/people/john_maddock.jpg b/people/john_maddock.jpg Binary files differnew file mode 100644 index 0000000000..9aaa0c90ce --- /dev/null +++ b/people/john_maddock.jpg diff --git a/people/john_maddock_small.jpg b/people/john_maddock_small.jpg Binary files differnew file mode 100644 index 0000000000..52368a68a8 --- /dev/null +++ b/people/john_maddock_small.jpg diff --git a/people/kevlin_henney.htm b/people/kevlin_henney.htm new file mode 100644 index 0000000000..51ac135692 --- /dev/null +++ b/people/kevlin_henney.htm @@ -0,0 +1,49 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Kevlin Henney</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="kevlin_henney.jpg"><img border="0" src="kevlin_henney_small.jpg" alt="kevlin_henney.jpg (18107 bytes)" align="left" hspace="10" vspace="5" width="100" height="142"></a> +Kevlin Henney (<a href="mailto:kevlin@curbralan.com">mailto:kevlin@curbralan.com</a>, <a href="http://www.curbralan.com">http://www.curbralan.com</a>) +is an independent consultant and trainer based in the UK. He has developed and +delivered training course material and consultancy on many aspects of OO +development, which he has practiced across a number of domains for over a +decade. His professional interests include patterns, OO and component based +design, architecture, distributed object systems, C++, and Java. He is also a +member of the BSI C++ standards committee. +</p> + +<p>Now that writing code is no longer the core responsibility of his job, his +non-professional interests seem to include the hacking associated with the +aforementioned professional interests. However, never being one to keep +something to himself (like C++'s relationship with C, this is regarded as both a +strength and a weakness), he shares/inflicts (delete as necessary) his +professional and non-professional development experiences with/on (ditto) others +through writing articles and presenting tutorials, workshops and papers at +conferences.</p> +<p>He is married, and not just to his work. He and Carolyn have neither children +nor pets, but he feels that the missing aggravation is made up for by a house +that needs a great deal of work, requiring constant attention and feeding of +money. The little spare time that remains to him is taken up with music, +reading, pub appreciation, etc. Finally, although he enjoys writing, Kevlin is +not really one for writing in the third person.</p> +</body> + +</html> diff --git a/people/kevlin_henney.jpg b/people/kevlin_henney.jpg Binary files differnew file mode 100644 index 0000000000..1bdc12256f --- /dev/null +++ b/people/kevlin_henney.jpg diff --git a/people/kevlin_henney_small.jpg b/people/kevlin_henney_small.jpg Binary files differnew file mode 100644 index 0000000000..348e6a0ac3 --- /dev/null +++ b/people/kevlin_henney_small.jpg diff --git a/people/mark_rodgers.htm b/people/mark_rodgers.htm new file mode 100644 index 0000000000..079a1dc761 --- /dev/null +++ b/people/mark_rodgers.htm @@ -0,0 +1,36 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Mark Rodgers</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="mark_rodgers.jpg"><img border="0" src="mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" align="left" hspace="10" vspace="5" width="100" height="75"></a>Mark +Rodgers lives in <a href="http://www.wcc.govt.nz/wellington/">Wellington</a>, +the capital of <a href="http://www.govt.nz/aboutnz/profile.php3">New Zealand</a>, +with his wife, Clare, and their son, Ronnie.</p> +<p>He studied Computer Science at <a href="http://www.vuw.ac.nz">Victoria +University of Wellington</a> from 1983 to 1986, completing a <nobr>B.Sc. (Hons).</nobr> +He now works as consultant through his company, Cadenza New Zealand Ltd, and +also markets Cadenza Drawing Board™, a CAD system he developed.</p> +<p>Mark has been programming in C++ since about 1990, and loves every minute of +it, but is continually amazed at how much more he still has to learn.</p> +<p>You can contact Mark at <a href="mailto:mark.rodgers@cadenza.co.nz">mark.rodgers@cadenza.co.nz</a>. + +</body> + +</html> diff --git a/people/mark_rodgers.jpg b/people/mark_rodgers.jpg Binary files differnew file mode 100644 index 0000000000..0542e323a4 --- /dev/null +++ b/people/mark_rodgers.jpg diff --git a/people/mark_rodgers_small.jpg b/people/mark_rodgers_small.jpg Binary files differnew file mode 100644 index 0000000000..a4a34c768b --- /dev/null +++ b/people/mark_rodgers_small.jpg diff --git a/people/nicolai_josuttis.jpg b/people/nicolai_josuttis.jpg Binary files differnew file mode 100644 index 0000000000..9cedc21cd2 --- /dev/null +++ b/people/nicolai_josuttis.jpg diff --git a/people/nicolai_josuttis_small.jpg b/people/nicolai_josuttis_small.jpg Binary files differnew file mode 100644 index 0000000000..28b828b692 --- /dev/null +++ b/people/nicolai_josuttis_small.jpg diff --git a/people/paul_moore.htm b/people/paul_moore.htm new file mode 100644 index 0000000000..ef7dd4859a --- /dev/null +++ b/people/paul_moore.htm @@ -0,0 +1,38 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Paul Moore</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="paul_moore.jpg"><img border="0" src="paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" align="left" hspace="10" vspace="5" width="100" height="81"></a>Paul +Moore lives in Cheshire, England. He is married, with one son. His "day +job" is as an Oracle DBA, but he writes C and C++ programs in his spare +time.</p> +<p>Paul started programming on Acorn's BBC Micro and RISC PC series of +computers, but finally went mainstream and bought a PC, on which he now runs +Windows and Linux. Paul's main interest is in porting and developing open-source +software, and so his main programming language is C (at least until the open +source community switches to C++).</p> +<p>Paul's main claim to C++ fame is that he owns all 3 editions of Bjarne +Stroustrup's "The C++ Programming language", plus the ARM and the C++ +standard, but he didn't own a C++ compiler until after the 3rd edition of +Stroustrup's book came out. Make of that what you will...</p> + +</body> + +</html> diff --git a/people/paul_moore.jpg b/people/paul_moore.jpg Binary files differnew file mode 100644 index 0000000000..25510b0a6b --- /dev/null +++ b/people/paul_moore.jpg diff --git a/people/paul_moore_small.jpg b/people/paul_moore_small.jpg Binary files differnew file mode 100644 index 0000000000..b792c3ce7c --- /dev/null +++ b/people/paul_moore_small.jpg diff --git a/people/sean_corfield.jpg b/people/sean_corfield.jpg Binary files differnew file mode 100644 index 0000000000..bd4f7b171e --- /dev/null +++ b/people/sean_corfield.jpg diff --git a/people/sean_corfield_small.jpg b/people/sean_corfield_small.jpg Binary files differnew file mode 100644 index 0000000000..732fd26f58 --- /dev/null +++ b/people/sean_corfield_small.jpg diff --git a/people/valentin_bonnard.htm b/people/valentin_bonnard.htm new file mode 100644 index 0000000000..5c47561e2f --- /dev/null +++ b/people/valentin_bonnard.htm @@ -0,0 +1,27 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Valentin Bonnard</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + </tr> +</table> + +<p><a href="valentin_bonnard.jpg"><img src="valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a>Valentin Bonnard is currently studying the semantics of +programming languages and logical proofs. In his spare time, he writes C++ programs, and +participates in newsgroup discussions about C++. He is also a member of AFNOR, the French +C++ standardisation committee. </p> +</body> +</html> diff --git a/people/valentin_bonnard.jpg b/people/valentin_bonnard.jpg Binary files differnew file mode 100644 index 0000000000..fb3d7afde1 --- /dev/null +++ b/people/valentin_bonnard.jpg diff --git a/people/valentin_bonnard_small.jpg b/people/valentin_bonnard_small.jpg Binary files differnew file mode 100644 index 0000000000..6bc8cdb71c --- /dev/null +++ b/people/valentin_bonnard_small.jpg |