Переглянути джерело

Added guidelines for libs with separate source, plus appropriate links to it.

[SVN r20899]
John Maddock 22 роки тому
батько
коміт
6cc46b90b6
3 змінених файлів з 1098 додано та 630 видалено
  1. 112 139
      more/index.htm
  2. 539 491
      more/lib_guide.htm
  3. 447 0
      more/separate_compilation.html

+ 112 - 139
more/index.htm

@@ -1,140 +1,113 @@
 <html>
-
-<head>
-<meta http-equiv="Content-Type"
-content="text/html; charset=iso-8859-1">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<title>Boost More Information</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="../libs/libraries.htm"><font color="#FFFFFF"
-        size="4" face="Arial">Libraries</font></a></td>
-        <td><a href="../people/people.htm"><font color="#FFFFFF"
-        size="4" face="Arial">People</font></a></td>
-        <td><a href="faq.htm"><font color="#FFFFFF" size="4"
-        face="Arial">FAQ</font></a></td>
-        <td><a href="index.htm"><font color="#FFFFFF" size="4"
-        face="Arial">More</font></a></td>
-    </tr>
-</table>
-
-<h1>More Information</h1>
-
-<h2>Boost Policies</h2>
-
-<blockquote>
-    <p><a href="discussion_policy.htm"><b>Mailing List Discussion
-    Policy.</b></a>&nbsp; What's acceptable and what isn't.</p>
-    <p><a href="lib_guide.htm"><b>Library Requirements and
-    Guidelines</b></a>.&nbsp; Basic standards for those preparing
-    a submission.</p>
-	<p><a href="writingdoc/index.html"><strong>Writing
-	Documentation for Boost</strong></a> Basic guidelines
-	for writing documentation and templates for quickly generating
-	documentation that follows the guidelines.</p>
-    <p><a href="test_policy.htm"><b>Test Policy and Protocols</b></a>.&nbsp;
-    How testing works at Boost.</p>
-    <p><a href="submission_process.htm"><b>Library Submission
-    Process</b></a>.&nbsp; How to submit a library to Boost.</p>
-    <p><a href="formal_review_process.htm"><b>Library Formal
-    Review Process</b></a>. Including how to submit a review
-    comment.</p>
-    <p><a href="header.htm"><b>Header Policy</b></a>.&nbsp;
-    Headers are where a library contacts its users, so
-    programming practices are particularly important.</p>
-    <p><a href="imp_vars.htm"><b>Implementation Variations</b></a>.&nbsp;
-    Sometimes one size fits all, sometimes it doesn't.&nbsp; This
-    page deals with the trade-offs.</p>
-    <p><a href="library_reuse.htm"><b>Library Reuse</b></a>.&nbsp;
-    Should Boost libraries use other boost libraries?&nbsp; What
-    about the C++ Standard Library?&nbsp; It's another trade-off.</p>
-    <p><b><a href="moderators.html">Moderators</a></b>.&nbsp; Who they are and 
-    what they do.</p>
-</blockquote>
-
-<h2>Boost Whatever</h2>
-
-<blockquote>
-    <p><b><a href="license_info.html">License Information</a> </b>&nbsp;Information 
-    about the Boost Software License.</p>
-    <p><b><a href="bibliograpy.html">Bibliography</a> </b>&nbsp;Print and online 
-    publications relating to Boost and Boost libraries.</p>
-    <p><a href="../status/compiler_status.html"><b>Compiler
-    Status</b></a>&nbsp;&nbsp;Describes what library works with
-    which compiler.</p>
-    <p><b><a href="links.htm">Links</a></b>&nbsp; Links of special interest to 
-    Boost users.</p>
-    <p><b><a href="formal_review_schedule.html">Formal Review Schedule</a></b>&nbsp;
-    Future, current, and recently past Formal Reviews.</p>
-    <p><b><a href="release_procedures.htm">Release Procedures</a></b>&nbsp; How 
-    developers and the release manager prepare for a Boost release.</p>
-    <p><a href="regression.html"><b>Internal Regression Test
-    Suite</b></a>&nbsp;&nbsp; Describes the tool for generating
-    the compiler status tables </p>
-    <p><b><a href="proposal.pdf">Proposal for a C++ Library Repository Web Site</a></b>&nbsp;
-    The original 1998 proposal that launched Boost.</p>
-    <p><b><a href="bugs.htm">How to report bugs</a></b>&nbsp; Ways to report 
-    Boost bugs.</p>
-    <p><b><a href="requesting_new_features.htm">How to request features</a></b> 
-    Ways to request new library features.</p>
-    <p><b><a href="cpp_committee_meetings.html">C++ Committee Meetings</a></b> 
-    FAQ for Boost Members wishing to attend a standards committee meeting.</p>
-</blockquote>
-
-<h2>Articles and Papers</h2>
-
-<blockquote>
-    <p><a href="error_handling.html"><b>Error and Exception
-    Handling</b></a> describes approaches to errors and
-    exceptions by <a href="../people/dave_abrahams.htm">David
-    Abrahams</a>. </p>
-    <p><a href="count_bdy.htm"><b>Counted Body Techniques</b></a>
-    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.&nbsp; Originally
-    published in <a
-    href="http://www.accu.org/c++sig/public/Overload.html">Overload</a>
-    magazine.</p>
-    <p><a href="generic_programming.html"><b>Generic Programming
-    Techniques</b></a> by <a href="../people/dave_abrahams.htm">David
-    Abrahams</a> and <a href="../people/jeremy_siek.htm">Jeremy
-    Siek</a> describe some of the techniques used in Boost
-    libraries.</p>
-    <p><a href="feature_model_diagrams.htm"><b>Feature Model
-    Diagrams in text and HTML</b></a> describes how to represent
-    feature model diagrams in text form.</p>
-    <p><a href="borland_cpp.html"><b>Portability Hints: Borland C++
-    5.5.1</b></a> describes Borland C++ portability issues, with
-    suggested workarounds.</p>
-    <p><a href="microsoft_vcpp.html"><b>Portability Hints:
-    Microsoft VC++ 6.0 SP4</b></a> describes Microsoft C++
-    portability issues, with suggested workarounds.</p>
-    <p><a href="int_const_guidelines.htm"><strong>Coding
-    Guidelines for Integral Constant Expressions</strong></a>
-    describes how to work through the maze of compiler related
-    bugs surrounding this tricky topic.</p>
-</blockquote>
-
-<hr>
-
-<p> Revised 
-<!--webbot bot="Timestamp" s-type="EDITED"
-s-format="%d %B, %Y" startspan -->02 October, 2003<!--webbot bot="Timestamp" endspan i-checksum="38549" --></p>
-
-<p> © Copyright Beman Dawes 2003.</p>
-<p> Use, modification, and distribution are subject to the Boost Software 
-License, Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
-</body>
-</html>
+   <head>
+      <title>Boost More Information</title>
+      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+      <meta name="ProgId" content="FrontPage.Editor.Document">
+      <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+   </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="../libs/libraries.htm"><font color="#ffffff" size="4" face="Arial">Libraries</font></a></td>
+            <td><a href="../people/people.htm"><font color="#ffffff" size="4" face="Arial">People</font></a></td>
+            <td><a href="faq.htm"><font color="#ffffff" size="4" face="Arial">FAQ</font></a></td>
+            <td><a href="index.htm"><font color="#ffffff" size="4" face="Arial">More</font></a></td>
+         </tr>
+      </table>
+      <h1>More Information</h1>
+      <h2>Boost Policies</h2>
+      <blockquote>
+         <p><a href="discussion_policy.htm"><b>Mailing List Discussion Policy.</b></a>&nbsp; 
+            What's acceptable and what isn't.</p>
+         <p><a href="lib_guide.htm"><b>Library Requirements and Guidelines</b></a>.&nbsp; 
+            Basic standards for those preparing a submission.</p>
+         <P><A href="separate_compilation.html"><STRONG>Guidelines for Libraries with Separate 
+                  Source</STRONG></A>.&nbsp; Basic tutorial for libraries that require the 
+            building of a separate link library.</P>
+         <p><a href="writingdoc/index.html"><strong>Writing Documentation for Boost</strong></a>
+            Basic guidelines for writing documentation and templates for quickly generating 
+            documentation that follows the guidelines.</p>
+         <p><a href="test_policy.htm"><b>Test Policy and Protocols</b></a>.&nbsp; How 
+            testing works at Boost.</p>
+         <p><a href="submission_process.htm"><b>Library Submission Process</b></a>.&nbsp; 
+            How to submit a library to Boost.</p>
+         <p><a href="formal_review_process.htm"><b>Library Formal Review Process</b></a>. 
+            Including how to submit a review comment.</p>
+         <p><a href="header.htm"><b>Header Policy</b></a>.&nbsp; Headers are where a 
+            library contacts its users, so programming practices are particularly 
+            important.</p>
+         <p><a href="imp_vars.htm"><b>Implementation Variations</b></a>.&nbsp; Sometimes 
+            one size fits all, sometimes it doesn't.&nbsp; This page deals with the 
+            trade-offs.</p>
+         <p><a href="library_reuse.htm"><b>Library Reuse</b></a>.&nbsp; Should Boost 
+            libraries use other boost libraries?&nbsp; What about the C++ Standard 
+            Library?&nbsp; It's another trade-off.</p>
+         <p><b><a href="moderators.html">Moderators</a></b>.&nbsp; Who they are and what 
+            they do.</p>
+      </blockquote>
+      <h2>Boost Whatever</h2>
+      <blockquote>
+         <p><b><a href="license_info.html">License Information</a> </b>&nbsp;Information 
+            about the Boost Software License.</p>
+         <p><b><a href="bibliograpy.html">Bibliography</a> </b>&nbsp;Print and online 
+            publications relating to Boost and Boost libraries.</p>
+         <p><a href="../status/compiler_status.html"><b>Compiler Status</b></a>&nbsp;&nbsp;Describes 
+            what library works with which compiler.</p>
+         <p><b><a href="links.htm">Links</a></b>&nbsp; Links of special interest to Boost 
+            users.</p>
+         <p><b><a href="formal_review_schedule.html">Formal Review Schedule</a></b>&nbsp; 
+            Future, current, and recently past Formal Reviews.</p>
+         <p><b><a href="release_procedures.htm">Release Procedures</a></b>&nbsp; How 
+            developers and the release manager prepare for a Boost release.</p>
+         <p><a href="regression.html"><b>Internal Regression Test Suite</b></a>&nbsp;&nbsp; 
+            Describes the tool for generating the compiler status tables
+         </p>
+         <p><b><a href="proposal.pdf">Proposal for a C++ Library Repository Web Site</a></b>&nbsp; 
+            The original 1998 proposal that launched Boost.</p>
+         <p><b><a href="bugs.htm">How to report bugs</a></b>&nbsp; Ways to report Boost 
+            bugs.</p>
+         <p><b><a href="requesting_new_features.htm">How to request features</a></b> Ways 
+            to request new library features.</p>
+         <p><b><a href="cpp_committee_meetings.html">C++ Committee Meetings</a></b> FAQ for 
+            Boost Members wishing to attend a standards committee meeting.</p>
+      </blockquote>
+      <h2>Articles and Papers</h2>
+      <blockquote>
+         <p><a href="error_handling.html"><b>Error and Exception Handling</b></a> describes 
+            approaches to errors and exceptions by <a href="../people/dave_abrahams.htm">David 
+               Abrahams</a>.
+         </p>
+         <p><a href="count_bdy.htm"><b>Counted Body Techniques</b></a> 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.&nbsp; Originally published in <a href="http://www.accu.org/c++sig/public/Overload.html">
+               Overload</a> magazine.</p>
+         <p><a href="generic_programming.html"><b>Generic Programming Techniques</b></a> by <a href="../people/dave_abrahams.htm">
+               David Abrahams</a> and <a href="../people/jeremy_siek.htm">Jeremy Siek</a> describe 
+            some of the techniques used in Boost libraries.</p>
+         <p><a href="feature_model_diagrams.htm"><b>Feature Model Diagrams in text and HTML</b></a>
+            describes how to represent feature model diagrams in text form.</p>
+         <p><a href="borland_cpp.html"><b>Portability Hints: Borland C++ 5.5.1</b></a> describes 
+            Borland C++ portability issues, with suggested workarounds.</p>
+         <p><a href="microsoft_vcpp.html"><b>Portability Hints: Microsoft VC++ 6.0 SP4</b></a>
+            describes Microsoft C++ portability issues, with suggested workarounds.</p>
+         <p><a href="int_const_guidelines.htm"><strong>Coding Guidelines for Integral Constant 
+                  Expressions</strong></a> describes how to work through the maze of 
+            compiler related bugs surrounding this tricky topic.</p>
+      </blockquote>
+      <hr>
+      <p>
+         Revised 
+         <!--webbot bot="Timestamp" s-type="EDITED"
+s-format="%d %B, %Y" startspan --> 
+         02 October, 2003<!--webbot bot="Timestamp" endspan i-checksum="38549" --></p>
+      <p>
+         © Copyright Beman Dawes 2003.</p>
+      <p>
+         Use, modification, and distribution are subject to the Boost Software License, 
+         Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+         or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
+   </body>
+</html>

