2006-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
[official-gcc.git] / libstdc++-v3 / docs / html / 17_intro / howto.html
blob631e58fe0b944b12dfc3f64341a6beb302eab07a
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html
3 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
8 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9 <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
10 <meta name="KEYWORDS" content="HOWTO, libstdc++, gcc, g++, libg++, STL" />
11 <meta name="DESCRIPTION" content="HOWTO for libstdc++ chapter 17." />
12 <meta name="GENERATOR" content="vi and eight fingers" />
13 <title>libstdc++-v3 HOWTO: Chapter 17: Library Introduction</title>
14 <link rel="StyleSheet" href="../lib3styles.css" type="text/css" />
15 <link rel="Start" href="../documentation.html" type="text/html"
16 title="GNU C++ Standard Library" />
17 <link rel="Next" href="../18_support/howto.html" type="text/html"
18 title="Library Support" />
19 <link rel="Copyright" href="license.html" type="text/html" />
20 <link rel="Help" href="../faq/index.html" type="text/html" title="F.A.Q." />
21 </head>
22 <body>
24 <h1 class="centered"><a name="top">Chapter 17: Library Introduction</a></h1>
26 <p>Chapter 17 is actually a list of definitions and descriptions used
27 in the following chapters of the Standard when describing the actual
28 library. Here, we use &quot;Introduction&quot; as an introduction
29 to the <em>GNU implementation of</em> the ISO Standard C++ Library.
30 </p>
33 <!-- ####################################################### -->
34 <hr />
35 <h1>Contents</h1>
36 <ul>
37 <li><a href="#2">The Standard C++ header files</a></li>
38 <li><a href="#3">The Standard C++ library and multithreading</a></li>
39 <li><a href="#4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></li>
40 <li><a href="porting-howto.html">Porting HOWTO</a></li>
41 <li><a href="#5">Behavior specific to libstdc++-v3</a></li>
42 <li><a href="#6">Preprocessor macros controlling the library</a></li>
43 </ul>
45 <hr />
47 <!-- ####################################################### -->
49 <h2><a name="2">The Standard C++ header files</a></h2>
50 <p>The Standard C++ Library specifies 50 header files that must be
51 available to all hosted implementations. Actually, the word
52 &quot;files&quot; is a misnomer, since the contents of the headers
53 don't necessarily have to be in any kind of external file. The
54 only rule is that when you <code>#include</code> a certain header, the
55 contents of that header, as defined by the Standard, become
56 available to you, no matter how.
57 </p>
58 <p>The names of the headers can be easily seen in
59 <a href="headers_cc.txt"><code>testsuite/17_intro/headers.cc</code></a>,
60 which is a small testbed we use to make certain that the headers
61 all compile and run.
62 </p>
64 <hr />
65 <h2><a name="3">The Standard C++ library and multithreading</a></h2>
66 <p>This section discusses issues surrounding the proper compilation
67 of multithreaded applications which use the Standard C++
68 library. This information is GCC-specific since the C++
69 standard does not address matters of multithreaded applications.
70 Unless explicitly prefaced, all information in this section is
71 current as of the GCC 3.0 release and all later point releases.
72 </p>
73 <p>Earlier GCC releases had a somewhat different approach to
74 threading configuration and proper compilation. Before GCC 3.0,
75 configuration of the threading model was dictated by compiler
76 command-line options and macros (both of which were somewhat
77 thread-implementation and port-specific). There were no
78 guarantees related to being able to link code compiled with one
79 set of options and macro setting with another set. For GCC 3.0,
80 configuration of the threading model used with libraries and
81 user-code is performed when GCC is configured and built using
82 the --enable-threads and --disable-threads options. The ABI is
83 stable for symbol name-mangling and limited functional
84 compatibility exists between code compiled under different
85 threading models.
86 </p>
87 <p>All normal disclaimers aside, multithreaded C++ application are
88 only supported when libstdc++ and all user code was built with
89 compilers which report (via <code> gcc/g++ -v </code>) the same thread
90 model and that model is not <em>single</em>. As long as your
91 final application is actually single-threaded, then it should be
92 safe to mix user code built with a thread model of
93 <em>single</em> with a libstdc++ and other C++ libraries built
94 with another thread model useful on the platform. Other mixes
95 may or may not work but are not considered supported. (Thus, if
96 you distribute a shared C++ library in binary form only, it may
97 be best to compile it with a GCC configured with
98 --enable-threads for maximal interchangeability and usefulness
99 with a user population that may have built GCC with either
100 --enable-threads or --disable-threads.)
101 </p>
102 <p>When you link a multithreaded application, you will probably
103 need to add a library or flag to g++. This is a very
104 non-standardized area of GCC across ports. Some ports support a
105 special flag (the spelling isn't even standardized yet) to add
106 all required macros to a compilation (if any such flags are
107 required then you must provide the flag for all compilations not
108 just linking) and link-library additions and/or replacements at
109 link time. The documentation is weak. Here is a quick summary
110 to display how ad hoc this is: On Solaris, both -pthreads and
111 -threads (with subtly different meanings) are honored. On OSF,
112 -pthread and -threads (with subtly different meanings) are
113 honored. On Linux/i386, -pthread is honored. On FreeBSD,
114 -pthread is honored. Some other ports use other switches.
115 AFAIK, none of this is properly documented anywhere other than
116 in ``gcc -dumpspecs'' (look at lib and cpp entries).
117 </p>
118 <p>See <a href="../faq/index.html#3">FAQ</a> (general overview), <a
119 href="../23_containers/howto.html#3">23</a> (containers), and <a
120 href="../27_io/howto.html#9">27</a> (I/O) for more information.
121 </p>
122 <p>The libstdc++-v3 library (unlike libstdc++-v2, all of it, not
123 just the STL) has been designed so that multithreaded
124 applications using it may be written. The first problem is
125 finding a <em>fast</em> method of implementation portable to all
126 platforms. Due to historical reasons, some of the library is
127 written against per-CPU-architecture spinlocks and other parts
128 against the gthr.h abstraction layer which is provided by gcc.
129 A minor problem that pops up every so often is different
130 interpretations of what &quot;thread-safe&quot; means for a
131 library (not a general program). We currently use the <a
132 href="http://www.sgi.com/tech/stl/thread_safety.html">same
133 definition that SGI</a> uses for their STL subset. However, the
134 exception for read-only containers only applies to the STL
135 components.
136 </p>
137 <p>Here is a small link farm to threads (no pun) in the mail archives
138 that discuss the threading problem. Each link is to the first
139 relevant message in the thread; from there you can use
140 &quot;Thread Next&quot; to move down the thread. This farm is in
141 latest-to-oldest order.
142 </p>
143 <ul>
144 <li>Our threading expert Loren gives a breakdown of
145 <a href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
146 six situations involving threads</a> for the 3.0 release series.</li>
147 <li><a href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
148 This message</a> inspired a recent updating of issues with threading
149 and the SGI STL library. It also contains some example
150 POSIX-multithreaded STL code.</li>
151 </ul>
152 <p> (A large selection of links to older messages has been removed; many
153 of the messages from 1999 were lost in a disk crash, and the few
154 people with access to the backup tapes have been too swamped with work
155 to restore them. Many of the points have been superseded anyhow.)
156 </p>
157 <p>This section will be updated as new and interesting issues come
158 to light.
159 </p>
160 <p>Return <a href="#top">to top of page</a> or
161 <a href="../faq/index.html">to the FAQ</a>.
162 </p>
164 <hr />
165 <h2><a name="4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></h2>
166 <p>The new-style headers are fully supported in libstdc++-v3. The compiler
167 itself fully supports namespaces, including <code>std::</code>.
168 </p>
169 <p>For those of you new to ISO C++98, no, that isn't a typo, the headers
170 really have new names. Marshall Cline's C++ FAQ Lite has a good
171 explanation in
172 <a href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item [27.4]</a>.
173 </p>
174 <p>Return <a href="#top">to top of page</a> or
175 <a href="../faq/index.html">to the FAQ</a>.
176 </p>
178 <hr />
179 <h2><a name="5">Behavior specific to libstdc++-v3</a></h2>
180 <p>The ISO standard defines the following phrase:
181 </p>
182 <blockquote><dl>
183 <dt><code>[1.3.5] implementation-defined behavior</code></dt>
184 <dd>behavior, for a well-formed program construct and correct data, that
185 depends on the implementation <strong>and that each implementation
186 shall document</strong>.
187 </dd>
188 </dl></blockquote>
189 <p>We do so here, for the C++ library only. Behavior of the compiler,
190 linker, runtime loader, and other elements of &quot;the
191 implementation&quot; are documented elsewhere. Everything listed in
192 Annex B, Implementation Qualities, are also part of the compiler, not
193 the library.
194 </p>
195 <p>For each entry, we give the section number of the standard, when
196 applicable. This list is probably incomplet and inkorrekt.
197 </p>
198 <p><strong>[1.9]/11 #3</strong> If <code>isatty(3)</code> is true, then
199 interactive stream support is implied.
200 </p>
201 <p><strong>[17.4.4.5]</strong> Non-reentrant functions are probably best
202 discussed in the various sections on multithreading (see above).
203 </p>
204 <!-- [17.4.4.8]/3 says any function that doesn't have an exception-spec
205 can throw whatever we want; see also its footnote. Let's list those
206 in the sections where the function itself occurs.
208 <p><strong>[18.1]/4</strong> The type of <code>NULL</code> is described
209 <a href="../18_support/howto.html#1">here</a>.
210 </p>
211 <p><strong>[18.3]/8</strong> Even though it's listed in the library
212 sections, libstdc++-v3 has zero control over what the cleanup code hands
213 back to the runtime loader. Talk to the compiler people. :-)
214 </p>
215 <p><strong>[18.4.2.1]/5</strong> (bad_alloc),<br />
216 <strong>[18.5.2]/5</strong> (bad_cast),<br />
217 <strong>[18.5.3]/5</strong> (bad_typeid),<br />
218 <strong>[18.6.1]/8</strong> (exception),<br />
219 <strong>[18.6.2.1]/5</strong> (bad_exception): The <code>what()</code>
220 member function of class <code>std::exception</code>, and these other
221 classes publicly derived from it, simply returns the name of the
222 class. But they are the <em>mangled</em> names; you will need to call
223 <code>c++filt</code> and pass the names as command-line parameters to
224 demangle them, or call a
225 <a href="../18_support/howto.html#5">runtime demangler function</a>.
226 (The classes in <code>&lt;stdexcept&gt;</code> have constructors which
227 require an argument to use later for <code>what()</code> calls, so the
228 problem of <code>what()</code>'s value does not arise in most
229 user-defined exceptions.)
230 </p>
231 <p><strong>[18.5.1]/7</strong> The return value of
232 <code>std::type_info::name()</code> is the mangled type name (see the
233 previous entry for more).
234 </p>
235 <p><strong>[20.1.5]/5</strong> <em>&quot;Implementors are encouraged to
236 supply libraries that can accept allocators that encapsulate more
237 general memory models and that support non-equal instances. In such
238 implementations, any requirements imposed on allocators by containers
239 beyond those requirements that appear in Table 32, and the semantics
240 of containers and algorithms when allocator instances compare
241 non-equal, are implementation-defined.&quot;</em> As yet we don't
242 have any allocators which compare non-equal, so we can't describe how
243 they behave.
244 </p>
245 <p><strong>[21.1.3.1]/3,4</strong>,<br />
246 <strong>[21.1.3.2]/2</strong>,<br />
247 <strong>[23.*]'s foo::iterator</strong>,<br />
248 <strong>[27.*]'s foo::*_type</strong>,<br />
249 <strong>others...</strong>
250 Nope, these types are called implementation-defined because you
251 shouldn't be taking advantage of their underlying types. Listing them
252 here would defeat the purpose. :-)
253 </p>
254 <p><strong>[21.1.3.1]/5</strong> I don't really know about the mbstate_t
255 stuff... see the <a href="../22_locale/howto.html">chapter 22 notes</a>
256 for what does exist.
257 </p>
258 <p><strong>[22.*]</strong> Anything and everything we have on locale
259 implementation will be described
260 <a href="../22_locale/howto.html">over here</a>.
261 </p>
262 <p><strong>[26.2.8]/9</strong> I have no idea what
263 <code>complex&lt;T&gt;</code>'s pow(0,0) returns.
264 </p>
265 <p><strong>[27.4.2.4]/2</strong> Calling
266 <code>std::ios_base::sync_with_stdio</code> after I/O has already been
267 performed on the standard stream objects will
268 flush the buffers, and <!-- this line might go away -->
269 destroy and recreate the underlying buffer instances. Whether or not
270 the previously-written I/O is destroyed in this process depends mostly
271 on the --enable-libio choice: for stdio, if the written data is
272 already in the stdio buffer, the data may be completely safe!
273 </p>
274 <p><strong>[27.6.1.1.2]</strong>,<br />
275 <strong>[27.6.2.3]</strong> The I/O sentry ctor and dtor can perform
276 additional work than the minimum required. We are not currently taking
277 advantage of this yet.
278 </p>
279 <p><strong>[27.7.1.3]/16</strong>,<br />
280 <strong>[27.8.1.4]/10</strong>
281 The effects of <code>pubsetbuf/setbuf</code> are described
282 <a href="../27_io/howto.html#2">in this chapter</a>.
283 </p>
284 <p><strong>[27.8.1.4]/16</strong> Calling <code>fstream::sync</code> when
285 a get area exists will... whatever <code>fflush()</code> does, I think.
286 </p>
287 <p>Return <a href="#top">to top of page</a> or
288 <a href="../faq/index.html">to the FAQ</a>.
289 </p>
291 <hr />
292 <h2><a name="6">Preprocessor macros controlling the library</a></h2>
293 <p>Some of the semantics of the libstdc++-v3 implementation are
294 controlled by preprocessor macros, both during build/installation and
295 during compilation of user code. Many of these choices are made when
296 the library is built and installed (actually, during
297 <a href="../configopts.html">the configuration step</a>, with the
298 various --enable/--disable choices being translated to #define/#undef).
299 </p>
300 <p>All library macros begin with <code>_GLIBCPP_</code> in earlier
301 versions, and <code>_GLIBCXX_</code> in later versions. The fact that
302 these symbols start with a leading underscore should give you a clue
303 that (by default) they aren't meant to be changed by the user. :-)
304 </p>
305 <p>These macros are all gathered in the file <code>c++config.h</code>,
306 which is generated during installation. <strong>You must assume that
307 these macros cannot be redefined by your own code</strong>, unless we
308 document otherwise here. Some of the choices control code which has
309 already been compiled (i.e., libstdc++.a/.so). If you explicitly
310 #define or #undef these macros, the <em>headers</em> may see different
311 code paths, but the <em>libraries</em> which you link against will not.
312 If you want to experiment with different values, you must change the
313 config headers before building/installing the library.
314 </p>
315 <p>Below are macros which, for 3.1 and later, you may change yourself,
316 in your own code with #define/#undef or with -D/-U compiler flags.
317 The default state of the symbol is listed. &quot;Configurable&quot;
318 (or &quot;Not configurable&quot;) means that the symbol is initially
319 chosen (or not) based on --enable/--disable options at configure time.
320 For 3.1 through 3.3, the prefixes are <code>_GLIBCPP_</code>.
321 </p>
322 <dl>
323 <dt><code>_GLIBCXX_DEPRECATED</code></dt>
324 <dd>Undefined by default. Not configurable. Turning this on enables
325 older ARM-style iostreams code, and other anachronisms. This may be
326 useful in updating old C++ programs which no longer meet the
327 requirements of the language.
328 </dd>
329 <!--
330 Can this actually be turned off and still produce a working lib? Must
331 check. -pme
332 No, it can't. Hmmm. -pme
333 <dt><code>_GLIBCPP_RESOLVE_LIB_DEFECTS</code></dt>
334 <dd>Defined by default. Not configurable. The library follows
335 corrections and updates from the ISO committee, see
336 <a href="../faq/index.html#5_2">here</a> and
337 <a href="../ext/howto.html#5">here</a> for more on this feature.
338 If you have code which depends on the first version of the standard,
339 you might try undefining this macro.
340 </dd>
342 <dt><code>_GLIBCXX_CONCEPT_CHECKS</code></dt>
343 <dd>Undefined by default. Configurable. When defined, performs
344 compile-time checking on certain template instantiations to detect
345 violations of the requirements of the standard. This is described
346 in more detail <a href="../19_diagnostics/howto.html#3">here</a>.
347 </dd>
348 <dt><code>_GLIBCXX_DEBUG</code></dt>
349 <dd>Undefined by default. Configurable. When defined, compiles
350 user code using the <a href="../debug.html#safe">libstdc++ debug
351 mode</a>.
352 </dd>
353 <dt><code>_GLIBCXX_DEBUG_PEDANTIC</code></dt>
354 <dd>Undefined by default. Configurable. When defined while
355 compiling with the <a href="../debug.html#safe">libstdc++ debug
356 mode</a>, makes the debug mode extremely picky by making the use
357 of libstdc++ extensions and libstdc++-specific behavior into
358 errors.
359 </dd>
360 <!--
361 <dt><code></code></dt>
362 <dd>
363 </dd>
365 </dl>
366 <p>Return <a href="#top">to top of page</a> or
367 <a href="../faq/index.html">to the FAQ</a>.
368 </p>
372 <!-- ####################################################### -->
374 <hr />
375 <p class="fineprint"><em>
376 See <a href="license.html">license.html</a> for copying conditions.
377 Comments and suggestions are welcome, and may be sent to
378 <a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
379 </em></p>
382 </body>
383 </html>