Jelajahi Sumber

Initial HTML commit

[SVN r7640]
Beman Dawes 26 tahun lalu
induk
melakukan
0566f5ae2c

+ 1 - 1
libs/random

@@ -1 +1 @@
-Subproject commit d20ee0622148b80ffcb5e310a66d6dbd81a7695f
+Subproject commit 14dccab6702b0760d1908ead89394256ca94834e

+ 1 - 1
libs/rational

@@ -1 +1 @@
-Subproject commit af8e30a7fbdc355b618c8eebbbdc11c7e013ccd9
+Subproject commit 9b78701511b97b23599176eb2d097e2f01bbf46a

+ 1 - 1
libs/smart_ptr

@@ -1 +1 @@
-Subproject commit ed7e13da9f2d7ea2878e0bac3627d7271ab52b07
+Subproject commit d3347b6d0832eec766fb70731e9aeb07f31450b0

+ 1 - 1
libs/timer

@@ -1 +1 @@
-Subproject commit 7c8b8d52e0caebc3e3cfa933f8f7d8cd5f691578
+Subproject commit 6d7f6b95a3e26223d1bb4639d16230cbefd61d52

+ 1166 - 0
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 &amp;
+
+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 &gt; #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&lt;typename countable_type&gt;
+class countable_ptr
+{
+public: // construction and destruction
+
+    explicit countable_ptr(countable_type *);
+    countable_ptr(const countable_ptr &amp;);
+    ~countable_ptr();
+
+public: // access
+
+    countable_type *operator-&gt;() const;
+    countable_type &amp;operator*() const;
+    countable_type *get() const;
+
+public: // modification
+
+    countable_ptr &amp;clear();
+    countable_ptr &amp;assign(countable_type *);
+    countable_ptr &amp;assign(const countable_ptr &amp;);
+    countable_ptr &amp;operator=(const countable_ptr &amp;);
+
+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&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::countable_ptr(countable_type *initial)
+  : body(initial)
+{
+    acquire(body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::countable_ptr(const countable_ptr &amp;other)
+  : body(other.body)
+{
+    acquire(body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::~countable_ptr()
+{
+    clear();
+}
+
+template&lt;typename countable_type&gt;
+countable_type *countable_ptr&lt;countable_type&gt;::operator-&gt;() const
+{
+    return body;
+}
+
+template&lt;typename countable_type&gt;
+countable_type &amp;countable_ptr&lt;countable_type&gt;::operator*() const
+{
+    return *body;
+}
+
+template&lt;typename countable_type&gt;
+countable_type *countable_ptr&lt;countable_type&gt;::get() const
+{
+    return body;
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::clear()
+{
+    return assign(0);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::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&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::assign(const countable_ptr &amp;rhs)
+{
+    return assign(rhs.body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::operator=(const countable_ptr &amp;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 &amp;);
+    countability &amp;operator=(const countability &amp;);
+
+};
+</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-&gt;acquire();
+    }
+}
+
+void release(const countability *ptr)
+{
+    if(ptr)
+    {
+        ptr-&gt;release();
+    }
+}
+
+size_t acquired(const countability *ptr)
+{
+    return ptr ? ptr-&gt;acquired() : 0;
+}
+
+template&lt;class countability_derived&gt;
+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&lt;example&gt; ptr(new example);
+    countable_ptr&lt;example&gt; 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 &amp;);
+void operator delete(void *, const countable_new &amp;);</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&lt;count *&gt;(static_cast&lt;const count *&gt;(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 &amp;)
+{
+    count *allocated = static_cast&lt;count *&gt;(::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 &amp;)
+{
+    ::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)-&gt;value;
+    }
+}
+
+void release(const void *ptr)
+{
+    if(ptr)
+    {
+        --header(ptr)-&gt;value;
+    }
+}
+
+size_t acquired(const void *ptr)
+{
+    return ptr ? header(ptr)-&gt;value : 0;
+}
+
+template&lt;typename countable_type&gt;
+void dispose(const countable_type *ptr, const void *)
+{
+    ptr-&gt;~countable_type();
+    operator delete(const_cast&lt;countable_type *&gt;(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&lt;example&gt; ptr(new(countable) example);
+    countable_ptr&lt;example&gt; 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>
+
+&copy; Copyright Kevlin Henney, 1998, 1999</I></FONT></DIV>
+
+
+
+</BODY>
+
+</HTML>
+

+ 118 - 0
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.)&nbsp; 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>&nbsp; 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&#146;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>&nbsp; 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.&nbsp; 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.&nbsp; 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.&nbsp; 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>&nbsp; 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>
+&nbsp; 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>&nbsp; Some
+might, someday off in the future, but that is up to the standards committee.&nbsp; To the
+extent a library becomes &quot;existing practice&quot;, 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&#146;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>
+&nbsp; 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>

+ 103 - 0
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&amp;E</a>)
+describe how to build feature models [C&amp;E 4.4] consisting of a feature
+diagram plus semantic, rationale, and other attributes.&nbsp; 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
+&quot;Language shapes the way we think, and determines what we can think
+about&quot; seems to apply.&nbsp; 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&amp;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.&nbsp; 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             ::= &quot;(&quot; feature-list &quot;)&quot;      // required features
+                      | &quot;[&quot; feature-list &quot;]&quot;      // optional features</pre>
+  <pre>feature-list        ::= element { &quot;|&quot; element }   // one only
+                      | element { &quot;+&quot; element }   // one or more
+                      | element { &quot;,&quot; 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&amp;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&amp;E 4.9.1] is &quot;anything users or client programs might
+want to control about a concept.&nbsp; Thus, during feature modeling, we
+document no only functional features ... but also implementation features, ...,
+various optimizations, alternative implementation techniques, and so on.&quot;</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&nbsp; (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>

+ 94 - 0
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 &quot;accept&quot; or &quot;reject&quot; 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.&nbsp;</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.&nbsp; 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?&nbsp; With what compiler?&nbsp; 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?&nbsp; 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.&nbsp; 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.&nbsp; It
+is, however, useful to upload fixes for serious bugs right away, particularly
+those which prevent reviewers from fully evaluating the library.&nbsp; 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.&nbsp; If the suggested
+changes might affect reviewer's judgments,&nbsp; 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>&nbsp;</p>
+
+</body>
+
+</html>

+ 102 - 0
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.&nbsp; To co-exist peacefully and productively, headers must
+be &quot;good neighbors&quot;.</p>
+<p>Here are the standards for namespace boost headers.&nbsp;&nbsp;&nbsp; Many of
+these are also reasonable guidelines for general use.
+<ul>
+  <li>Headers should have a .hpp (lowercase) filename extension.&nbsp;</li>
+  <li>Identify the file with an initial comment line.&nbsp; 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.&nbsp; If you
+    don't want to retain ownership, say something like &quot;Written by Jane
+    Programmer and placed in the public domain&quot;.</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.&nbsp; Underscores separate words.</li>
+  <li>Wrap the header in #ifndef guards so that multiple inclusion is
+    benign.&nbsp; Use a naming convention that minimizes the chance of clashes
+    with macro names from other's code.&nbsp; 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.&nbsp;
+    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.&nbsp; The parent
+    directory is added to the compiler's include search path.&nbsp; Then both
+    your code and user code specifies the sub-directory in <tt>#include</tt>
+    directives.&nbsp; Thus the header <a href="#Sample header">sample header</a>&nbsp;
+    would be included by <tt>#include &lt;boost/furball.hpp&gt;</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>//&nbsp; Boost general library furball.hpp header file&nbsp; ---------------------------//
+
+//&nbsp; (C) Copyright Your Name 1998. Permission to copy, use, modify, sell and
+//&nbsp; distribute this software is granted provided this copyright notice appears
+//&nbsp; in all copies. This software is provided &quot;as is&quot; without express or implied
+//&nbsp; warranty, and with no claim as to its suitability for any purpose.
+
+//&nbsp; $Id$ or other version information
+
+#ifndef BOOST_FURBALL_HPP
+#define BOOST_FURBALL_HPP
+
+namespace boost {
+
+//&nbsp; Furball class declaration&nbsp; -----------------------------------------------//
+
+&nbsp; class furball
+  {
+    public: 
+&nbsp;     void throw_up();
+    private:
+      int whatever;
+&nbsp;&nbsp;};&nbsp; // furball
+
+} // namespace
+
+#endif&nbsp; // 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.&nbsp; 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 -->23 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19836" --></p>
+
+</body>
+
+</html>

+ 201 - 0
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 &quot;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.&quot;</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.&nbsp; Although the use of boost/config.hpp is not required, it is
+the preferred approach for simple configuration problems.&nbsp;&nbsp;</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.&nbsp; 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.&nbsp; The term &quot;full costs&quot; 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.&nbsp; Instead, provide a single general purpose implementation, and forgo
+the increased complexity implied by all other techniques.</p>
+<p><b>Appropriate:</b>&nbsp; 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 &quot;In design discussions some implementation is often
+alleged to be much faster than another, yet&nbsp; 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!&nbsp; A single general purpose implementation is
+often just fine.&quot;</p>
+<p>Or as Donald Knuth said, &quot;Premature optimization is the root of all
+evil.&quot; (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>&nbsp;Preventing multiple inclusion of headers via #include guards.</li>
+    <li>&nbsp;Passing minor configuration information from a configuration
+      header to other files.</li>
+  </ul>
+</blockquote>
+<p><b>Appropriate:</b>&nbsp; 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:&nbsp;</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.&nbsp; 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.&nbsp; 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>&nbsp; When different platforms require different
+implementations, or when there are major performance differences between
+possible implementations.&nbsp;</p>
+<p><b>Not appropriate:</b>&nbsp; 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.&nbsp; 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.&nbsp; 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.&nbsp; Template-based approaches provide optimal space and time
+efficiency in return for constraining the implementation selection to compile
+time.&nbsp;</p>
+<p>Important template techniques include:</p>
+<blockquote>
+  <ul>
+    <li>Data type parameterization.&nbsp; This allows a single component to
+      operate on a variety of data types, and is why templates were originally
+      invented.</li>
+    <li>Traits parameterization.&nbsp; If parameterization is complex, bundling
+      up aspects into a single traits helper class can allow great variation
+      while hiding messy details.&nbsp; The C++ Standard Library provides
+      several examples of this idiom, such as <code>iterator_traits&lt;&gt;</code>
+      (24.3.1 lib.iterator.traits) and <tt>char_traits&lt;&gt;</tt> (21.2
+      lib.char.traits).</li>
+    <li>Specialization.&nbsp; A template parameter can be used purely for the
+      purpose of selecting a specialization. For example:</li>
+  </ul>
+  <blockquote>
+    <blockquote>
+      <pre>SomeClass&lt;fast&gt;  my_fast_object;  // fast and small are empty classes
+SomeClass&lt;small&gt; 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>&nbsp; When the interfaces for variations are
+different, or when choice of variation is best done by some mechanism outside of
+the program itself.&nbsp; 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>

+ 62 - 0
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>.&nbsp;
+  Basic standards for those preparing a submission.</p>
+  <p><a href="submission_process.htm"><b>Library Submission Process</b></a>.&nbsp;
+  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>.&nbsp; 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>.&nbsp;
+  Sometimes one size fits all, sometimes it doesn't.&nbsp; 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.&nbsp; 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.&nbsp; 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>

+ 268 - 0
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.&nbsp;<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
+&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>
+<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.&nbsp;&nbsp; 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.&nbsp; 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.&nbsp;&nbsp;<br>
+  </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/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.&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.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.&nbsp; 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>.&nbsp;</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 lowercase/underscore <a href="#Naming">naming conventions</a> of
+    the C++ standard library.&nbsp; 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.&nbsp; 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.&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.</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>
+<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.&nbsp; But consider the follow 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.<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 &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 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 -->24 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21054" --></p>
+
+</body>
+
+</html>

+ 169 - 0
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.&nbsp;
+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>.&nbsp;
+Click around the <a href="../index.htm">web site</a>.&nbsp; Understand the <a href="lib_guide.htm">Requirements</a>.&nbsp;
+Read the rest of this page to learn about the process.&nbsp; 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 &quot;Is there any interest in a library
+which solves Traveling Salesperson problems in linear time?&quot;</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.&nbsp; Please post lengthy material in
+the eGroups boost <a href="http://www.egroups.com/files/boost/">Files section</a>
+(formerly called the &quot; vault&quot;).&nbsp;</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.&nbsp; Repeat until satisfied.</p>
+<p>The exact details of this process varies a lot.&nbsp; Sometimes it is public,
+on the mailing list, sometimes a lot of discussion happens in private
+emails.&nbsp; For some libraries the process is over quickly, for others it goes
+on for months.&nbsp; It's often challenging, and sometimes leads off in
+completely unexpected directions.&nbsp;&nbsp;</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.&nbsp;</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.&nbsp; Please use a subject in
+the form &quot;Review Request: library&quot; 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.&nbsp;</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 &quot;Review
+Manager&quot; 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.&nbsp;</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.&nbsp;&nbsp; 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.&nbsp; 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.&nbsp; 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>&nbsp;
+      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.&nbsp; 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.&nbsp; 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>.&nbsp;&nbsp;
+Attach the .zip submission file.&nbsp; 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).&nbsp; 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&nbsp; 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.&nbsp; The preferred picture format is .jpg, but other
+common formats are acceptable.&nbsp; 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.&nbsp; 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>

+ 52 - 0
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.&nbsp; 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>&nbsp;
+boost::noncopyable (in boost/utility.hpp) has considerable benefits; it
+simplifies code, improves readability, and signals intent.&nbsp; Costs are low
+as coupling is limited;&nbsp; it uses no other classes and includes only the
+generally lightweight headers &lt;boost/config.hpp&gt; and &lt;cstddef&gt;.&nbsp;&nbsp;
+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.&nbsp; 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>&nbsp; The
+boost dir_it library has considerable coupling and runtime costs, not to mention
+portability issues with unsupported operating systems.&nbsp; 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.&nbsp; Don't use dir_it just for the sake of using a boost library.</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+
+</body>
+
+</html>

+ 50 - 0
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 &quot;spare time&quot; 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 &amp; 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>

+ 36 - 0
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>

+ 48 - 0
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 &quot;Mac OS 7&quot;).
+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>

+ 29 - 0
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>

+ 42 - 0
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
+&quot;ue&quot; is actually a &quot;u-umlaut&quot;, 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 &quot;Design
+Pattern for the Implementation of Graph Algorithms&quot;; strike the &quot;Design
+Pattern&quot; and put in &quot;Generic&quot; 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
+&quot;aa&quot; 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:&nbsp; <a href="http://www.claas-solutions.de/kuehl/">http://www.claas-solutions.de/kuehl/</a></p>
+</body>
+</html>

+ 60 - 0
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>

+ 31 - 0
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>

+ 28 - 0
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>

+ 34 - 0
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>

+ 39 - 0
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.&nbsp;</p>
+<p>Email: <a href="mailto:Jens.Maurer@gmx.net">Jens.Maurer@gmx.net</a></p>
+
+</body>
+
+</html>

+ 36 - 0
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>

+ 41 - 0
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 &quot;can't be done&quot;, and can be
+contacted at <a href="mailto:John_Maddock@compuserve.com">John_Maddock@compuserve.com</a>.</p>
+</body>
+</html>

+ 49 - 0
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>

+ 36 - 0
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>

+ 38 - 0
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 &quot;day
+job&quot; 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 &quot;The C++ Programming language&quot;, 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>

+ 27 - 0
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>

粤ICP备19079148号