+ 539 - 491
more/lib_guide.htm

@@ -1,498 +1,546 @@
 <html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Boost Library Requirements and Guidelines</title>
-<meta name="GENERATOR" content="Microsoft FrontPage 5.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="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
-    <td><a href="../people/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"><a href="#Introduction">Introduction</a><br>
-<a href="#Requirements">Requirements</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#License">License requirements</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Portability">Portability requirements</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Ownership">Ownership</a><br>
-<a href="#Guidelines">Guidelines</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Design_and_Programming">Design and programming</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Directory_structure">Directory structure and 
-filenames</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Naming­_consistency">Naming consistency</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Documentation">Documentation</a><br>
-<a href="#Rationale">Rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Exception-specification">Exception-specification 
-rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Naming">Naming conventions rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#code_fonts">Source code fonts rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Tabs">Tabs rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#JavaScript">ECMAScript/JavaScript rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Rationale_rationale">Rationale rationale</a><br>
-&nbsp;&nbsp;&nbsp; <a href="#Acknowledgements">Acknowledgements rationale</a></p>
-<h2 align="left"><a name="Introduction">Introduction</a></h2>
-<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"><a name="Requirements">Requirements</a></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.
-  </li>
-  <li>The
-    copyright <a href="#Ownership">ownership</a> must be clear.
-  </li>
-  <li>The library must be generally useful and not restricted to a narrow
-    problem domain.
-  </li>
-  <li>The library must meet the <a href="#Portability">portability requirements</a>
-    below.&nbsp;
-  </li>
-  <li>The library must come reasonably close to meeting the <a href="#Guidelines">Guidelines</a>
-    below.
-    <ul>
-    <li><a href="#Design_and_Programming">Design and Programming</a></li>
-    <li><a href="#Directory_structure">Directory Structure</a></li>
-    <li><a href="#Documentation">Documentation</a></li>
-    </ul>
-  </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
-&quot;I just started to read this mailing list ...&quot; seem to fail, often
-embarrassingly.</p>
-<h3 align="left"><a name="License">License</a> requirements</h3>
-<p>The preferred way to meet the license requirements is to use the
-<a href="../LICENSE_1_0.txt">Boost Software License</a>. See <a href="license_info.html">
-license information</a>. If for any reason you do not intend to use the Boost 
-Software License, please discuss the issues on the Boost
-<a href="mailing_lists.htm#main">developers mailing list</a> first.</p>
-<p>The license requirements:</p>
-<ul>
-  <li>Must be simple to read and understand. 
-  </li>
-  <li>Must grant permission without fee to copy, use and modify the software for 
-  any use (commercial and non-commercial).  
-  </li>
-  <li>Must require that the license appear on all copies of the software source 
-  code. 
-  </li>
-  <li>Must not require that the license appear with executables or other binary 
-  uses of the library. 
-  </li>
-  <li>Must not require that the source code be available for execution or other 
-  binary uses of the library. 
-  </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.
-  </li>
-  <li>
-    <p align="left">A library's implementation must if possible be portable and
-    not restricted to a particular compiler or operating system.&nbsp; If a
-    portable implementation is not possible, non-portable constructions are
-    acceptable if reasonably easy to port to other environments, and
-    implementations are provided for at least two popular operating systems
-    (such as UNIX and Windows).
-  </li>
-  <li>
-    <p align="left">There is no requirement that a library run on C++ compilers
-    which do not conform to the ISO standard.&nbsp;
-  </li>
-  <li>
-    <p align="left">There is no requirement that a library run on any particular
-    C++ compiler.&nbsp; Boost contributors often try to ensure their libraries
-    work with popular compilers.&nbsp; The boost/config.hpp <a href="../libs/config/config.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.&nbsp; 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?&nbsp;&nbsp; &quot;How to Copyright Software&quot; 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.&nbsp; 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 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.&nbsp; Not every guideline applies to every
-library, but a reasonable effort to comply is expected.</p>
-<h3><a name="Design_and_Programming">Design and Programming</a></h3>
-<ul>
-  <li>Aim first for clarity and correctness; optimization should be only a
-    secondary concern in most Boost libraries.</li>
-</ul>
-<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>. See <a href="#Naming­_consistency">Naming consistency</a>.</li>
-</ul>
-<ul>
-  <li>Follow quality programming practices. See, for example, &quot;Effective
-    C++&quot; 2nd Edition, and &quot;More Effective C++&quot;, both by Scott
-    Meyers, published by Addison Wesley.</li>
-</ul>
-<ul>
-  <li>Use the C++ Standard Library or other Boost libraries, but only when the
-    benefits outweigh the costs.&nbsp; Do not use libraries other than the C++
-    Standard Library or Boost. See <a href="library_reuse.htm">Library reuse</a>.</li>
-</ul>
-<ul>
-  <li>Read <a href="imp_vars.htm">Implementation Variation</a> to see how to
-    supply performance, platform, or other implementation variations.</li>
-</ul>
-<ul>
-  <li>Use the naming conventions of the C++ Standard Library (See
-  <a href="#Naming">Naming conventions rationale</a>): <br>
-&nbsp;<ul>
-  <li>Names (except as noted below) should be all lowercase, with words 
-  separated by underscores.</li>
-  <li>Acronyms should be treated as ordinary names (e.g. <code>xml_parser</code> instead of <code>XML_parser</code>).</li>
-  <li>Template parameter names begin with an uppercase letter.</li>
-  <li>Macro (gasp!) names all uppercase and begin with BOOST_.</li>
-</ul>
-  </li>
-</ul>
-<ul>
-  <li>Choose meaningful names - explicit is better than implicit, and readability counts.
-    There is a strong preference for clear and descriptive names, even if
-    lengthy.</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 or confidence tests so potential users can see how
-    to use your library.</li>
-</ul>
-<ul>
-  <li>Provide a regression test program or programs which follow the <a href="test_policy.htm">Test
-    Policies and Protocols</a>.</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.&nbsp; See <a href="#code_fonts">fonts rationale</a>.</li>
-      <li>Use spaces rather than tabs. See <a href="#Tabs">tabs rationale</a>.</li>
-      <li>Limit line lengths to 80 characters.</li>
-    </ul>
-  </li>
-</ul>
-<ul>
-  <li>End all documentation files (HTML or otherwise) with a copyright message 
-  and a licensing message. See the <a href="#Copyright">end of this file</a> for 
-  an example of the preferred form.</li>
-</ul>
-<ul>
-  <li>Begin all source files (including programs, headers, scripts, etc.) with:
-  <br>
-&nbsp;<ul>
-      <li>A comment line describing the contents of the file.<br>
-&nbsp;</li>
-      <li>Comments describing copyright and licensing. The preferred form is:<br>
-      <br>
-        <code>//&nbsp; Copyright Jane Programmer 2002. Use, modification, and 
-      distribution are<br>
-      //&nbsp; subject to the Boost Software License, Version 1.0. (See 
-      accompanying<br>
-      //&nbsp; file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)<br>
-      </code>
-        <br>
-      Please leave an empty line before and after the copyright and license 
-      comments. It is fine if the copyright and license messages are on 
-      different lines, but there should be no other intervening text. Do not 
-      include &quot;All rights reserved&quot; in the copyright message.<br>
-      <br>
-      See <a href="license_info.html">license information page</a> for 
-      more information about the Boost Software License.<br>
-      <br>
-      Note that developers should not include a copy of
-        <code>LICENSE_1_0.txt</code>
-        in their libraries; Boost distributions already include a copy in the 
-      Boost root directory.<br>
-&nbsp;</li>
-      <li>A comment line referencing your library on the Boost web site. For 
-      example:<br>
-      <br>
-        <code>//&nbsp; See http://www.boost.org/libs/foo for library home page.</code><br>
-        <br>
-      where <code>foo</code> is the directory name (see below) for your library. 
-      As well as aiding users who come across a Boost file detached from its 
-      documentation, some of Boost's automatic tools depend on this comment to 
-      identify which library header files belong to.</li>
-    </ul>
-  </li>
-</ul>
-<h3><a name="Directory_structure">Directory Structure</a> and Filenames</h3>
-<ul>
-  <li>File and directory names must contain only lowercase ASCII letters ,
-    numbers, underscores, and a period.&nbsp; Leading character must be
-    alphabetic. Maximum length 31. Only a single period is permitted.&nbsp;
-    These requirements ensure file and directory names are relatively portable.</li>
-  <li>All libraries have at their highest level a primary directory named for
-    the particular library. See <a href="#Naming­_consistency">Naming consistency</a>. The primary directory may have sub-directories.</li>
-  <li>For very simple libraries implemented entirely within the library header,
-    all files go in the primary directory (except headers, which go in the boost
-    header directory).</li>
-</ul>
-<blockquote>
-  <p><b>Boost standard sub-directory names</b></p>
-  <table border="1" cellpadding="5">
-    <tr>
-      <td><b>Sub-directory</b></td>
-      <td><b>Contents</b></td>
-      <td><b>Required</b></td>
-    </tr>
-    <tr>
-      <td><code>build</code></td>
-      <td>Library build files such as a Jamfile.</td>
-      <td>If any build files.</td>
-    </tr>
-    <tr>
-      <td>doc</td>
-      <td>Documentation (HTML) files.</td>
-      <td>If several doc files.</td>
-    </tr>
-    <tr>
-      <td><code>example</code></td>
-      <td>Sample program files.</td>
-      <td>If several sample files.</td>
-    </tr>
-    <tr>
-      <td><code>src</code></td>
-      <td>Source files which must be compiled to build the library.&nbsp;</td>
-      <td>If any source files.</td>
-    </tr>
-    <tr>
-      <td><code>test</code></td>
-      <td>Regression or other test programs or scripts.</td>
-      <td>If several test files.</td>
-    </tr>
-  </table>
-</blockquote>
-<h4><a name="Redirection">Redirection</a></h4>
-<p>The primary directory should always contain a file named index.html (or 
-index.htm). Authors have requested this so that they can publish URL's in the 
-form <i>http://www.boost.org/libs/lib-name</i> with the assurance a 
-documentation reorganization won't invalidate the URL. Boost's internal tools 
-are also simplified by knowing that a library's documentation is always 
-reachable via the simplified URL.</p>
-<p>If the documentation is in a doc sub-directory, the primary directory index.html file 
-should just do an automatic redirection to the doc subdirectory:</p>
-<blockquote>
-  <pre>&lt;html&gt;
+   <head>
+      <title>Boost Library Requirements and Guidelines</title>
+      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+      <meta name="GENERATOR" content="Microsoft FrontPage 5.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="../libs/libraries.htm"><font face="Arial" color="#ffffff"><big>Libraries</big></font></a></td>
+            <td><a href="../people/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"><a href="#Introduction">Introduction</a><br>
+         <a href="#Requirements">Requirements</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#License">License requirements</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Portability">Portability requirements</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Ownership">Ownership</a><br>
+         <a href="#Guidelines">Guidelines</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Design_and_Programming">Design and programming</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Directory_structure">Directory structure and 
+            filenames</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Naming&shy;_consistency">Naming consistency</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Documentation">Documentation</a><br>
+         <a href="#Rationale">Rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Exception-specification">Exception-specification 
+            rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Naming">Naming conventions rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#code_fonts">Source code fonts rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Tabs">Tabs rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#JavaScript">ECMAScript/JavaScript rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Rationale_rationale">Rationale rationale</a><br>
+         &nbsp;&nbsp;&nbsp; <a href="#Acknowledgements">Acknowledgements rationale</a></p>
+      <h2 align="left"><a name="Introduction">Introduction</a></h2>
+      <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"><a name="Requirements">Requirements</a></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.
+         <li>
+            The copyright <a href="#Ownership">ownership</a>
+         must be clear.
+         <li>
+         The library must be generally useful and not restricted to a narrow problem 
+         domain.
+         <li>
+            The library must meet the <a href="#Portability">portability requirements</a>
+         below.&nbsp;
+         <li>
+            The library must come reasonably close to meeting the <a href="#Guidelines">Guidelines</a>
+            below.
+            <ul>
+               <li>
+                  <a href="#Design_and_Programming">Design and Programming</a>
+               <li>
+                  <a href="#Directory_structure">Directory Structure</a>
+               <li>
+                  <a href="#Documentation">Documentation</a></li>
+            </ul>
+         <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>
+      <p>The preferred way to meet the license requirements is to use the <a href="../LICENSE_1_0.txt">
+            Boost Software License</a>. See <a href="license_info.html">license information</a>. 
+         If for any reason you do not intend to use the Boost Software License, please 
+         discuss the issues on the Boost <a href="mailing_lists.htm#main">developers 
+            mailing list</a> first.</p>
+      <p>The license requirements:</p>
+      <ul>
+         <li>
+         Must be simple to read and understand.
+         <li>
+         Must grant permission without fee to copy, use and modify the software for any 
+         use (commercial and non-commercial).
+         <li>
+         Must require that the license appear on all copies of the software source code.
+         <li>
+         Must not require that the license appear with executables or other binary uses 
+         of the library.
+         <li>
+         Must not require that the source code be available for execution or other 
+         binary uses of the library.
+         <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.</p>
+         <li>
+            <p align="left">A library's implementation must if possible be portable and not 
+               restricted to a particular compiler or operating system.&nbsp; If a portable 
+               implementation is not possible, non-portable constructions are acceptable if 
+               reasonably easy to port to other environments, and implementations are provided 
+               for at least two popular operating systems (such as UNIX and Windows).</p>
+         <li>
+            <p align="left">There is no requirement that a library run on C++ compilers which 
+               do not conform to the ISO standard.&nbsp;</p>
+         <li>
+            <p align="left">There is no requirement that a library run on any particular C++ 
+               compiler.&nbsp; Boost contributors often try to ensure their libraries work 
+               with popular compilers.&nbsp; The boost/config.hpp <a href="../libs/config/config.htm">
+                  configuration header</a> is the preferred mechanism for working around 
+               compiler deficiencies.</p>
+         </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.&nbsp; 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?&nbsp;&nbsp; "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.&nbsp; 
+            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 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.&nbsp; Not every guideline applies to every 
+         library, but a reasonable effort to comply is expected.</p>
+      <h3><a name="Design_and_Programming">Design and Programming</a></h3>
+      <ul>
+         <li>
+            Aim first for clarity and correctness; optimization should be only a secondary 
+            concern in most Boost libraries.</li>
+      </ul>
+      <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>. 
+            See <a href="#Naming&shy;_consistency">Naming consistency</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 C++ Standard Library or other Boost libraries, but only when the 
+            benefits outweigh the costs.&nbsp; Do not use libraries other than the C++ 
+            Standard Library or Boost. See <a href="library_reuse.htm">Library reuse</a>.</li>
+      </ul>
+      <ul>
+         <li>
+            Read <a href="imp_vars.htm">Implementation Variation</a> to see how to supply 
+            performance, platform, or other implementation variations.</li>
+      </ul>
+      <ul>
+         <li>
+            Read the <A href="separate_compilation.html">guidelines for libraries with 
+               separate source</A>
+         to see how to ensure that compiled link libraries meet user expectations.
+         </li>
+      </ul>
+      <ul>
+         <LI>
+            Use the naming conventions of the C++ Standard Library (See <a href="#Naming">Naming 
+               conventions rationale</a>):
+            <br>
+            &nbsp;<ul>
+               <li>
+               Names (except as noted below) should be all lowercase, with words separated by 
+               underscores.
+               <li>
+                  Acronyms should be treated as ordinary names (e.g. <code>xml_parser</code> instead 
+                  of <code>XML_parser</code>).
+               <li>
+               Template parameter names begin with an uppercase letter.
+               <li>
+                  Macro (gasp!) names all uppercase and begin with BOOST_.</li>
+            </ul>
+         </LI>
+      </ul>
+      <ul>
+         <li>
+            Choose meaningful names - explicit is better than implicit, and readability 
+            counts. There is a strong preference for clear and descriptive names, even if 
+            lengthy.</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 or confidence tests so potential users can see how to 
+            use your library.</li>
+      </ul>
+      <ul>
+         <li>
+            Provide a regression test program or programs which follow the <a href="test_policy.htm">
+               Test Policies and Protocols</a>.</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.&nbsp; See <a href="#code_fonts">fonts rationale</a>.
+               <li>
+                  Use spaces rather than tabs. See <a href="#Tabs">tabs rationale</a>.
+               <li>
+                  Limit line lengths to 80 characters.</li>
+            </ul>
+         </li>
+      </ul>
+      <ul>
+         <li>
+            End all documentation files (HTML or otherwise) with a copyright message and a 
+            licensing message. See the <a href="#Copyright">end of this file</a> for an 
+            example of the preferred form.</li>
+      </ul>
+      <ul>
+         <li>
+            Begin all source files (including programs, headers, scripts, etc.) with:
+            <br>
+            &nbsp;<ul>
+               <li>
+                  A comment line describing the contents of the file.<br>
+               &nbsp;
+               <li>
+                  Comments describing copyright and licensing. The preferred form is:<br>
+                  <br>
+                  <code>//&nbsp; Copyright Jane Programmer 2002. Use, modification, and distribution 
+                     are<br>
+                     //&nbsp; subject to the Boost Software License, Version 1.0. (See accompanying<br>
+                     //&nbsp; file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)<br>
+                  </code>
+                  <br>
+                  Please leave an empty line before and after the copyright and license comments. 
+                  It is fine if the copyright and license messages are on different lines, but 
+                  there should be no other intervening text. Do not include "All rights reserved" 
+                  in the copyright message.<br>
+                  <br>
+                  See <a href="license_info.html">license information page</a> for more 
+                  information about the Boost Software License.<br>
+                  <br>
+                  Note that developers should not include a copy of <code>LICENSE_1_0.txt</code> in 
+                  their libraries; Boost distributions already include a copy in the Boost root 
+                  directory.<br>
+               &nbsp;
+               <li>
+                  A comment line referencing your library on the Boost web site. For example:<br>
+                  <br>
+                  <code>//&nbsp; See http://www.boost.org/libs/foo for library home page.</code><br>
+                  <br>
+                  where <code>foo</code> is the directory name (see below) for your library. As 
+                  well as aiding users who come across a Boost file detached from its 
+                  documentation, some of Boost's automatic tools depend on this comment to 
+                  identify which library header files belong to.</li>
+            </ul>
+         </li>
+      </ul>
+      <h3><a name="Directory_structure">Directory Structure</a> and Filenames</h3>
+      <ul>
+         <li>
+         File and directory names must contain only lowercase ASCII letters , numbers, 
+         underscores, and a period.&nbsp; Leading character must be alphabetic. Maximum 
+         length 31. Only a single period is permitted.&nbsp; These requirements ensure 
+         file and directory names are relatively portable.
+         <li>
+            All libraries have at their highest level a primary directory named for the 
+            particular library. See <a href="#Naming&shy;_consistency">Naming consistency</a>. 
+         The primary directory may have sub-directories.
+         <li>
+            For very simple libraries implemented entirely within the library header, all 
+            files go in the primary directory (except headers, which go in the boost header 
+            directory).</li>
+      </ul>
+      <blockquote>
+         <p><b>Boost standard sub-directory names</b></p>
+         <table border="1" cellpadding="5">
+            <tr>
+               <td><b>Sub-directory</b></td>
+               <td><b>Contents</b></td>
+               <td><b>Required</b></td>
+            </tr>
+            <tr>
+               <td><code>build</code></td>
+               <td>Library build files such as a Jamfile.</td>
+               <td>If any build files.</td>
+            </tr>
+            <tr>
+               <td>doc</td>
+               <td>Documentation (HTML) files.</td>
+               <td>If several doc files.</td>
+            </tr>
+            <tr>
+               <td><code>example</code></td>
+               <td>Sample program files.</td>
+               <td>If several sample files.</td>
+            </tr>
+            <tr>
+               <td><code>src</code></td>
+               <td>Source files which must be compiled to build the library.&nbsp;</td>
+               <td>If any source files.</td>
+            </tr>
+            <tr>
+               <td><code>test</code></td>
+               <td>Regression or other test programs or scripts.</td>
+               <td>If several test files.</td>
+            </tr>
+         </table>
+      </blockquote>
+      <h4><a name="Redirection">Redirection</a></h4>
+      <p>The primary directory should always contain a file named index.html (or 
+         index.htm). Authors have requested this so that they can publish URL's in the 
+         form <i>http://www.boost.org/libs/lib-name</i> with the assurance a 
+         documentation reorganization won't invalidate the URL. Boost's internal tools 
+         are also simplified by knowing that a library's documentation is always 
+         reachable via the simplified URL.</p>
+      <p>If the documentation is in a doc sub-directory, the primary directory 
+         index.html file should just do an automatic redirection to the doc 
+         subdirectory:</p>
+      <blockquote>
+         <pre>&lt;html&gt;
 &lt;head&gt;
