OSDN Git Service

* doc/xml/manual/status_cxx2011.xml: Document that N3189 is missing.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / doc / xml / manual / evolution.xml
1 <section xmlns="http://docbook.org/ns/docbook" version="5.0" 
2          xml:id="appendix.porting.api" xreflabel="api">
3 <?dbhtml filename="api.html"?>
4
5 <info><title>API Evolution and Deprecation History</title>
6   <keywordset>
7     <keyword>ISO C++</keyword>
8     <keyword>api</keyword>
9     <keyword>evolution</keyword>
10     <keyword>deprecation</keyword>
11     <keyword>history</keyword>
12   </keywordset>
13 </info>
14
15
16
17 <para>
18 A list of user-visible changes, in chronological order
19 </para>
20
21 <section xml:id="api.rel_300"><info><title><constant>3.0</constant></title></info>
22
23
24   <para>
25 Extensions moved to <filename class="directory">include/ext</filename>.
26   </para>
27
28 <para>
29 Include files from the SGI/HP sources that pre-date the ISO standard
30 are added. These files are placed into
31 the <filename class="directory">include/backward</filename> directory and a deprecated warning
32 is added that notifies on inclusion (<literal>-Wno-deprecated</literal>
33 deactivates the warning.)
34 </para>
35
36 <para>Deprecated include <filename class="headerfile">backward/strstream</filename> added.</para>
37
38 <para>Removal of include <filename class="headerfile">builtinbuf.h</filename>, <filename class="headerfile">indstream.h</filename>, <filename class="headerfile">parsestream.h</filename>, <filename class="headerfile">PlotFile.h</filename>, <filename class="headerfile">SFile.h</filename>, <filename class="headerfile">stdiostream.h</filename>, and <filename class="headerfile">stream.h</filename>.
39 </para>
40
41
42
43 </section>
44
45 <section xml:id="api.rel_310"><info><title><constant>3.1</constant></title></info>
46
47   <para>
48   </para>
49
50 <para>
51 Extensions from SGI/HP moved from <code>namespace std</code>
52 to <code>namespace __gnu_cxx</code>. As part of this, the following
53 new includes are
54 added: <filename class="headerfile">ext/algorithm</filename>, <filename class="headerfile">ext/functional</filename>, <filename class="headerfile">ext/iterator</filename>, <filename class="headerfile">ext/memory</filename>, and <filename class="headerfile">ext/numeric</filename>.
55 </para>
56
57 <para>
58 Extensions to <code>basic_filebuf</code> introduced: <code>__gnu_cxx::enc_filebuf</code>, and <code>__gnu_cxx::stdio_filebuf</code>.
59 </para>
60
61 <para>
62 Extensions to tree data structures added in <filename class="headerfile">ext/rb_tree</filename>.
63 </para>
64
65 <para>
66 Removal of <filename class="headerfile">ext/tree</filename>, moved to <filename class="headerfile">backward/tree.h</filename>.
67 </para>
68
69 </section>
70
71 <section xml:id="api.rel_320"><info><title><constant>3.2</constant></title></info>
72
73   <para>
74   </para>
75 <para>Symbol versioning introduced for shared library.</para>
76
77 <para>Removal of include <filename class="headerfile">backward/strstream.h</filename>.</para>
78
79 <para>Allocator changes. Change <code>__malloc_alloc</code> to <code>malloc_allocator</code> and <code>__new_alloc</code> to <code>new_allocator</code>. </para>
80
81    <para> For GCC releases from 2.95 through the 3.1 series, defining
82    <literal>__USE_MALLOC</literal> on the gcc command line would change the
83    default allocation strategy to instead use <code> malloc</code> and
84    <function>free</function>. (This same functionality is now spelled <literal>_GLIBCXX_FORCE_NEW</literal>, see
85    <link linkend="manual.intro.using.macros">this page</link>
86    for details.
87    </para>
88
89
90 <para>Error handling in iostreams cleaned up, made consistent. </para>
91
92
93 </section>
94
95 <section xml:id="api.rel_330"><info><title><constant>3.3</constant></title></info>
96
97   <para>
98   </para>
99 </section>
100
101 <section xml:id="api.rel_340"><info><title><constant>3.4</constant></title></info>
102
103   <para>
104   </para>
105 <para>
106 Large file support.
107 </para>
108
109 <para> Extensions for generic characters and <code>char_traits</code> added in <filename class="headerfile">ext/pod_char_traits.h</filename>.
110 </para>
111
112 <para>
113 Support for <code>wchar_t</code> specializations of <code>basic_filebuf</code> enhanced to support <code>UTF-8</code> and <code>Unicode</code>, depending on host. More hosts support basic <code>wchar_t</code> functionality.
114 </para>
115
116 <para>
117 Support for <code>char_traits</code> beyond builtin types.
118 </para>
119
120 <para>
121 Conformant <code>allocator</code> class and usage in containers. As
122 part of this, the following extensions are
123 added: <filename class="headerfile">ext/bitmap_allocator.h</filename>, <filename class="headerfile">ext/debug_allocator.h</filename>, <filename class="headerfile">ext/mt_allocator.h</filename>, <filename class="headerfile">ext/malloc_allocator.h</filename>,<filename class="headerfile">ext/new_allocator.h</filename>, <filename class="headerfile">ext/pool_allocator.h</filename>.
124 </para>
125
126 <para>
127 This is a change from all previous versions, and may require
128 source-level changes due to allocator-related changes to structures
129 names and template parameters, filenames, and file locations. Some,
130 like <code>__simple_alloc, __allocator, __alloc, </code> and <code>
131 _Alloc_traits</code> have been removed.
132 </para>
133
134 <para>Default behavior of <code>std::allocator</code> has changed.</para>
135
136 <para>
137    Previous versions prior to 3.4 cache allocations in a memory
138    pool, instead of passing through to call the global allocation
139    operators (i.e., <classname>__gnu_cxx::pool_allocator</classname>).  More
140    recent versions default to the
141    simpler <classname>__gnu_cxx::new_allocator</classname>.
142 </para>
143
144 <para> Previously, all allocators were written to the SGI
145    style, and all STL containers expected this interface. This
146    interface had a traits class called <code>_Alloc_traits</code> that
147    attempted to provide more information for compile-time allocation
148    selection and optimization. This traits class had another allocator
149    wrapper, <code>__simple_alloc&lt;T,A&gt;</code>, which was a
150    wrapper around another allocator, A, which itself is an allocator
151    for instances of T. But wait, there's more:
152    <code>__allocator&lt;T,A&gt;</code> is another adapter.  Many of
153    the provided allocator classes were SGI style: such classes can be
154    changed to a conforming interface with this wrapper:
155    <code>__allocator&lt;T, __alloc&gt;</code> is thus the same as
156    <code>allocator&lt;T&gt;</code>.
157    </para>
158
159    <para> The class <classname>allocator</classname> used the typedef
160    <type>__alloc</type> to select an underlying allocator that
161    satisfied memory allocation requests. The selection of this
162    underlying allocator was not user-configurable.
163    </para>
164
165 <table frame="all">
166 <title>Extension Allocators</title>
167
168 <tgroup cols="4" align="left" colsep="1" rowsep="1">
169 <colspec colname="c1"/>
170 <colspec colname="c2"/>
171 <colspec colname="c3"/>
172 <colspec colname="c4"/>
173
174   <thead>
175     <row>
176       <entry>Allocator (3.4)</entry>
177       <entry>Header (3.4)</entry>
178       <entry>Allocator (3.[0-3])</entry>
179       <entry>Header (3.[0-3])</entry>
180     </row>
181   </thead>
182
183   <tbody>
184   <row>
185     <entry><classname>__gnu_cxx::new_allocator&lt;T&gt;</classname></entry>
186     <entry><filename class="headerfile">ext/new_allocator.h</filename></entry>
187     <entry><classname>std::__new_alloc</classname></entry>
188     <entry><filename class="headerfile">memory</filename></entry>
189   </row>
190   <row>
191     <entry><classname>__gnu_cxx::malloc_allocator&lt;T&gt;</classname></entry>
192     <entry><filename class="headerfile">ext/malloc_allocator.h</filename></entry>
193     <entry><classname>std::__malloc_alloc_template&lt;int&gt;</classname></entry>
194     <entry><filename class="headerfile">memory</filename></entry>
195   </row>
196   <row>
197     <entry><classname>__gnu_cxx::debug_allocator&lt;T&gt;</classname></entry>
198     <entry><filename class="headerfile">ext/debug_allocator.h</filename></entry>
199     <entry><classname>std::debug_alloc&lt;T&gt;</classname></entry>
200     <entry><filename class="headerfile">memory</filename></entry>
201   </row>
202   <row>
203     <entry><classname>__gnu_cxx::__pool_alloc&lt;T&gt;</classname></entry>
204     <entry><filename class="headerfile">ext/pool_allocator.h</filename></entry>
205     <entry><classname>std::__default_alloc_template&lt;bool,int&gt;</classname></entry>
206     <entry><filename class="headerfile">memory</filename></entry>
207   </row>
208   <row>
209     <entry><classname>__gnu_cxx::__mt_alloc&lt;T&gt;</classname></entry>
210     <entry><filename class="headerfile">ext/mt_allocator.h</filename></entry>
211     <entry> </entry>
212     <entry> </entry>
213   </row>
214   <row>
215     <entry><classname>__gnu_cxx::bitmap_allocator&lt;T&gt;</classname></entry>
216     <entry><filename class="headerfile">ext/bitmap_allocator.h</filename></entry>
217     <entry> </entry>
218     <entry> </entry>
219   </row>
220   </tbody>
221 </tgroup>
222 </table>
223
224    <para> Releases after gcc-3.4 have continued to add to the collection
225    of available allocators. All of these new allocators are
226    standard-style. The following table includes details, along with
227    the first released version of GCC that included the extension allocator.
228    </para>
229
230 <table frame="all">
231 <title>Extension Allocators Continued</title>
232
233 <tgroup cols="3" align="left" colsep="1" rowsep="1">
234 <colspec colname="c1"/>
235 <colspec colname="c2"/>
236 <colspec colname="c3"/>
237
238 <thead>
239   <row>
240     <entry>Allocator</entry>
241     <entry>Include</entry>
242     <entry>Version</entry>
243   </row>
244 </thead>
245
246 <tbody>
247   <row>
248     <entry><classname>__gnu_cxx::array_allocator&lt;T&gt;</classname></entry>
249     <entry><filename class="headerfile">ext/array_allocator.h</filename></entry>
250     <entry>4.0.0</entry>
251   </row>
252   <row>
253     <entry><classname>__gnu_cxx::throw_allocator&lt;T&gt;</classname></entry>
254     <entry><filename class="headerfile">ext/throw_allocator.h</filename></entry>
255     <entry>4.2.0</entry>
256   </row>
257 </tbody>
258 </tgroup>
259 </table>
260
261
262 <para>
263 Debug mode first appears.
264 </para>
265
266 <para>
267 Precompiled header support <acronym>PCH</acronym> support.
268 </para>
269
270 <para>
271 Macro guard for changed, from <literal>_GLIBCPP_</literal> to <literal>_GLIBCXX_</literal>.
272 </para>
273
274 <para>
275 Extension <filename class="headerfile">ext/stdio_sync_filebuf.h</filename> added.
276 </para>
277
278 <para>
279 Extension <filename class="headerfile">ext/demangle.h</filename> added.
280 </para>
281
282
283 </section>
284
285 <section xml:id="api.rel_400"><info><title><constant>4.0</constant></title></info>
286
287   <para>
288   </para>
289 <para>
290 TR1 features first appear.
291 </para>
292
293 <para>
294 Extension allocator <filename class="headerfile">ext/array_allocator.h</filename> added.
295 </para>
296
297 <para>
298 Extension <code>codecvt</code> specializations moved to <filename class="headerfile">ext/codecvt_specializations.h</filename>.
299 </para>
300
301 <para>
302 Removal of <filename class="headerfile">ext/demangle.h</filename>.
303 </para>
304
305
306 </section>
307
308 <section xml:id="api.rel_410"><info><title><constant>4.1</constant></title></info>
309
310   <para>
311   </para>
312
313
314 <para>
315 Removal of <filename class="headerfile">cassert</filename> from all standard headers: now has to be explicitly included for <code>std::assert</code> calls.
316 </para>
317
318 <para> Extensions for policy-based data structures first added. New includes,
319 types, namespace <code>pb_assoc</code>.
320 </para>
321
322
323
324 <para> Extensions for typelists added in <filename class="headerfile">ext/typelist.h</filename>.
325 </para>
326
327 <para> Extension for policy-based <code>basic_string</code> first added: <code>__gnu_cxx::__versa_string</code> in <filename class="headerfile">ext/vstring.h</filename>.
328 </para>
329
330 </section>
331
332 <section xml:id="api.rel_420"><info><title><constant>4.2</constant></title></info>
333
334   <para>
335   </para>
336
337
338 <para> Default visibility attributes applied to <code>namespace std</code>. Support for <code>-fvisibility</code>.
339 </para>
340
341 <para>TR1 <filename class="headerfile">random</filename>, <filename class="headerfile">complex</filename>, and C compatibility headers added.</para>
342
343 <para> Extensions for concurrent programming consolidated
344 into <filename class="headerfile">ext/concurrence.h</filename> and <filename class="headerfile">ext/atomicity.h</filename>,
345 including change of namespace to <code>__gnu_cxx</code> in some
346 cases. Added types
347 include <code>_Lock_policy</code>, <code>__concurrence_lock_error</code>, <code>__concurrence_unlock_error</code>, <code>__mutex</code>, <code>__scoped_lock</code>.</para>
348
349 <para> Extensions for type traits consolidated
350 into <filename class="headerfile">ext/type_traits.h</filename>. Additional traits are added
351 (<code>__conditional_type</code>, <code>__enable_if</code>, others.)
352 </para>
353
354 <para> Extensions for policy-based data structures revised. New includes,
355 types, namespace moved to <code>__pb_ds</code>.
356 </para>
357
358 <para> Extensions for debug mode modified: now nested in <code>namespace
359 std::__debug</code> and extensions in <code>namespace
360 __gnu_cxx::__debug</code>.</para>
361
362 <para> Extensions added: <filename class="headerfile">ext/typelist.h</filename>
363 and <filename class="headerfile">ext/throw_allocator.h</filename>.
364 </para>
365
366 </section>
367
368 <section xml:id="api.rel_430"><info><title><constant>4.3</constant></title></info>
369
370   <para>
371   </para>
372
373
374 <para>
375 C++0X features first appear.
376 </para>
377
378 <para>TR1 <filename class="headerfile">regex</filename> and <filename class="headerfile">cmath</filename>'s mathematical special function added.
379 </para>
380
381 <para>
382 Backward include edit.
383 </para>
384 <itemizedlist>
385   <listitem>
386     <para>Removed</para>
387   <para>
388 <filename class="headerfile">algobase.h</filename> <filename class="headerfile">algo.h</filename> <filename class="headerfile">alloc.h</filename> <filename class="headerfile">bvector.h</filename> <filename class="headerfile">complex.h</filename>
389 <filename class="headerfile">defalloc.h</filename> <filename class="headerfile">deque.h</filename> <filename class="headerfile">fstream.h</filename> <filename class="headerfile">function.h</filename> <filename class="headerfile">hash_map.h</filename> <filename class="headerfile">hash_set.h</filename>
390 <filename class="headerfile">hashtable.h</filename> <filename class="headerfile">heap.h</filename> <filename class="headerfile">iomanip.h</filename> <filename class="headerfile">iostream.h</filename> <filename class="headerfile">istream.h</filename> <filename class="headerfile">iterator.h</filename>
391 <filename class="headerfile">list.h</filename> <filename class="headerfile">map.h</filename> <filename class="headerfile">multimap.h</filename> <filename class="headerfile">multiset.h</filename> <filename class="headerfile">new.h</filename> <filename class="headerfile">ostream.h</filename> <filename class="headerfile">pair.h</filename> <filename class="headerfile">queue.h</filename> <filename class="headerfile">rope.h</filename> <filename class="headerfile">set.h</filename> <filename class="headerfile">slist.h</filename> <filename class="headerfile">stack.h</filename> <filename class="headerfile">streambuf.h</filename> <filename class="headerfile">stream.h</filename> <filename class="headerfile">tempbuf.h</filename>
392 <filename class="headerfile">tree.h</filename> <filename class="headerfile">vector.h</filename>
393   </para>
394   </listitem>
395   <listitem>
396     <para>Added</para>
397   <para>
398   <filename class="headerfile">hash_map</filename> and <filename class="headerfile">hash_set</filename>
399   </para>
400   </listitem>
401   <listitem>
402     <para>Added in C++11</para>
403   <para>
404     <filename class="headerfile">auto_ptr.h</filename> and <filename class="headerfile">binders.h</filename>
405   </para>
406   </listitem>
407
408 </itemizedlist>
409
410 <para>
411 Header dependency streamlining.
412 </para>
413
414 <itemizedlist>
415   <listitem><para><filename class="headerfile">algorithm</filename> no longer includes <filename class="headerfile">climits</filename>, <filename class="headerfile">cstring</filename>, or <filename class="headerfile">iosfwd</filename> </para></listitem>
416   <listitem><para><filename class="headerfile">bitset</filename> no longer includes <filename class="headerfile">istream</filename> or <filename class="headerfile">ostream</filename>, adds <filename class="headerfile">iosfwd</filename> </para></listitem>
417   <listitem><para><filename class="headerfile">functional</filename> no longer includes <filename class="headerfile">cstddef</filename></para></listitem>
418   <listitem><para><filename class="headerfile">iomanip</filename> no longer includes <filename class="headerfile">istream</filename>, <filename class="headerfile">istream</filename>, or <filename class="headerfile">functional</filename>, adds <filename class="headerfile">ioswd</filename> </para></listitem>
419   <listitem><para><filename class="headerfile">numeric</filename> no longer includes <filename class="headerfile">iterator</filename></para></listitem>
420   <listitem><para><filename class="headerfile">string</filename> no longer includes <filename class="headerfile">algorithm</filename> or <filename class="headerfile">memory</filename></para></listitem>
421
422   <listitem><para><filename class="headerfile">valarray</filename> no longer includes <filename class="headerfile">numeric</filename> or <filename class="headerfile">cstdlib</filename></para></listitem>
423   <listitem><para><filename class="headerfile">tr1/hashtable</filename> no longer includes <filename class="headerfile">memory</filename> or <filename class="headerfile">functional</filename></para></listitem>
424   <listitem><para><filename class="headerfile">tr1/memory</filename> no longer includes <filename class="headerfile">algorithm</filename></para></listitem>
425   <listitem><para><filename class="headerfile">tr1/random</filename> no longer includes <filename class="headerfile">algorithm</filename> or <filename class="headerfile">fstream</filename></para></listitem>
426 </itemizedlist>
427
428 <para>
429 Debug mode for <filename class="headerfile">unordered_map</filename> and <filename class="headerfile">unordered_set</filename>.
430 </para>
431
432 <para>
433 Parallel mode first appears.
434 </para>
435
436 <para>Variadic template implementations of items in <filename class="headerfile">tuple</filename> and
437     <filename class="headerfile">functional</filename>.
438 </para>
439
440 <para>Default <code>what</code> implementations give more elaborate
441     exception strings for <code>bad_cast</code>,
442     <code>bad_typeid</code>, <code>bad_exception</code>, and
443     <code>bad_alloc</code>.
444 </para>
445
446 <para>
447 PCH binary files no longer installed. Instead, the source files are installed.
448 </para>
449
450 <para>
451 Namespace pb_ds moved to __gnu_pb_ds.
452 </para>
453
454 </section>
455
456
457 <section xml:id="api.rel_440"><info><title><constant>4.4</constant></title></info>
458
459   <para>
460   </para>
461
462 <para>
463 C++0X features.
464 </para>
465
466 <itemizedlist>
467 <listitem>
468   <para>
469     Added.
470   </para>
471   <para>
472     <filename class="headerfile">atomic</filename>,
473     <filename class="headerfile">chrono</filename>,
474     <filename class="headerfile">condition_variable</filename>,
475     <filename class="headerfile">forward_list</filename>,
476     <filename class="headerfile">initializer_list</filename>,
477     <filename class="headerfile">mutex</filename>,
478     <filename class="headerfile">ratio</filename>,
479     <filename class="headerfile">thread</filename>
480   </para>
481 </listitem>
482
483 <listitem>
484   <para>
485     Updated and improved.
486   </para>
487   <para>
488     <filename class="headerfile">algorithm</filename>,
489     <filename class="headerfile">system_error</filename>,
490     <filename class="headerfile">type_traits</filename>
491   </para>
492 </listitem>
493
494 <listitem>
495   <para>
496     Use of the GNU extension namespace association converted to inline namespaces.
497   </para>
498 </listitem>
499
500 <listitem>
501   <para>
502     Preliminary support for <classname>initializer_list</classname>
503     and defaulted and deleted constructors in container classes.
504   </para>
505 </listitem>
506
507 <listitem>
508   <para>
509     <classname>unique_ptr</classname>.
510   </para>
511 </listitem>
512
513 <listitem>
514   <para>
515     Support for new character types <type>char16_t</type>
516     and <type>char32_t</type> added
517     to <classname>char_traits</classname>, <classname>basic_string</classname>, <classname>numeric_limits</classname>,
518     and assorted compile-time type traits.
519   </para>
520 </listitem>
521
522 <listitem>
523   <para>
524     Support for string conversions <function>to_string</function>
525     and <function>to_wstring</function>.
526   </para>
527 </listitem>
528
529 <listitem>
530   <para>
531     Member functions taking string arguments were added to iostreams
532     including <classname>basic_filebuf</classname>, <classname>basic_ofstream</classname>,
533     and <classname>basic_ifstream</classname>.
534   </para>
535 </listitem>
536
537 <listitem>
538   <para>
539     Exception propagation support,
540     including <classname>exception_ptr</classname>, <function>current_exception</function>, <function>copy_exception</function>,
541     and <function>rethrow_exception</function>.
542   </para>
543 </listitem>
544 </itemizedlist>
545
546
547   <para>
548 Uglification of <literal>try</literal> to <literal>__try</literal>
549 and <literal>catch</literal> to <literal>__catch</literal>.
550   </para>
551
552   <para>
553 Audit of internal mutex usage, conversion to functions returning static
554 local mutex.
555   </para>
556
557 <para> Extensions
558 added: <filename class="headerfile">ext/pointer.h</filename>
559 and <filename class="headerfile">ext/extptr_allocator.h</filename>. Support
560 for non-standard pointer types has been added
561 to <classname>vector</classname>
562 and <classname>forward_list</classname>.
563 </para>
564 </section>
565
566 <section xml:id="api.rel_450"><info><title><constant>4.5</constant></title></info>
567
568   <para>
569   </para>
570
571 <para>
572 C++0X features.
573 </para>
574
575 <itemizedlist>
576 <listitem>
577   <para>
578     Added.
579   </para>
580   <para>
581     <filename class="headerfile">functional</filename>,
582     <filename class="headerfile">future</filename>,
583     <filename class="headerfile">random</filename>
584   </para>
585 </listitem>
586
587 <listitem>
588   <para>
589     Updated and improved.
590   </para>
591   <para>
592     <filename class="headerfile">atomic</filename>,
593     <filename class="headerfile">system_error</filename>,
594     <filename class="headerfile">type_traits</filename>
595   </para>
596 </listitem>
597
598 <listitem>
599   <para>
600     Add support for explicit operators and standard layout types.
601   </para>
602 </listitem>
603 </itemizedlist>
604
605 <para>
606 Profile mode first appears.
607 </para>
608
609 <para>
610 Support for decimal floating-point arithmetic, including <classname>decimal32</classname>, <classname>decimal64</classname>, and <classname>decimal128</classname>.
611 </para>
612
613 <para>
614 Python pretty-printers are added for use with appropriately-advanced versions of <command>gdb</command>.
615 </para>
616
617 <para>
618 Audit for application of function attributes notrow, const, pure, and noreturn.
619 </para>
620
621 <para>
622 The default behavior for comparing typeinfo names changed, so
623 in <filename class="headerfile">typeinfo</filename>, <literal>__GXX_MERGED_TYPEINFO_NAMES</literal>
624 now defaults to zero.
625 </para>
626
627 <para> Extensions modified: <filename class="headerfile">ext/throw_allocator.h</filename>.
628 </para>
629 </section>
630
631 </section>