|
|
1.1 root 1: \input texinfo @c -*- Texinfo -*-
2: @setfilename reno-1.info
3:
4: @ifinfo
5: @format
6: START-INFO-DIR-ENTRY
7: * Reno 1: (reno-1). The GNU C++ Renovation Project, Phase 1.
8: END-INFO-DIR-ENTRY
9: @end format
10: @end ifinfo
11:
12: @ifinfo
13: Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
14:
15: Permission is granted to make and distribute verbatim copies of
16: this manual provided the copyright notice and this permission notice
17: are preserved on all copies.
18:
19: @ignore
20: Permission is granted to process this file through TeX and print the
21: results, provided the printed document carries a copying permission
22: notice identical to this one except for the removal of this paragraph
23: (this paragraph not being relevant to the printed manual).
24:
25: @end ignore
26:
27: Permission is granted to copy and distribute modified versions of this
28: manual under the conditions for verbatim copying, provided also that
29: the entire resulting derived work is distributed under the terms of a
30: permission notice identical to this one.
31:
32: Permission is granted to copy and distribute translations of this manual
33: into another language, under the above conditions for modified versions.
34: @end ifinfo
35:
36: @setchapternewpage odd
37: @settitle GNU C++ Renovation Project
38: @c @smallbook
39:
40: @titlepage
41: @finalout
42: @title GNU C++ Renovation Project
43: @subtitle Phase 1.3
44: @author Brendan Kehoe, Jason Merrill,
45: @author Mike Stump, Michael Tiemann
46: @page
47:
48: Edited March, 1994 by Roland Pesch (@code{pesch@@cygnus.com})
49: @vskip 0pt plus 1filll
50: Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
51:
52: Permission is granted to make and distribute verbatim copies of
53: this manual provided the copyright notice and this permission notice
54: are preserved on all copies.
55:
56: @ignore
57: Permission is granted to process this file through Tex and print the
58: results, provided the printed document carries copying permission
59: notice identical to this one except for the removal of this paragraph
60: (this paragraph not being relevant to the printed manual).
61: @end ignore
62:
63: Permission is granted to copy and distribute modified versions of this
64: manual under the conditions for verbatim copying, provided also that
65: the entire resulting derived work is distributed under the terms of a
66: permission notice identical to this one.
67:
68: Permission is granted to copy and distribute translations of this manual
69: into another language, under the above conditions for modified versions.
70: @end titlepage
71:
72: @ifinfo
73: @node Top
74: @top @sc{gnu} C++ Renovation Project
75:
76: This file describes the goals of the @sc{gnu} C++ Renovation Project,
77: and its accomplishments to date (as of Phase 1.3).
78:
79: It also discusses the remaining divergences from @sc{gnu} C++, and how the
80: name encoding in @sc{gnu} C++ differs from the sample encoding in
81: @cite{The Annotated C++ Reference Manual}.
82: @c This is not a good place to introduce the acronym ARM because it's
83: @c info-only.
84:
85: @menu
86: * Introduction:: What is the GNU C++ Renovation Project?
87: * Changes:: Summary of changes since previous GNU C++ releases.
88: * Plans:: Plans for Reno-2.
89: * Templates:: The template implementation.
90: * ANSI:: GNU C++ conformance to ANSI C++.
91: * Encoding:: Name encoding in GNU C++.
92: @end menu
93:
94: @end ifinfo
95:
96: @node Introduction
97: @chapter Introduction
98:
99: As you may remember, @sc{gnu} C++ was the first native-code C++
100: compiler available under Unix (December 1987). In November 1988, it was
101: judged superior to the AT&T compiler in a Unix World review. In 1990 it
102: won a Sun Observer ``Best-Of'' award. But now, with new requirements
103: coming out of the @sc{ansi} C++ committee and a growing backlog of bugs, it's
104: clear that @sc{gnu} C++ needs an overhaul.
105:
106: The C++ language has been under development since 1982. It has
107: evolved significantly since its original incarnation (C with Classes),
108: addressing many commercial needs and incorporating many lessons
109: learned as more and more people started using ``object-oriented''
110: programming techniques. In 1989, the first X3J16 committee meeting
111: was held in Washington DC; in the interest of users, C++ was going to
112: be standardized.
113:
114: As C++ has become more popular, more demands have been placed on its
115: compilers. Some compilers are up to the demands, others are not.
116: @sc{gnu} C++ was used to prototype several features which have since
117: been incorporated into the standard, most notably exception handling.
118: While @sc{gnu} C++ has been an excellent experimental vehicle, it did
119: not have the resources that AT&T, Borland, or Microsoft have at their
120: disposal.
121:
122: We believe that @sc{gnu} C++ is an important compiler, providing users with
123: many of the features that have made @sc{gnu} C so popular: fast compilation,
124: good error messages, innovative features, and full sources that may be
125: freely redistributed. The purpose of this overhaul, dubbed the @var{@sc{gnu}
126: C++ Renovation Project}, is to take advantage of the functionality that
127: @sc{gnu} C++ offers today, to strengthen its base technology, and put it in a
128: position to remain---as other @sc{gnu} software currently is---the technical
129: leader in the field.
130:
131: This release represents the latest phase of work in strengthening the
132: compiler on a variety of points. It includes many months of
133: work concentrated on fixing many of the more egregious bugs that
134: presented themselves in the compiler recently.
135: @ignore
136: @c FIXME-- update?
137: Nearly 85% of all bugs reported in the period of February to September
138: of 1992 were fixed as part of the work in the first phase.
139: @end ignore
140: In the coming months, we hope to continue expanding and enhancing the
141: quality and dependability of the industry's only freely redistributable
142: C++ compiler.
143:
144: @node Changes
145: @chapter Changes in Behavior in @sc{gnu} C++
146:
147: The @sc{gnu} C++ compiler continues to improve and change. A major goal
148: of our work has been to continue to bring the compiler into compliance
149: with the draft @sc{ansi} C++ standard, and with @cite{The Annotated C++
150: Reference Manual} (the @sc{arm}). This section outlines most of the
151: user-noticeable changes that might be encountered during the normal
152: course of use.
153:
154: @menu
155: * Summary of Phase 1.3::
156: * Major changes::
157: * New features::
158: * Enhancements and bug fixes::
159: * Problems with debugging::
160: @end menu
161:
162: @node Summary of Phase 1.3
163: @section Summary of Changes in Phase 1.3
164:
165: The bulk of this note discusses the cumulative effects of the @sc{gnu} C++
166: Renovation Project to date. The work during its most recent phase (1.3)
167: had these major effects:
168:
169: @itemize @bullet
170: @item The standard compiler driver @code{g++} is now the faster compiled
171: version, rather than a shell script.
172:
173: @item Nested types work much better; notably, nesting is no longer
174: restricted to nine levels.
175:
176: @item Better @sc{arm} conformance on member access control.
177:
178: @item The compiler now always generates default assignment operators
179: (@samp{operator =}), copy constructors (@samp{X::X(X&)}), and default
180: constructors (@samp{X::X()}) whenever they are required.
181:
182: @item The new draft @sc{ansi} standard keyword @code{mutable} is supported.
183:
184: @item @samp{-fansi-overloading} is the default, to comply better with
185: the @sc{arm} (at some cost in compatibility to earlier versions of @sc{gnu} C++).
186:
187: @item More informative error messages.
188:
189: @item System include files are automatically treated as if they were
190: wrapped in @samp{extern "C" @{ @}}.
191:
192: @item The new option @samp{-falt-external-templates} provides alternate
193: template instantiation semantics.
194:
195: @item Operator declarations are now checked more strictly.
196:
197: @item You can now use template type arguments in the template parameter list.
198:
199: @item You can call the destructor for any type.
200:
201: @item The compiler source code is better organized.
202:
203: @item You can specify where to instantiate template definitions explicitly.
204: @end itemize
205:
206: Much of the work in Phase 1.3 went to elimination of known bugs, as well
207: as the major items above.
208:
209: During the span of Phase 1.3, there were also two changes associated
210: with the compiler that, while not specifically part of the C++
211: Renovation project, may be of interest:
212:
213: @itemize @bullet
214: @item @code{gcov}, a code coverage tool for @sc{gnu cc}, is now available
215: from Cygnus Support. (@code{gcov} is free software, but the @sc{fsf} has not
216: yet accepted it.) @xref{Gcov,, @code{gcov}: a Test Coverage Program,
217: gcc.info, Using GNU CC}, for more information (in Cygnus releases of
218: that manual).
219:
220: @item @sc{gnu} C++ now supports @dfn{signatures}, a language extension to
221: provide more flexibility in abstract type definitions. @xref{C++
222: Signatures,, Type Abstraction using Signatures, gcc.info, Using GNU CC}.
223: @end itemize
224:
225: @node Major changes
226: @section Major Changes
227:
228: This release includes four wholesale rewrites of certain areas of
229: compiler functionality:
230:
231: @enumerate 1
232: @item Argument matching. @sc{gnu} C++ is more compliant with the rules
233: described in Chapter 13, ``Overloading'', of the @sc{arm}. This behavior is
234: the default, though you can specify it explicitly with
235: @samp{-fansi-overloading}. For compatibility with earlier releases of
236: @sc{gnu} C++, specify @samp{-fno-ansi-overloading}; this makes the compiler
237: behave as it used to with respect to argument matching and name overloading.
238:
239: @item Default constructors/destructors. Section 12.8 of the @sc{arm}, ``Copying
240: Class Objects'', and Section 12.1, ``Constructors'', state that a
241: compiler must declare such default functions if the user does not
242: specify them. @sc{gnu} C++ now declares, and generates when necessary,
243: the defaults for constructors and destructors you might omit. In
244: particular, assignment operators (@samp{operator =}) behave the same way
245: whether you define them, or whether the compiler generates them by
246: default; taking the address of the default @samp{operator =} is now
247: guaranteed to work. Default copy constructors (@samp{X::X(X&)}) now
248: function correctly, rather than calling the copy assignment operator for
249: the base class. Finally, constructors (@samp{X::X()}), as well as
250: assignment operators and copy constructors, are now available whenever
251: they are required.
252:
253: @c XXX This may be taken out eventually...
254: @item Binary incompatibility. There are no new binary incompatibilities
255: in Phase 1.3, but Phase 1.2 introduced two binary incompatibilities with
256: earlier releases. First, the functionality of @samp{operator
257: new} and @samp{operator delete} changed. Name encoding
258: (``mangling'') of virtual table names changed as well. Libraries
259: built with versions of the compiler earlier than Phase 1.2 must be
260: compiled with the new compiler. (This includes the Cygnus Q2
261: progressive release and the FSF 2.4.5 release.)
262:
263: @item New @code{g++} driver.
264: A new binary @code{g++} compiler driver replaces the shell script.
265: The new driver executes faster.
266: @end enumerate
267:
268: @node New features
269: @section New features
270:
271: @itemize @bullet
272: @item
273: The compiler warns when a class contains only private constructors
274: or destructors, and has no friends. At the request of some of our
275: customers, we have added a new option, @samp{-Wctor-dtor-privacy} (on by
276: default), and its negation, @samp{-Wno-ctor-dtor-privacy}, to control
277: the emission of this warning. If, for example, you are working towards
278: making your code compile warning-free, you can use @w{@samp{-Wall
279: -Wno-ctor-dtor-privacy}} to find the most common warnings.
280:
281: @item
282: There is now a mechanism which controls exactly when templates are
283: expanded, so that you can reduce memory usage and program size and also
284: instantiate them exactly once. You can control this mechanism with the
285: option @samp{-fexternal-templates} and its corresponding negation
286: @samp{-fno-external-templates}. Without this feature, space consumed by
287: template instantiations can grow unacceptably in large-scale projects
288: with many different source files. The default is
289: @samp{-fno-external-templates}.
290:
291: You do not need to use the @samp{-fexternal-templates} option when
292: compiling a file that does not define and instantiate templates used in
293: other files, even if those files @emph{are} compiled with
294: @samp{-fexternal-templates}. The only side effect is an increase in
295: object size for each file that was compiled without
296: @samp{-fexternal-templates}.
297:
298: When your code is compiled with @samp{-fexternal-templates}, all
299: template instantiations are external; this requires that the templates
300: be under the control of @samp{#pragma interface} and @samp{#pragma
301: implementation}. All instantiations that will be needed should be in
302: the implementation file; you can do this with a @code{typedef} that
303: references the instantiation needed. Conversely, when you compile using
304: the option @samp{-fno-external-templates}, all template instantiations are
305: explicitly internal.
306:
307: @samp{-fexternal-templates} also allows you to finally separate class
308: template function definitions from their declarations, thus speeding up
309: compilation times for every file that includes the template declaration.
310: Now you can have tens or even hundreds of lines in template
311: declarations, and thousands or tens of thousands of lines in template
312: definitions, with the definitions only going through the compiler once
313: instead of once for each source file. It is important to note that you
314: must remember to externally instantiate @emph{all} templates that are
315: used from template declarations in interface files. If you forget to do
316: this, unresolved externals will occur.
317:
318: In the example below, the object file generated (@file{example.o}) will
319: contain the global instantiation for @samp{Stack<int>}. If other types
320: of @samp{Stack} are needed, they can be added to @file{example.cc} or
321: placed in a new file, in the same spirit as @file{example.cc}.
322:
323: @code{foo.h}:
324: @smallexample
325: @group
326: #pragma interface "foo.h"
327: template<class T>
328: class Stack @{
329: static int statc;
330: static T statc2;
331: Stack() @{ @}
332: virtual ~Stack() @{ @}
333: int bar();
334: @};
335: @end group
336: @end smallexample
337:
338: @code{example.cc}:
339: @smallexample
340: @group
341: #pragma implementation "foo.h"
342: #include "foo.h"
343:
344: typedef Stack<int> t;
345: int Stack<int>::statc;
346: int Stack<int>::statc2;
347: int Stack<int>::bar() @{ @}
348: @end group
349: @end smallexample
350:
351: Note that using @samp{-fexternal-templates} does not reduce memory usage
352: from completely different instantiations (@samp{Stack<Name>} vs.
353: @samp{Stack<Net_Connection>}), but only collapses different occurrences
354: of @samp{Stack<Name>} so that only one @samp{Stack<Name>} is generated.
355:
356: @samp{-falt-external-templates} selects a slight variation in the
357: semantics described above (incidentally, you need not specify both
358: options; @samp{-falt-external-templates} implies
359: @samp{-fexternal-templates}).
360:
361: With @samp{-fexternal-templates}, the compiler emits a definition in the
362: implementation file that includes the header definition, @emph{even if}
363: instantiation is triggered from a @emph{different} implementation file
364: (e.g. with a template that uses another template).
365:
366: With @samp{-falt-external-templates}, the definition always goes in the
367: implementation file that triggers instantiation.
368:
369: For instance, with these two header files---
370:
371: @example
372: @exdent @file{a.h}:
373: #pragma interface
374: template <class T> class A @{ @dots{} @};
375:
376: @exdent @file{b.h}:
377: #pragma interface
378: class B @{ @dots{} @};
379: void f (A<B>);
380: @end example
381:
382: Under @samp{-fexternal-templates}, the definition of @samp{A<B>} ends up
383: in the implementation file that includes @file{a.h}. Under
384: @samp{-falt-external-templates}, the same definition ends up in the
385: implementation file that includes @file{b.h}.
386:
387: @item
388: You can control explicitly where a template is instantiated, without
389: having to @emph{use} the template to get an instantiation.
390:
391: To instantiate a class template explicitly, write @samp{template
392: class @var{name}<paramvals>}, where @var{paramvals} is a list of values
393: for the template parameters. For example, you might write
394:
395: @example
396: template class A<int>
397: @end example
398:
399: Similarly, to instantiate a function template explicitly, write
400: @samp{template @var{fnsign}} where @var{fnsign} is the particular
401: function signature you need. For example, you might write
402:
403: @example
404: template void foo (int, int)
405: @end example
406:
407: This syntax for explicit template instantiation agrees with recent
408: extensions to the draft @sc{ansi} standard.
409:
410: @item
411: The compiler's actions on @sc{ansi}-related warnings and errors have
412: been further enhanced. The @samp{-pedantic-errors} option produces
413: error messages in a number of new situations: using @code{return} in a
414: non-@code{void} function (one returning a value); declaring a local
415: variable that shadows a parameter (e.g., the function takes an argument
416: @samp{a}, and has a local variable @samp{a}); and use of the @samp{asm}
417: keyword. Finally, the compiler by default now issues a warning when
418: converting from an @code{int} to an enumerated type. This is likely to
419: cause many new warnings in code that hadn't triggered them before. For
420: example, when you compile this code,
421:
422: @smallexample
423: @group
424: enum boolean @{ false, true @};
425: void
426: f ()
427: @{
428: boolean x;
429:
430: x = 1; //@i{assigning an @code{int} to an @code{enum} now triggers a warning}
431: @}
432: @end group
433: @end smallexample
434:
435: @noindent
436: you should see the warning ``@code{anachronistic conversion from integer
437: type to enumeral type `boolean'}''. Instead of assigning the value 1,
438: assign the original enumerated value @samp{true}.
439: @end itemize
440:
441: @node Enhancements and bug fixes
442: @section Enhancements and bug fixes
443:
444: @itemize @bullet
445: @cindex nested types in template parameters
446: @item
447: You can now use nested types in a template parameter list, even if the nested
448: type is defined within the same class that attempts to use the template.
449: For example, given a template @code{list}, the following now works:
450:
451: @smallexample
452: struct glyph @{
453: @dots{}
454: struct stroke @{ @dots{} @};
455: list<stroke> l;
456: @dots{}
457: @}
458: @end smallexample
459:
460: @cindex function pointers vs template parameters
461: @item
462: Function pointers now work in template parameter lists. For
463: example, you might want to instantiate a parameterized @code{list} class
464: in terms of a pointer to a function like this:
465:
466: @smallexample
467: list<int (*)(int, void *)> fnlist;
468: @end smallexample
469:
470: @item
471: @c FIXME! Really no limit? Jason said "deeper than 9" now OK...
472: Nested types are now handled correctly. In particular, there is no
473: longer a limit to how deeply you can nest type definitions.
474:
475: @item
476: @sc{gnu} C++ now conforms to the specifications in Chapter 11 of the
477: @sc{arm}, ``Member Access Control''.
478:
479: @item
480: The @sc{ansi} C++ committee has introduced a new keyword @code{mutable}.
481: @sc{gnu} C++ supports it. Use @code{mutable} to specify that some
482: particular members of a @code{const} class are @emph{not} constant. For
483: example, you can use this to include a cache in a data structure that
484: otherwise represents a read-only database.
485:
486: @item
487: Error messages now explicitly specify the declaration, type, or
488: expression that contains an error.
489:
490: @item
491: To avoid copying and editing all system include files during @sc{gnu}
492: C++ installation, the compiler now automatically recognizes system
493: include files as C language definitions, as if they were wrapped in
494: @samp{extern "C" @{ @dots{} @}}.
495:
496: @item
497: The compiler checks operator declarations more strictly. For example,
498: you may no longer declare an @samp{operator +} with three arguments.
499:
500: @item
501: You can now use template type arguments in the same template
502: parameter list where the type argument is specified (as well as in the
503: template body). For example, you may write
504:
505: @example
506: template <class T, T t> class A @{ @dots{} @};
507: @end example
508:
509: @item
510: Destructors are now available for all types, even built-in ones; for
511: example, you can call @samp{int::~int}. (Destructors for types like
512: @code{int} do not actually do anything, but their existence provides a
513: level of generality that permits smooth template expansion in more
514: cases.)
515:
516: @item
517: Enumerated types declared inside a class are now handled correctly.
518:
519: @item
520: An argument list for a function may not use an initializer list for its default
521: value. For example, @w{@samp{void foo ( T x = @{ 1, 2 @} )}} is not permitted.
522:
523: @item
524: A significant amount of work went into improving the ability of the
525: compiler to act accurately on multiple inheritance and virtual
526: functions. Virtual function dispatch has been enhanced as well.
527:
528: @item
529: The warning concerning a virtual inheritance environment with a
530: non-virtual destructor has been disabled, since it is not clear that
531: such a warning is warranted.
532:
533: @item
534: Until exception handling is fully implemented in the Reno-2 release, use
535: of the identifiers @samp{catch}, @samp{throw}, or @samp{try} results
536: in the warning:
537:
538: @smallexample
539: t.C:1: warning: `catch', `throw', and `try'
540: are all C++ reserved words
541: @end smallexample
542:
543: @item
544: When giving a warning or error concerning initialization of a member in a
545: class, the compiler gives the name of the member if it has one.
546:
547: @item
548: Detecting friendship between classes is more accurately checked.
549:
550: @item
551: The syntaxes of @w{@samp{#pragma implementation "file.h"}} and
552: @samp{#pragma interface} are now more strictly controlled. The compiler
553: notices (and warns) when any text follows @file{file.h} in the
554: implementation pragma, or follows the word @samp{interface}. Any such
555: text is otherwise ignored.
556:
557: @item
558: Trying to declare a template on a variable or type is now considered an
559: error, not an unimplemented feature.
560:
561: @item
562: When an error occurs involving a template, the compiler attempts to
563: tell you at which point of instantiation the error occurred, in
564: addition to noting the line in the template declaration which had the
565: actual error.
566:
567: @item
568: The symbol names for function templates in the resulting assembly file
569: are now encoded according to the arguments, rather than just being
570: emitted as, for example, two definitions of a function @samp{foo}.
571:
572: @item
573: Template member functions that are declared @code{static} no longer
574: receive a @code{this} pointer.
575:
576: @item
577: Case labels are no longer allowed to have commas to make up their
578: expressions.
579:
580: @item
581: Warnings concerning the shift count of a left or right shift now tell
582: you if it was a @samp{left} or @samp{right} shift.
583:
584: @item
585: The compiler now warns when a decimal constant is so large that it
586: becomes @code{unsigned}.
587:
588: @item
589: Union initializers which are raw constructors are now handled properly.
590:
591: @item
592: The compiler no longer gives incorrect errors when initializing a
593: union with an empty initializer list.
594:
595: @item
596: Anonymous unions are now correctly used when nested inside a class.
597:
598: @item
599: Anonymous unions declared as static class members are now handled
600: properly.
601:
602: @item
603: The compiler now notices when a field in a class is declared both as
604: a type and a non-type.
605:
606: @item
607: The compiler now warns when a user-defined function shadows a
608: built-in function, rather than emitting an error.
609:
610: @item
611: A conflict between two function declarations now produces an error
612: regardless of their language context.
613:
614: @item
615: Duplicate definitions of variables with @samp{extern "C"} linkage are no
616: longer considered in error. (Note in C++ linkage---the default---you may
617: not have more than one definition of a variable.)
618:
619: @item
620: Referencing a label that is not defined in any function is now an error.
621:
622: @item
623: The syntax for pointers to methods has been improved; there are still
624: some minor bugs, but a number of cases should now be accepted by the
625: compiler.
626:
627: @item
628: In error messages, arguments are now numbered starting at 1, instead of
629: 0. Therefore, in the function @samp{void foo (int a, int b)}, the
630: argument @samp{a} is argument 1, and @samp{b} is argument 2. There is
631: no longer an argument 0.
632:
633: @item
634: The tag for an enumerator, rather than its value, used as a default
635: argument is now shown in all error messages. For example, @w{@samp{void
636: foo (enum x (= true))}} is shown instead of @w{@samp{void foo (enum x (=
637: 1))}}.
638:
639: @item
640: The @samp{__asm__} keyword is now accepted by the C++ front-end.
641:
642: @item
643: Expressions of the form @samp{foo->~Class()} are now handled properly.
644:
645: @item
646: The compiler now gives better warnings for situations which result in
647: integer overflows (e.g., in storage sizes, enumerators, unary
648: expressions, etc).
649:
650: @item
651: @code{unsigned} bitfields are now promoted to @code{signed int} if the
652: field isn't as wide as an @code{int}.
653:
654: @item
655: Declaration and usage of prefix and postfix @samp{operator ++} and
656: @samp{operator --} are now handled correctly. For example,
657:
658: @smallexample
659: @group
660: class foo
661: @{
662: public:
663: operator ++ ();
664: operator ++ (int);
665: operator -- ();
666: operator -- (int);
667: @};
668:
669: void
670: f (foo *f)
671: @{
672: f++; // @i{call @code{f->operator++(int)}}
673: ++f; // @i{call @code{f->operator++()}}
674: f--; // @i{call @code{f->operator++(int)}}
675: --f; // @i{call @code{f->operator++()}}
676: @}
677: @end group
678: @end smallexample
679:
680: @item
681: In accordance with @sc{arm} section 10.1.1, ambiguities and dominance are now
682: handled properly. The rules described in section 10.1.1 are now fully
683: implemented.
684:
685: @end itemize
686:
687: @node Problems with debugging
688: @section Problems with debugging
689:
690: Two problems remain with regard to debugging:
691:
692: @itemize @bullet
693: @item
694: Debugging of anonymous structures on the IBM RS/6000 host is incorrect.
695:
696: @item
697: Symbol table size is overly large due to redundant symbol information;
698: this can make @code{gdb} coredump under certain circumstances. This
699: problem is not host-specific.
700: @end itemize
701:
702: @node Plans
703: @chapter Plans for Reno-2
704:
705: The overall goal for the second phase of the @sc{gnu} C++ Renovation
706: Project is to bring @sc{gnu} C++ to a new level of reliability, quality,
707: and competitiveness. As particular elements of this strategy, we intend
708: to:
709:
710: @enumerate 0
711: @item
712: Fully implement @sc{ansi} exception handling.
713:
714: @item
715: With the exception handling, add Runtime Type Identification
716: (@sc{rtti}), if the @sc{ansi} committee adopts it into the standard.
717:
718: @item
719: Bring the compiler into closer compliance with the @sc{arm} and the draft
720: @sc{ansi} standard, and document what points in the @sc{arm} we do not yet comply,
721: or agree, with.
722:
723: @item
724: Add further support for the @sc{dwarf} debugging format.
725:
726: @item
727: Finish the work to make the compiler compliant with @sc{arm} Section 12.6.2,
728: initializing base classes in declaration order, rather than in the order
729: that you specify them in a @var{mem-initializer} list.
730:
731: @item
732: Perform a full coverage analysis on the compiler, and weed out unused
733: code, for a gain in performance and a reduction in the size of the compiler.
734:
735: @item
736: Further improve the multiple inheritance implementation in the
737: compiler to make it cleaner and more complete.
738: @end enumerate
739:
740: @noindent
741: As always, we encourage you to make suggestions and ask questions about
742: @sc{gnu} C++ as a whole, so we can be sure that the end of this project
743: will bring a compiler that everyone will find essential for C++ and will
744: meet the needs of the world's C++ community.
745:
746: @include templates.texi
747:
748: @include gpcompare.texi
749:
750: @contents
751:
752: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.