Go forward to Conventions.
Go backward to Trouble.
Go up to Top.

GNU C++ library aims, objectives, and limitations
*************************************************

   The GNU C++ library, libg++ is an attempt to provide a variety of C++
programming tools and other support to GNU C++ programmers.

   Differences in distribution policy are only part of the difference
between libg++.a and AT&T libC.a.  libg++ is not intended to be an
exact clone of libC. For one, libg++ contains bits of code that depend
on special features of GNU g++ that are either different or lacking in
the AT&T version, including slightly different inlining and overloading
strategies, dynamic local arrays, etc.  All of these differences are
minor. For example, while the AT&T and GNU stream classes are
implemented in very different ways, the vast majority of C++ programs
compile and run under either version with no visible difference.
Additionally, all g++-specific constructs are conditionally compiled;
The library is designed to be compatible with any 2.0 C++ compiler.

   libg++ has also contained workarounds for some limitations in g++:
both g++ and libg++ are still undergoing rapid development and
testing--a task that is helped tremendously by the feedback of active
users.  This manual is also still under development; it has some
catching up to do to include all the facilities now in the library.

   libg++ is not the only freely available source of C++ class
libraries.  Some notable alternative sources are Interviews and NIHCL.
(InterViews has been available on the X-windows X11 tapes and also from
interviews.stanford.edu.  NIHCL is available by anonymous ftp from GNU
archives (such as the pub directory of prep.ai.mit.edu), although it is
not supported by the FSF - and needs some work before it will work with
g++.)

   As every C++ programmer knows, the design (moreso than the
implementation) of a C++ class library is something of a challenge.
Part of the reason is that C++ supports two, partially incompatible,
styles of object-oriented programming - The "forest" approach,
involving a collection of free-standing classes that can be mixed and
matched, versus the completely hierarchical (smalltalk style) approach,
in which all classes are derived from a common ancestor.  Of course,
both styles have advantages and disadvantages.  So far, libg++ has
adopted the "forest" approach.  Keith Gorlen's OOPS library adopts the
hierarchical approach, and may be an attractive alternative for C++
programmers who prefer this style.

   Currently (and/or in the near future) libg++ provides support for a
few basic kinds of classes:

   The first kind of support provides an interface between C++ programs
and C libraries. This includes basic header files (like `stdio.h') as
well as things like the File and stream classes. Other classes that
interface to other aspects of C libraries (like those that maintain
environmental information) are in various stages of development; all
will undergo implementation modifications when the forthcoming GNU libc
library is released.

   The second kind of support contains general-purpose basic classes
that transparently manage variable-sized objects on the freestore.  This
includes Obstacks, multiple-precision Integers and Rationals, arbitrary
length Strings, BitSets, and BitStrings.

   Third, several classes and utilities of common interest (e.g.,
Complex numbers) are provided.

   Fourth, a set of pseudo-generic prototype files are available as a
mechanism for generating common container classes. These are described
in more detail in the introduction to container prototypes. Currently,
only a textual substitution mechanism is available for generic class
creation.