-&lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; URL=doc/index.html&quot;&gt;
+&lt;meta http-equiv="refresh" content="0; URL=doc/index.html"&gt;
 &lt;/head&gt;
 &lt;body&gt;
 Automatic redirection failed, please go to
-&lt;a href=&quot;doc/index.html&quot;&gt;doc/index.html&lt;/a&gt;
+&lt;a href="doc/index.html"&gt;doc/index.html&lt;/a&gt;
 &lt;/body&gt;
 &lt;/html&gt;</pre>
-</blockquote>
-<h3><a name="Naming­_consistency">Naming consistency</a></h3>
-<p>As library developers and users have gained experience with Boost, the 
-following consistent naming approach has come to be viewed as very helpful, 
-particularly for larger libraries which need their own header subdirectories and 
-namespaces.</p>
-<p>Here is how it works. The library is given a name which describes the 
-contents of the library.&nbsp; Cryptic abbreviations are not acceptable. 
-Following the practice of the C++ Standard Library, names are usually singular 
-rather than plural.&nbsp; For example, a library dealing with file systems might 
-chose the name &quot;filesystem&quot;, but not &quot;filesystems&quot;, &quot;fs&quot; or &quot;nicecode&quot;.</p>
-<ul>
-  <li>The library's primary directory (in parent <i>boost-root/libs</i>) is 
-  given that same name.&nbsp; For example, <i>boost-root/libs/filesystem</i>.<br>
-&nbsp;</li>
-  <li>The library's primary header directory (in parent <i>boost-root/boost</i>) 
-  is given that same name. For example, <i>boost-root/boost/filesystem</i>.<br>
-&nbsp;</li>
-  <li>The library's primary namespace (in parent <i>::boost</i>) is given that 
-  same name. For example, <i>::boost::filesystem</i>.</li>
-</ul>
-<h3><a name="Documentation">Documentation</a></h3>
-<p>Even the simplest library needs some documentation; the amount should be
-proportional to the need.&nbsp; 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. Style sheets are acceptable. ECMAScript/JavaScript 
-is not acceptable. The documentation entry point should 
-always be a file named index.html or index.htm; see <a href="#Redirection">
-Redirection</a>.</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 &quot;average&quot;
-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.&nbsp; See <a href="#Rationale">Rationale 
-    rationale</a>.</li>
-  <li>Acknowledgements.&nbsp; See <a href="#Acknowledgements">Acknowledgments 
-    rationale.</a></li>
-</ul>
-<p>If you need more help with how to write documentation you can check out the 
-  article on <a href="writingdoc/index.html">Writing Documentation for Boost</a>.</p>
-<h2><a name="Rationale">Rationale</a></h2>
-<p>Rationale for some of the requirements and guidelines follows.</p>
-<hr>
-<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.&nbsp; But consider the following member from a smart pointer:</p>
-<pre>    T&amp; 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.&nbsp; 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 &quot;dumb&quot; compiler, however, may make
-all kinds of pessimizations.</p>
-<p>For example, some compilers turn off inlining if there is an
-exception-specification.&nbsp; 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 &quot;throws nothing&quot;
-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.
-  </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.
-  </li>
-  <li>Once a library settles on a particular convention, a vast majority of
-    stakeholders want that style to be consistently used.
-  </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="Tabs">Tabs</a> rationale</h3>
-<p>Tabs are banned because of the practical problems caused by tabs in 
-multi-developer projects like Boost, rather than any dislike in principle. See
-<a href="mailing_lists.htm#archive">mailing list archives</a>. Problems include 
-maintenance of a single source file by programmers using tabs and programmers 
-using spaces, and the difficulty of enforcing a consistent tab policy other than 
-just &quot;no tabs&quot;. Discussions concluded that Boost files should either all use 
-tabs, or all use spaces, and thus the decision to stick with spaces.</p>
-<hr>
-<h3>ECMAScript/<a name="JavaScript">JavaScript</a> rationale</h3>
-<p>Before the 1.29.0 release, two Boost libraries added ECMAScript/JavaScript 
-documentation. Controversy followed (see <a href="mailing_lists.htm#archive">
-mailing list archives</a>), and the developers were asked to remove the 
-ECMAScript/JavaScript. Reasons given for banning included:</p>
-<ul>
-  <li>Incompatible with some older browsers and some text based browsers.</li>
-  <li>Makes printing docs pages difficult.</li>
-  <li>Often results in really bad user interface design.</li>
-  <li>&quot;It's just annoying in general.&quot;</li>
-  <li>Would require Boost to test web pages for ECMAScript/JavaScript 
-  compliance.</li>
-  <li>Makes docs maintenance by other than the original developer more 
-  difficult.</li>
-</ul>
-<hr>
-<h3><a name="Rationale_rationale">Rationale rationale</a></h3>
-<p>Rationale is defined as &quot;The fundamental reasons for something;
-basis&quot; by the American Heritage Dictionary.</p>
-<p>Beman Dawes comments:&nbsp; Failure to supply contemporaneous rationale for
-design decisions is a major defect in many software projects. Lack of accurate
-rationale causes issues to be 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.&nbsp; It is a part of the culture of
-boost.org to acknowledge such contributions, identifying the person making the
-suggestion.&nbsp; 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 -->04 November, 2003<!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
-
-<p> © <a name="Copyright">Copyright</a> Beman Dawes 2003.</p>
-<p> Use, modification, and distribution are subject to the Boost Software 
-License, Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a>)</p>
-
-</body>
-
-</html>
+      </blockquote>
+      <h3><a name="Naming&shy;_consistency">Naming consistency</a></h3>
+      <p>As library developers and users have gained experience with Boost, the 
+         following consistent naming approach has come to be viewed as very helpful, 
+         particularly for larger libraries which need their own header subdirectories 
+         and namespaces.</p>
+      <p>Here is how it works. The library is given a name which describes the contents 
+         of the library.&nbsp; Cryptic abbreviations are not acceptable. Following the 
+         practice of the C++ Standard Library, names are usually singular rather than 
+         plural.&nbsp; For example, a library dealing with file systems might chose the 
+         name "filesystem", but not "filesystems", "fs" or "nicecode".</p>
+      <ul>
+         <li>
+            The library's primary directory (in parent <i>boost-root/libs</i>) is given 
+            that same name.&nbsp; For example, <i>boost-root/libs/filesystem</i>.<br>
+         &nbsp;
+         <li>
+            The library's primary header directory (in parent <i>boost-root/boost</i>) is 
+            given that same name. For example, <i>boost-root/boost/filesystem</i>.<br>
+         &nbsp;
+         <li>
+            The library's primary namespace (in parent <i>::boost</i>) is given that same 
+            name. For example, <i>::boost::filesystem</i>.</li>
+      </ul>
+      <h3><a name="Documentation">Documentation</a></h3>
+      <p>Even the simplest library needs some documentation; the amount should be 
+         proportional to the need.&nbsp; 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. Style sheets are acceptable. 
+         ECMAScript/JavaScript is not acceptable. The documentation entry point should 
+         always be a file named index.html or index.htm; see <a href="#Redirection">Redirection</a>.</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>
+            Description of each class.
+            <li>
+            Relationship between classes.
+            <li>
+            For each function, as applicable, description, requirements (preconditions), 
+            effects, post-conditions, returns, and throws.
+            <li>
+            Discussion of error detection and recovery strategy.
+            <li>
+            How to use including description of typical uses.
+            <li>
+            How to compile and link.
+            <li>
+            How to test.
+            <li>
+            Version or revision history.
+            <li>
+               Rationale for design decisions.&nbsp; See <a href="#Rationale">Rationale rationale</a>.
+            <li>
+               Acknowledgements.&nbsp; See <a href="#Acknowledgements">Acknowledgments rationale.</a></li>
+         </ul>
+      <p>If you need more help with how to write documentation you can check out the 
+         article on <a href="writingdoc/index.html">Writing Documentation for Boost</a>.</p>
+      <h2><a name="Rationale">Rationale</a></h2>
+      <p>Rationale for some of the requirements and guidelines follows.</p>
+      <hr>
+      <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.&nbsp; But consider the following member from a smart pointer:</p>
+      <pre>    T&amp; 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.&nbsp; 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.&nbsp; 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.
+         <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.
+         <li>
+            Once a library settles on a particular convention, a vast majority of 
+            stakeholders want that style to be consistently used.
+         </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="Tabs">Tabs</a> rationale</h3>
+      <p>Tabs are banned because of the practical problems caused by tabs in 
+         multi-developer projects like Boost, rather than any dislike in principle. See <a href="mailing_lists.htm#archive">
+            mailing list archives</a>. Problems include maintenance of a single source 
+         file by programmers using tabs and programmers using spaces, and the difficulty 
+         of enforcing a consistent tab policy other than just "no tabs". Discussions 
+         concluded that Boost files should either all use tabs, or all use spaces, and 
+         thus the decision to stick with spaces.</p>
+      <hr>
+      <h3>ECMAScript/<a name="JavaScript">JavaScript</a> rationale</h3>
+      <p>Before the 1.29.0 release, two Boost libraries added ECMAScript/JavaScript 
+         documentation. Controversy followed (see <a href="mailing_lists.htm#archive">mailing 
+            list archives</a>), and the developers were asked to remove the 
+         ECMAScript/JavaScript. Reasons given for banning included:</p>
+      <ul>
+         <li>
+         Incompatible with some older browsers and some text based browsers.
+         <li>
+         Makes printing docs pages difficult.
+         <li>
+         Often results in really bad user interface design.
+         <li>
+         "It's just annoying in general."
+         <li>
+         Would require Boost to test web pages for ECMAScript/JavaScript compliance.
+         <li>
+            Makes docs maintenance by other than the original developer more difficult.</li>
+      </ul>
+      <hr>
+      <h3><a name="Rationale_rationale">Rationale rationale</a></h3>
+      <p>Rationale is defined as "The fundamental reasons for something; basis" by the 
+         American Heritage Dictionary.</p>
+      <p>Beman Dawes comments:&nbsp; Failure to supply contemporaneous rationale for 
+         design decisions is a major defect in many software projects. Lack of accurate 
+         rationale causes issues to be 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.&nbsp; It is a part of the culture of 
+         boost.org to acknowledge such contributions, identifying the person making the 
+         suggestion.&nbsp; 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 --> 
+         04 November, 2003<!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
+      <p>
+         © <a name="Copyright">Copyright</a> Beman Dawes 2003.</p>
+      <p>
+         Use, modification, and distribution are subject to the Boost Software License, 
+         Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+         or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
+   </body>
+</html>

