Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/more/writingdoc/structure.html @ 56

Last change on this file since 56 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 14.7 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3<html>
4<head>
5  <meta http-equiv="Content-Language" content="en-us">
6  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
7  <link rel="stylesheet" type="text/css" href="../../boost.css">
8
9  <title>Writing Documentation for Boost - Documentation Structure</title>
10</head>
11
12<body link="#0000FF" vlink="#800080">
13  <table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
14  "header">
15    <tr>
16      <td valign="top" width="300">
17        <h3><a href="index.html"><img height="86" width="277" alt="C++ Boost"
18        src="../../boost.png" border="0"></a></h3>
19      </td>
20
21      <td valign="top">
22        <h1 align="center">Writing Documentation for Boost</h1>
23
24        <h2 align="center">Documentation Structure</h2>
25      </td>
26    </tr>
27  </table>
28  <hr>
29
30  <dl class="page-index">
31    <dt><a href="#introduction">Introduction</a></dt>
32
33    <dt><a href="#standards-conforming">Standards Conforming
34    Documentation</a></dt>
35
36    <dd>
37      <dl class="page-index">
38        <dt><a href="#elements">Document elements</a></dt>
39
40        <dd>
41          <dl class="page-index">
42            <dt><a href="#summary">Summary</a></dt>
43
44            <dt><a href="#requirements">Requirements</a></dt>
45
46            <dt><a href="#detailed-specs">Detailed specifications</a></dt>
47
48            <dt><a href="#ref-cpp">References to the Standard C++
49            library</a></dt>
50
51            <dt><a href="#ref-c">References to the Standard C
52            library</a></dt>
53          </dl>
54        </dd>
55
56        <dt><a href="#other">Other conventions</a></dt>
57
58        <dd>
59          <dl class="page-index">
60            <dt><a href="#type-descs">Type descriptions</a></dt>
61          </dl>
62        </dd>
63      </dl>
64    </dd>
65
66    <dt><a href="#more">More Information</a></dt>
67
68    <dd>
69      <dl class="page-index">
70        <dt><a href="#function-semantic-explanations">Function semantic
71        element explanations</a></dt>
72
73        <dd>
74          <dl class="page-index">
75            <dt><a href="#requires">Requires</a></dt>
76
77            <dt><a href="#effects">Effects</a></dt>
78
79            <dt><a href="#postconditions">Postconditions</a></dt>
80
81            <dt><a href="#returns">Returns</a></dt>
82
83            <dt><a href="#throws">Throws</a></dt>
84
85            <dt><a href="#complexity">Complexity</a></dt>
86
87            <dt><a href="#rationale">Rationale</a></dt>
88          </dl>
89        </dd>
90      </dl>
91    </dd>
92
93    <dt><a href="#footnotes">Footnotes</a></dt>
94  </dl>
95
96  <h2><a name="introduction" id="introduction">Introduction</a></h2>
97
98  <p>Boost itself does not require any specific documentation structure. The
99  C++ Standard, however, has very explicit requirements for the description
100  of library components (Section 17.3). So for Boost libraries likely to be
101  proposed for inclusion in the standard, it is highly desirable to structure
102  documentation in a way that meets the requirements of the the standard.
103  Doing so eliminates the need to rewrite the documentation for
104  standardization.</p>
105
106  <p>Library developers should remember that for a library to be accepted as
107  part of the C++ Standard Library, the proposal must include full wording.
108  The committee will not do that work for you.</p>
109
110  <p>Beyond that, the documentation structure required for the standard is an
111  effective way to communicate the technical specifications for a library.
112  Although terse, it is already familiar to many Boost users, and is far more
113  precise than most ad hoc documentation structures.</p>
114
115  <p>The following description is for the structure of documentation required
116  by the standard. Boost libraries should also provided additional
117  documentation, such as introductory, tutorial, example, and rationale
118  material.</p>
119
120  <h2><a name="standards-conforming" id="standards-conforming">Standards
121  Conforming</a> Documentation</h2>
122
123  <h3><a name="elements" id="elements">Document elements</a></h3>
124
125  <p>Each document contains the following elements, as applicable<a class=
126  "footnote" href="#footnote1">(1)</a>:</p>
127
128  <ul>
129    <li><a href="#summary">Summary</a></li>
130
131    <li><a href="#requirements">Requirements</a></li>
132
133    <li><a href="#detailed-specs">Detailed specifications</a></li>
134
135    <li><a href="#ref-cpp">References to the Standard C++ library</a></li>
136
137    <li><a href="#ref-c">References to the Standard C library</a></li>
138  </ul>
139
140  <h4><a name="summary" id="summary">Summary</a></h4>
141
142  <p>The Summary provides a synopsis of the category, and introduces the
143  first-level subclauses. Each subclause also provides a summary, listing the
144  headers specified in the subclause and the library entities provided in
145  each header.</p>
146
147  <p>Paragraphs labeled "Note(s):" or "Example(s):" are informative, other
148  paragraphs are normative.</p>
149
150  <p>The summary and the detailed specifications are presented in the
151  order:</p>
152
153  <ul>
154    <li>Macros</li>
155
156    <li>Values</li>
157
158    <li>Types</li>
159
160    <li>Classes</li>
161
162    <li>Functions</li>
163
164    <li>Objects</li>
165  </ul>
166
167  <h4><a name="requirements" id="requirements">Requirements</a></h4>
168
169  <p>The library can be extended by a C++ program. Each clause, as
170  applicable, describes the requirements that such extensions must meet. Such
171  extensions are generally one of the following:</p>
172
173  <ul>
174    <li>Template arguments</li>
175
176    <li>Derived classes</li>
177
178    <li>Containers, iterators, and/or algorithms that meet an interface
179    convention</li>
180  </ul>
181
182  <p>Interface convention requirements are stated as generally as possible.
183  Instead of stating "<code>class X</code> has to define a member function
184  <code>operator++()</code>," the interface requires "for any object
185  <code>x</code> of <code>class X</code>, <code>++x</code> is defined." That
186  is, whether the operator is a member is unspecified.</p>
187
188  <p>Requirements are stated in terms of well-defined expressions, which
189  define valid terms of the types that satisfy the requirements. For every
190  set of requirements there is a table that specifies an initial set of the
191  valid expressions and their semantics. Any generic algorithm that uses the
192  requirements is described in terms of the valid expressions for its formal
193  type parameters.</p>
194
195  <p>Template argument requirements are sometimes referenced by name.</p>
196
197  <p>In some cases the semantic requirements are presented as C++ code. Such
198  code is intended as a specification of equivalance of a construct to
199  another construct, not necessarily as the way the construct must be
200  implemented.<a class="footnote" href="#footnote2">(2)</a></p>
201
202  <h4><a name="detailed-specs" id="detailed-specs">Detailed
203  specification</a></h4>
204
205  <p>The detailed specifications each contain the following elements:</p>
206
207  <ul>
208    <li>Name and brief description</li>
209
210    <li>Synopsis (class definition or function prototype, as
211    appropriate)</li>
212
213    <li>Restrictions on template arguments, if any</li>
214
215    <li>Description of class invariants</li>
216
217    <li>Description of function semantics</li>
218  </ul>
219
220  <p>Descriptions of class member functions follow the order (as
221  appropriate)<a class="footnote" href="#footnote3">(3)</a>:</p>
222
223  <ul>
224    <li>Constructor(s) and destructor</li>
225
226    <li>Copying and assignment functions</li>
227
228    <li>Comparison functions</li>
229
230    <li>Modifier functions</li>
231
232    <li>Observer functions</li>
233
234    <li>Operators and other non-member functions</li>
235  </ul>
236
237  <p>Descriptions of function semantics contain the following <a name=
238  "function-elements" id="function-elements">elements</a> (as
239  appropriate)<a class="footnote" href="#footnote4">(4):</a></p>
240
241  <dl class="function-semantics">
242    <dt><b><a href="#requires">Requires:</a></b> the preconditions for
243    calling the function</dt>
244
245    <dt><b><a href="#effects">Effects:</a></b> the actions performed by the
246    function</dt>
247
248    <dt><b><a href="#postconditions">Postconditions:</a></b> the observable
249    results established by the function</dt>
250
251    <dt><b><a href="#returns">Returns:</a></b> a description of the value(s)
252    returned by the function</dt>
253
254    <dt><b><a href="#throws">Throws:</a></b> any exceptions thrown by the
255    function, and the conditions that would cause the exception</dt>
256
257    <dt><b><a href="#complexity">Complexity:</a></b> the time and/or space
258    complexity of the function</dt>
259
260    <dt><b><a href="#rationale">Rationale:</a></b> the rationale for the
261    function's design or existence</dt>
262  </dl>
263
264  <p>Complexity requirements specified in the library clauses are upper
265  bounds, and implementations that provide better complexity guarantees
266  satisfy the requirements.</p>
267
268  <h4><a name="ref-cpp" id="ref-cpp">References to the C++ Standard
269  library</a></h4>
270
271  <h4><a name="ref-c" id="ref-c">References to the C Standard
272  library</a></h4>
273
274  <h3><a name="other" id="other">Other conventions</a></h3>
275
276  <p>These conventions are for describing implementation-defined types, and
277  member functions.</p>
278
279  <h4><a name="type-descs" id="type-descs">Type descriptions</a></h4>
280
281  <p>The Requirements subclauses may describe names that are used to specify
282  constraints on template arguments.</p>
283
284  <h2><a name="more" id="more">More Information</a></h2>
285
286  <h3><a name="function-semantic-explanations" id=
287  "function-semantic-explanations">Function semantic element
288  explanations</a></h3>
289
290  <p>The function semantic element description <a href=
291  "#function-elements">above</a> is taken directly from the C++ standard, and
292  is quite terse. Here is a more detailed explanation of each of the
293  elements.</p>
294
295  <p>Note the use of the <code>&lt;code&gt; ... &lt;/code&gt;</code> font tag
296  to distinguish actual C++ usage from English prose.</p>
297
298  <h4><a name="requires" id="requires">Requires</a></h4>
299
300  <p>Preconditions for calling the function, typically expressed as
301  predicates. The most common preconditions are requirements on the value of
302  arguments, often in the form of C++ expressions. For example,</p>
303  <pre>
304 
305<code>void limit( int * p, int min, int max );</code>
306</pre>
307
308  <dl class="function-semantics">
309    <dt><b>Requires:</b> <code>p != 0 &amp;&amp; min &lt;= max</code></dt>
310  </dl>
311
312  <p>Requirements already enforced by the C++ language rules (such as the
313  type of arguments) are not repeated in Requires paragraphs.</p>
314
315  <h4><a name="effects" id="effects">Effects</a></h4>
316
317  <p>The actions performed by the function, described either in prose or in
318  C++. A description in prose is often less limiting on implementors, but is
319  often less precise than C++ code.</p>
320
321  <p>If an effect is specified in one of the other elements, particularly
322  <i>postconditions</i>, <i>returns</i>, or <i>throws</i>, it is not also
323  described in the <i>effects</i> paragraph. Having only a single description
324  ensures that there is one and only one specification, and thus eliminates
325  the risk of divergence.</p>
326
327  <h4><a name="postconditions" id="postconditions">Postconditions</a></h4>
328
329  <p>The observable results of the function, such as the value of variables.
330  Postconditions are often expressed as predicates that are true after the
331  function completes, in the form of C++ expressions. For example:</p>
332  <pre>
333 
334void make_zero_if_negative( int &amp; x );
335</pre>
336
337  <dl class="function-semantics">
338    <dt><b>Postcondition:</b> <code>x &gt;= 0</code></dt>
339  </dl>
340
341  <h4><a name="returns" id="returns">Returns</a></h4>
342
343  <p>The value returned by the function, usually in the form of a C++
344  expression. For example:</p>
345  <pre>
346int sum( int x, int y );
347</pre>
348
349  <dl class="function-semantics">
350    <dt><b>Returns:</b> <code>x + y</code></dt>
351  </dl>
352
353  <p>Only specify the return value; the type is already dictated by C++
354  language rules.</p>
355
356  <h4><a name="throws" id="throws">Throws</a></h4>
357
358  <p>Specify both the type of exception thrown, and the condition that causes
359  the exception to be thrown. For example, the <code>std::basic_string</code>
360  class specifies:</p>
361  <pre>
362 
363void resize(size_type n, charT c);
364</pre>
365
366  <dl class="function-semantics">
367    <dt><b>Throws:</b> <code>length_error</code> if <code>n &gt;
368    max_size()</code>.</dt>
369  </dl>
370
371  <h4><a name="complexity" id="complexity">Complexity</a></h4>
372
373  <p>Specifying the time and/or space complexity of a function is often not
374  desirable because it over-constrains implementors and is hard to specify
375  correctly. Complexity is thus often best left as a quality of
376  implementation issue.</p>
377
378  <p>A library component, however, can become effectively non-portable if
379  there is wide variation in performance between conforming implementations.
380  Containers are a prime example. In these cases it becomes worthwhile to
381  specify complexity.</p>
382
383  <p>Complexity is often specified in generalized <a href=
384  "http://hissa.nist.gov/dads/HTML/bigOnotation.html">"Big-O"
385  notation</a>.</p>
386
387  <h4><a name="rationale" id="rationale">Rationale</a></h4>
388
389  <p>Specifying the rationale for a function's design or existence can often
390  give users a lot of insight into why a library is designed the way it is.
391  More importantly, it can help prevent "fixing" something that wasn't really
392  broken as the library matures.</p>
393
394  <h2><a name="footnotes" id="footnotes">Footnotes</a></h2>
395
396  <dl>
397    <dt><a class="footnote" name="footnote1" id="footnote1">(1)</a> To save
398    space, items that do not apply to a clause are omitted. For example, if a
399    clause does not specify any requirements, there will be no "Requirements"
400    subclause.</dt>
401
402    <dt><a class="footnote" name="footnote2" id="footnote2">(2)</a> Although
403    in some cases the code is unambiguously the optimum implementation.</dt>
404
405    <dt><a class="footnote" name="footnote3" id="footnote3">(3)</a> To save
406    space, items that do not apply to a class are omitted. For example, if a
407    class does not specify any comparison functions, there will be no
408    "Comparison functions" subclause.</dt>
409
410    <dt><a class="footnote" name="footnote4" id="footnote4">(4)</a> To save
411    space, items that do not apply to a function are omitted. For example, if
412    a function does not specify any precondition, there will be no "Requires"
413    paragraph.</dt>
414  </dl>
415  <hr>
416
417  <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
418  "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
419  height="31" width="88"></a></p>
420
421  <p>Revised
422  <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04
423  December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p>
424
425  <p><i>Copyright &copy; 2001 <a href=
426  "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p>
427
428  <p><i>Distributed under the Boost Software License, Version 1.0. (See
429  accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
430  copy at <a href=
431  "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
432</body>
433</html>
Note: See TracBrowser for help on using the repository browser.