OSDN Git Service

db54b0865cab5b2cd1708db7b4a66e998dea3e5d
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / docs / html / explanations.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
2 <html>
3 <head>
4    <meta NAME="AUTHOR" CONTENT="pme@gcc.gnu.org (Phil Edwards)">
5    <meta NAME="KEYWORDS" CONTENT="libstdc++, libstdc++-v3, GCC, g++">
6    <meta NAME="DESCRIPTION" CONTENT="Explanatory notes about libstdc++-v3.">
7    <meta NAME="GENERATOR" CONTENT="vi and eight fingers">
8    <title>Explanatory notes about libstdc++-v3 design</title>
9 <link REL=StyleSheet HREF="lib3styles.css">
10 </head>
11 <body>
12
13 <h1 CLASS="centered"><a name="top">Explanatory notes about libstdc++-v3
14 design</a></h1>
15
16 <p>The latest version of this document is always available at
17    <a href="http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html">
18    http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html</a>.
19 </p>
20
21 <p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
22
23
24 <!-- ####################################################### -->
25 <hr>
26 <a name="cstdio"><h3>&quot;I/O packages&quot;, <code>--enable-cstdio</code></h3></a>
27 <p>In addition to all the nifty things which C++ can do for I/O, its library
28    also includes all of the I/O capabilites of C.  Making them work together
29    can be a challenge, not only
30    <a href="27_io/howto.html#8">for the programmer</a> but for the
31    implementors as well.
32 </p>
33 <p>There are two ways to do a C++ library:  the cool way, and the easy way.
34    More specifically, the cool-but-easy-to-get-wrong way, and the
35    easy-to-guarantee-correct-behavior way.  For 3.0, the easy way is used.
36 </p>
37 <p>Choosing 'stdio' is the easy way.  It builds a C++ library which forwards
38    all operations to the C library.  Many of the C++ I/O functions are
39    specified in the standard 'as if' they called a certain C function; the
40    easiest way to get it correct is to actually call that function.  The
41    disadvantage is that the C++ code will run slower (fortunately, the layer
42    is thin).
43 </p>
44 <p>Choosing 'libio' is the cool way; it allows C++ and C to share some
45    buffers.  It's disabled because of tricky synchronization issues.  Other
46    cool ways (various methods of sharing resources between C and C++
47    facilities, instead of layering) are possible.  This approach can speed
48    up I/O significantly.
49 </p>
50 <p>Other packages are possible.  For a new package, a header must be
51    written to provide types like streamsize (usually just a typedef), as
52    well as some internal types like<code> __c_file_type </code> and
53    <code> __c_lock </code> (for the stdio case, these are FILE (as in
54    &quot;FILE*&quot;) and a simple POSIX mutex, respectively).  An
55    interface class called <code> __basic_file </code> must also be filled in;
56    as an example, for the stdio case, these member functions are all
57    inline calles to fread, fwrite, etc.
58 </p>
59 <p>Return <a href="#top">to the top of the page</a> or
60    <a href="http://gcc.gnu.org/libstdc++/">to the homepage</a>.
61 </p>
62
63
64 <!-- ####################################################### -->
65
66 <hr>
67 <P CLASS="fineprint"><em>
68 See <a href="17_intro/license.html">license.html</a> for copying conditions.
69 Comments and suggestions are welcome, and may be sent to
70 <a href="mailto:libstdc++@gcc.gnu.org">the mailing list</a>.
71 </em></p>
72
73
74 </body>
75 </html>