+ 447 - 0
more/separate_compilation.html

@@ -0,0 +1,447 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+   <head>
+      <title>Guidelines for Authors of Boost Libraries Containing Separate Source</title>
+      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+      <LINK href="../boost.css" type="text/css" rel="stylesheet"></head>
+   <body>
+      <P>
+         <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="0">
+            <TR>
+               <td vAlign="top" width="300">
+                  <h3><A href="../index.htm"><IMG height="86" alt="C++ Boost" src="../c++boost.gif" width="277" border="0"></A></h3>
+               </td>
+               <TD width="353">
+                  <H1 align="center">Guidelines for Authors of Boost Libraries Containing Separate 
+                     Source</H1>
+               </TD>
+            </TR>
+         </TABLE>
+      </P>
+      <HR>
+      <P>These guidelines are designed for the authors of Boost libraries which have 
+         separate source that need compiling in order to use the library. Throughout, 
+         this guide refers to a fictitious "whatever" library, so replace all 
+         occurrences of "whatever" or "WHATEVER" with your own library's name when 
+         copying the examples.</P>
+      <H2>Contents</H2>
+      <P>
+         <dl class="index">
+            <dt><A href="#source_changes">Changes Affecting Source Code</A>
+               <dd>
+                  <dl class="index">
+                     <dt><A href="#abi">Preventing Compiler ABI Clashes</A> <dt><A href="#dlls">Supporting 
+                              Windows Dll's</A> <dt><A href="#auto-link">Enabling Automatic Library Selection 
+                                 and Linking</A> </dt>
+                  </dl>
+                  <dt><A href="#build_changes">Changes Affecting the Build System</A>
+                     <dd>
+                        <dl class="index">
+                           <dt><A href="#jamfile">Creating the Library Jamfile</A> <dt><A href="#testing">Testing 
+                                    Auto-linking</A> </dt>
+                        </dl>
+                        <dt><A href="#copyright">Copyright</A></dt>
+         </dl>
+      <P></P>
+      <h2><A name="source_changes"></A>Changes Affecting Source Code</h2>
+      <H3><A name="abi"></A>Preventing Compiler ABI Clashes</H3>
+      <P>There are some compilers (mostly Microsoft Windows compilers again!), which 
+         feature a range of compiler switches that alter the ABI of C++ classes and 
+         functions. By way of example, consider Borland's compiler which has the 
+         following options:</P>
+      <PRE>-b    (on or off - effects enum sizes).
+-Vx   (on or off - empty members).
+-Ve   (on or off - empty base classes).
+-aX   (alignment - 5 options).
+-pX   (Calling convention - 4 options).
+-VmX  (member pointer size and layout - 5 options).
+-VC   (on or off, changes name mangling).
+-Vl   (on or off, changes struct layout). 
+</PRE>
+      <P>These options are provided in addition to those affecting which runtime library 
+         is used (more on which later); the total number of combinations of options can 
+         be obtained by multiplying together the individual options above, so that gives 
+         2*2*2*5*4*5*2*2 = 3200 combinations!
+      </P>
+      <P>The problem is that users often expect to be able to build the Boost libraries 
+         and then just link to them and have everything just plain work, no matter what 
+         their project settings are. Irrespective of whether this is a reasonable 
+         expectation or not, without some means of managing this issue, the user may 
+         well find that their program will experience strange and hard to track down 
+         crashes at runtime unless the library they link to was built with the same 
+         options as their project (changes to the default alignment setting are a prime 
+         culprit). One way to manage this is with "prefix and suffix" headers: these 
+         headers invoke compiler specific #pragma directives to instruct the compiler 
+         that whatever code follows was built (or is to be built) with a specific set of 
+         compiler ABI settings.</P>
+      <P>Boost.config provides the macro BOOST_HAS_ABI_HEADERS which is set whenever 
+         there are prefix and suffix headers available for the compiler in use, typical 
+         usage is like this:</P>
+      <PRE>#ifndef BOOST_WHATEVER_HPP
+#define BOOST_WHATEVER_HPP
+
+#include &lt;boost/config.hpp&gt;
+
+// this must occur after all of the includes and before any code appears:
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_PREFIX
+#endif
+//
+// this header declares one class, and one function by way of examples:
+//
+class whatever
+{
+   // details.
+};
+
+whatever get_whatever();
+
+// the suffix header occurs after all of our code:
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_SUFFIX
+#endif
+
+#endif
+</PRE>
+      <H4>Rationale:</H4>
+      <P>Without some means of managing this issue, users often report bugs along the 
+         line of "Your silly library always crashes when I try and call it" and so on. 
+         These issues can be extremely difficult and time consuming to track down, only 
+         to discover in the end that it's a compiler setting that's changed the ABI of 
+         the class and/or function types of the program compared to those in the 
+         pre-compiled library. The use of prefix/suffix headers can minimize this 
+         problem, although probably not remove it completely.</P>
+      <H5>Counter Argument #1:</H5>
+      <P>Trust the user, if they want 13-byte alignment (!) let them have it.</P>
+      <H5>Counter Argument #2:</H5>
+      <P>Prefix/suffix headers have a tendency to "spread" to other boost libraries - 
+         for example if boost::shared_ptr&lt;&gt; forms part of your class's ABI, then 
+         including prefix/suffix headers in your code will be of no use unless 
+         shared_ptr.hpp also uses them. Authors of header-only boost libraries may not 
+         be so keen on this solution - with some justification - since they don't face 
+         the same problem.</P>
+      <h3><A name="dlls"></A>Supporting Windows Dll's</h3>
+      <p>On most Unix-like platforms no special annotations of source code are required 
+         in order for that source to be compiled as a shared library because all 
+         external symbols are exposed. However the majority of Windows compilers require 
+         that symbols that are to be imported or exported from a dll, be prefixed with 
+         __declspec(dllimport) or __declspec(dllexport). Without this mangling of source 
+         code, it is not possible to correctly build shared libraries on Windows 
+         (historical note - originally these declaration modifiers were required on 
+         16-bit Windows where the memory layout for exported classes was different from 
+         that of "local" classes - although this is no longer an issue, there is still 
+         no way to instruct the linker to "export everything", it also remains to be 
+         seen whether 64-bit Windows will resurrect the segmented architecture that led 
+         to this problem in the first place. Note also that the mangled names of 
+         exported symbols are different from non-exported ones, so __declspec(dllimport) 
+         is required in order to link to code within a dll).</p>
+      <p>In order to support the building of shared libraries on MS Windows your code 
+         will have to prefix all the symbols that your library exports with a macro 
+         (lets call it BOOST_WHATEVER_DECL) that your library will define to expand to 
+         either __declspec(dllexport) or __declspec(dllimport) or nothing, depending 
+         upon how your library is being built or used. Typical usage would look like 
+         this:</p>
+      <pre>#ifndef BOOST_WHATEVER_HPP
+#define BOOST_WHATEVER_HPP
+
+#include &lt;boost/config.hpp&gt;
+
+#ifdef BOOST_HAS_DECLSPEC // defined in config system
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_WHATEVER_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_WHATEVER_DYN_LINK)
+// export if this is our own source, otherwise import:
+#ifdef BOOST_WHATEVER_SOURCE
+# define BOOST_WHATEVER_DECL __declspec(dllexport)
+#else
+# define BOOST_WHATEVER_DECL __declspec(dllimport)
+#endif  // BOOST_WHATEVER_SOURCE
+#endif  // DYN_LINK
+#endif  // BOOST_HAS_DECLSPEC
+//
+// if BOOST_WHATEVER_DECL isn't defined yet define it now:
+#ifndef BOOST_WHATEVER_DECL
+#define BOOST_WHATEVER_DECL
+#endif
+
+//
+// this header declares one class, and one function by way of examples:
+//
+class BOOST_WHATEVER_DECL whatever
+{
+   // details.
+};
+
+BOOST_WHATEVER_DECL whatever get_whatever();
+
+#endif
+</pre>
+      And then in the source code for this library one would use:
+      <pre> 
+// 
+// define BOOST_WHATEVER SOURCE so that our library's 
+// setup code knows that we are building the library (possibly exporting code), 
+// rather than using it (possibly importing code): 
+// 
+#define BOOST_WHATEVER_SOURCE 
+#include &lt;boost/whatever.hpp&gt; 
+
+// class members don't need any further annotation: 
+whatever::whatever() { } 
+// but functions do: 
+BOOST_WHATEVER_DECL whatever get_whatever() 
+{
+   return whatever();
+}
+</pre>
+      <H4>Importing/exporting dependencies</H4>
+      <P>As well as exporting your main classes and functions (those that are actually 
+         documented), Microsoft Visual C++ will warn loudly and often if you try to 
+         import/export a class whose dependencies are not also exported. Dependencies 
+         include: any base classes, any user defined types used as data members, plus 
+         all of the dependencies of your dependencies and so on. This causes particular 
+         problems when a dependency is a template class, because although it is 
+         technically possible to export these, it is not at all easy, especially if the 
+         template itself has dependencies which are implementation-specific details. In 
+         most cases it's probably better to simply suppress the warnings using:</P>
+      <PRE>#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660)
+#endif
+
+// code here
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+</PRE>
+      <p>This is safe provided that there are no dependencies that are (template) 
+         classes with non-constant static data members, these really do need exporting, 
+         otherwise there will be multiple copies of the static data members in the 
+         program, and that's really really bad.
+      </p>
+      <p>Historical note: on 16-bit Windows you really did have to export all 
+         dependencies or the code wouldn't work, however since the latest Visual Studio 
+         .NET supports the import/export of individual member functions, it's a 
+         reasonably safe bet that Windows compilers won't do anything nasty - like 
+         changing the class's ABI - when importing/exporting a class.</p>
+      <h4>Rationale:</h4>
+      <p><EM>Why bother - doesn't the import/export mechanism take up more code that the 
+            classes themselves?</EM></p>
+      <P>A good point, and probably true, however there are some circumstances where 
+         library code must be placed in a shared library - for example when the 
+         application consists of multiple dll's as well as the executable, and more than 
+         one those dll's link to the same Boost library - in this case if the library 
+         isn't dynamically linked and it contains any global data (even if that data is 
+         private to the internals of the library) then really bad things can happen - 
+         even without global data, we will still get a code bloating effect. 
+         Incidentally, for larger applications, splitting the application into multiple 
+         dll's can be highly advantageous - by using Microsoft's "delay load" feature 
+         the application will load only those parts it really needs at any one time, 
+         giving the impression of a much more responsive and faster-loading application.</P>
+      <p><EM>Why static linking by default? </EM>
+      </p>
+      <P>In the worked example above, the code assumes that the library will be 
+         statically linked unless the user asks otherwise. Most users seem to prefer 
+         this (there are no separate dll's to distribute, and the overall distribution 
+         size is often significantly smaller this way as well: i.e. you pay for what you 
+         use and no more), but this is a subjective call, and some libraries may even 
+         only be available in dynamic versions (Boost.threads for example).</P>
+      <h3><A name="auto-link"></A>Enabling Automatic Library Selection and Linking</h3>
+      <p>Many Windows compilers ship with multiple runtime libraries - for example 
+         Microsoft Visual Studio .NET comes with 6 versions of the C and C++ runtime. It 
+         is essential that the Boost library that the user links to is built against the 
+         same C runtime as the program is built against. If that is not the case, then 
+         the user will experience linker errors at best, and runtime crashes at worst. 
+         The Boost build system manages this by providing different build variants, each 
+         of which is build against a different runtime, and gets a slightly different 
+         mangled name depending upon which runtime it is built against. For example the 
+         regex libraries get named as follows when built with Visual Studio .NET 2003:</p>
+      <pre>boost_regex-vc71-mt-1_31.lib
+boost_regex-vc71-mt-gd-1_31.lib
+libboost_regex-vc71-mt-1_31.lib
+libboost_regex-vc71-mt-gd-1_31.lib
+libboost_regex-vc71-mt-s-1_31.lib
+libboost_regex-vc71-mt-sgd-1_31.lib
+libboost_regex-vc71-s-1_31.lib
+libboost_regex-vc71-sgd-1_31.lib
+</pre>
+      <p>The difficulty now is selecting which of these the user should link his or her 
+         code to.</p>
+      <p>In contrast, most Unix compilers typically only have one runtime (or sometimes 
+         two if there is a separate thread safe option). For these systems the only 
+         choice in selecting the right library variant is whether they want debugging 
+         info, and possibly thread safety.
+      </p>
+      <p>Historically Microsoft Windows compilers have managed this issue by providing a 
+         #pragma option that allows the header for a library to automatically select the 
+         library to link to. This makes everything automatic and extremely easy for the 
+         end user: as soon as they include a header file that has separate source code, 
+         the name of the right library build variant gets embedded in the object file, 
+         and as long as that library is in the linker search path, it will get pulled in 
+         by the linker without any user intervention.</p>
+      <p>This feature can be enabled for Boost libraries by including the header
+         <boostconfigauto_link.hpp>after defining BOOST_LIB_NAME and BOOST_DYN_LINK as 
+         required, as usual the feature can also be disabled by the user, if they define 
+         either BOOST_ALL_NO_LIB or BOOST_WHATEVER_NO_LIB:</p>
+      <pre>//
+// Automatically link to the correct build variant where possible.
+//
+#if !defined(BOOST_ALL_NO_LIB) &amp;&amp; !defined(BOOST_WHATEVER_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME boost_whatever
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_WHATEVER_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include &lt;boost/config/auto_link.hpp&gt;
+#endif  // auto-linking disabled
+</pre>
+      <P></P>
+      <P>If for any reason you need to debug this feature, the header 
+         &lt;boost/config/auto_link.hpp&gt; will output some helpful diagnostic messages 
+         if you first define BOOST_LIB_DIAGNOSTIC.</P>
+      <H2><A name="build_changes"></A>Changes Affecting the Build System</H2>
+      <H3><a name='build"'></a><A name="jamfile"></A>Creating the library Jamfile</H3>
+      <P>The Jamfile for building library "whatever" typically lives in 
+         boost-root/libs/whatever/build, start by defining the project root for the 
+         Jamfile:</P>
+      <PRE>subproject libs/whatever/build ; </PRE>
+      <P>Then add the static library build target (if supported):</P>
+      <PRE>lib boost_whatever 
+   :
+      # list all the sources for this library:
+      ../src/whatever.cpp
+   :
+      # all build requirements go here.
+      # the common names rule ensures that the library will
+      # be named according to the rules used by the install
+      # and auto-link features:
+      [ common-names ] 
+      # set include path for Boost headers:
+      <sysinclude>$(BOOST_ROOT)
+   : 
+      # list default build variants here
+      debug release 
+   ; </PRE>
+      <P>Then add the dll build target (if supported).&nbsp;&nbsp;In this case the build 
+         requirements section get an extra define: so that our sources know to export 
+         their own symbols (and import those from any other boost libs on which we may 
+         be dependent).&nbsp; We also restict shared library builds to dynamic-runtime 
+         build variants, if we don't do this then dll's linked against static runtimes 
+         are unlikely to function correctly (the dll will have a separate runtime from 
+         the executable using it, this generally causing problems with new and 
+         delete,&nbsp;as well as exception handling runtimes).</P>
+      <PRE>dll boost_whatever 
+   :
+      # list all the sources for this library:
+      ../src/whatever.cpp
+   :
+      # all build requirements go here.
+      # the common names rule ensures that the library will
+      # be named according to the rules used by the install
+      # and auto-link features:
+      [ common-names ] 
+      # tell our source that we're building (and maybe using) dll's:
+      &lt;define&gt;BOOST_ALL_DYN_LINK=1
+      # only build this for dynamic runtimes:
+      &lt;runtime-link&gt;dynamic
+      # set include path for Boost headers:
+      <sysinclude>$(BOOST_ROOT)
+   : 
+      # list default build variants here
+      debug release 
+   ; </PRE>
+      <P>Now add an install target so that Boost.Install can find this library to 
+         install:</P>
+      <pre>install whatever lib
+    : <dll>boost_whatever <lib>boost_whatever
+    ;
+</pre>
+      <P>Finally add a stage target that will copy the built libraries to a common 
+         sub-directory (boost-root/stage/lib):</P>
+      <PRE>stage stage/lib : <lib>boost_whatever <dll>boost_whatever
+    :
+        # copy to a path rooted at BOOST_ROOT:
+        <locate>$(BOOST_ROOT)
+        # make sure the names of the libraries are correctly named:
+        [ common-names ]
+        # add this target to the "stage" and "all" psuedo-targets:
+        <target>stage
+        <target>all
+    :
+        debug release
+    ;
+</PRE>
+      <H3><A name="testing"></A>Testing Auto-linking</H3>
+      <P>Testing the auto-link feature&nbsp;reasonable straightforward using 
+         the&nbsp;Boost.build system: we need to build the "whatever" library's test 
+         files without explicitly specifying the library to link to in the Jamfile, for 
+         example:</P>
+      <PRE>
+subproject libs/whatever/test/auto-link-test ;
+
+# bring in the rules for testing
+import testing ;
+
+# start with a static linking version:
+
+run 
+   # sources
+      ../whatever_test.cpp
+   :
+   :	# input files
+   : 	# requirements
+      &lt;library-path&gt;../../../../stage/lib
+      &lt;define&gt;BOOST_LIB_DIAGNOSTIC=1
+   : 	# program name
+      whatever_test          
+   ;
+
+   # and then a dll linking version:
+   run 
+   # sources
+      ../whatever_test.cpp
+   :
+   :	# input files
+   : 	# requirements
+      &lt;library-path&gt;../../../../stage/lib
+      &lt;define&gt;BOOST_LIB_DIAGNOSTIC=1
+      &lt;define&gt;BOOST_ALL_DYN_LINK=1
+      &lt;runtime-link&gt;dynamic
+   : 	# program name
+      whatever_test_dll          
+   ;
+
+</PRE>
+      <P>Please note however that this Jamfile will only build with compilers that do 
+         actually support auto-linking, so it should not be added to the regular 
+         regression tests.&nbsp; The Jamfile should also be built for all possible build 
+         variants, for the Microsoft / Borland compilers that means doing a:</P>
+      <PRE>bjam -sBUILD="release debug &lt;threading&gt;multi/single &lt;runtime-link&gt;static/dynamic" test
+      </PRE>
+      <HR>
+      <p><A name="copyright"></A>Revised 
+         <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan --> 
+         21 Nov 2003 
+         <!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
+      <p><i>© Copyright John Maddock&nbsp;1998- 
+            <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y" startspan -->  2003<!--webbot bot="Timestamp" endspan i-checksum="39359" --></i></p>
+      <P><I>Use, modification and distribution are subject to the Boost Software License, 
+            Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A>
+            or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>).</I></P>
+      <P><EM>The use of code snippets from this article does not require the reproduction 
+            of this copyright declaration; if you wish to provide attribution then please 
+            provide a link to this article.</EM></P>
+   </body>
+</html>

粤ICP备19079148号