Software Preservation Group of the Computer History Museum

C++ libraries

If you know of other early C++ libraries, please contact Paul McJones (paul at mcjones dot org).

Contents

Chronology

1980
task system for C with Classes - Stroustrup
1983
task system for early C++ - Stroustrup
1984
complex - Stroustrup
1984
streams - Stroustrup
1985
task system ported to 6 processor system - Shopiro
1986
OOPS - Gorlen
1987
NIHCL - Gorlen
1987
task system for C++ - Stroustrup and Shopiro
1987
libg++ - Lea
1987
InterViews - Linton
1988
Associative Arrays - Koenig
1989
iostreams - Jerry Schwarz
1989
AT&T Tools and Reusable Components - various
1989
LEDA - Nher and Mehlhorn
1990
Booch Components - Booch
1990
COOL - Fontana, Neath, Oren, and Meyer
1990
GNU gperf - Schmidt
 
1991
GNU iostream - reimplementation of [most of] AT&T iostreams by Bothner
1993-1994
STL - Stepanov and Lee

General purpose

AT&T

Associative arrays - Andrew Koenig

Array algorithms - Alexander Stepanov

Other

NIHCL

"The NIH Class Library implements abstract data types that have been designed to simplify object-oriented programming using C++. It contains generally useful data types, such as String, Date, and Time, and it provides a set of classes similar to the Smalltalk-80 collection classes, including OrderedCltn (indexed arrays), LinkedList (singly linked lists), Set (hash tables), and Dictionary (associative arrays). Classes Process, Scheduler, Semaphore, and SharedQueue implement multiprogramming with coroutines. The set of Vector classes and a handful of others such as Random (random number generator) and Range (range of integers) assist in various kinds of arithmetic and mathematical problems. [Gorlen et al., Data abstraction and object-oriented programming in C++]

Source code

Documentation

Papers

libg++

"The GNU C++ library (libg++) was among the first widely available general-purpose C++ class libraries. Some classes were designed and implemented as early as 1985 (originally in support of other efforts). The library was made available in 1987. I was the primary original developer. Several others have contributed ideas and code. Contributors include Dirk Grunwald, Doug Schmidt, Kurt Baudendistel, Marc Shapiro, Eric Newton, Michael Tiemann, Richard Stallman, and Per Bothner. Cygnus Support currently maintains and distributes the library on behalf of the Free Software Foundation (FSF). Also, hundreds of users have contributed improvements, fixes, suggestions, clarifications, and bug reports. While it has been ported to other platforms, libg++ is normally used on Unix systems in conjunction with the GNU C++ ( g++) compiler. ...

The basic structure of libg++ remains almost unchanged from that described in a 1988 Usenix C++ conference paper. It contains:

  1. Classes representing strings, numbers, and other black box values, along with similar Abstract Data Type (ADT) classes representing sets, sequences, maps, etc.
  2. IO Streams and related support provided by any minimal C++ library.
  3. Storage allocation classes and utilities.
  4. ``Lightweight'' veneers organizing functionality commonly supported in C libraries.
  5. A few other uncategorizable classes and sample applications."
[Doug Lea, The GNU C++ Library]

Source code

Documentation

Papers

COOL - C++ Object-Oriented Library

COOL was created during 1989-1990 at Texas Instruments by a team including Mary Fontana, Martin Neath, and Lamott Oren. It was intended as a way to port applications prototyped on Lisp Machines to c++, so they can be delivered on more cost-effective platforms. Since it was developed before C++ templates, exceptions, and runtime type information was available, they built their own versions of these features using a preprocessor.

Source code

Documentation

Papers

GNU iostream

GNU iostream is a reimplementation of (most of) the iostream library from AT&T C++ release 2.0 and of the ANSI X3J16 library draft, which was based on the AT&T design.

"Per Bothner wrote most of the iostream library, but some portions have their origins elsewhere in the free software community. Heinz Seidl wrote the IO manipulators. The floating-point conversion software is by David M. Gay of AT&T. Some code was derived from parts of BSD 4.4, which was written at the University of California, Berkeley." [Per Bothner, The GNU C++ Iostream Library]

Source code

GNU gperf

"The GNU gperf perfect hash function generator utility was originally written in GNU C++ by Douglas C. Schmidt. It is now also available in a highly-portable 'old-style' C version. The general idea for the perfect hash function generator was inspired by Keith Bostic's al- gorithm written in C, and distributed to net.sources around 1984. The current program is a heavily modified, enhanced, and extended implementation of Keith's basic idea, created at the University of California, Irvine." [Douglas C. Schmidt, User's Guide for the GNU GPERF Utility]

Source code

Papers

C++ Booch Components

Papers

LEDA

Source code

Papers

STL

The Standard Template Library, or STL, became an integral part of the C++ standard library. The standards proposal was based on work by Alexander Stepanov and Meng Lee at HP Laboratories. An earlier version of the algorithms in STL were released in 1989 as the Array_alg component of the AT&T Tools and Reusable Components. Array_alg in turn derives (with only cosmetic changes) from Stepanov's 1987 gclib.

Source code

Documentation

Papers

Simulation

CPPS

Papers

SILO

Source code

User interface

InterViews

"We have implemented an object-oriented user interface package, called InterViews, that supports the composition of a graphical user interface from a set of interactive objects. The base class for interactive objects, called an interactor, and base class for composite objects, called a scene, define a protocol for combining interactive behaviors. Subclasses of scene define common types of composition: a box tiles its components, a tray allows components to overlap or constrain each other’s placement, a deck stacks its components so that only one is visible, a frame adds a border, and a viewport shows part of a component. Predefined components include menus, scrollers, buttons, and text editors. InterViews also includes classes for structured text and graphics. InterViews is written in C++ and runs on top of the X window system." [Linton et al. InterViews: A C++ Graphical Interface Toolkit]

Source code

Documentation

Papers

Iris

Papers

ET++

"ET++ is a homogeneous object-oriented class library integrating user interface building blocks, basic data structures, and support for object input/output with high level application framework components. The main goals in designing ET++ have been the desire to substantially ease the building of highly interactive applications with consistent user interfaces following the well known desktop metaphor, and to combine all ET++ classes into a seamless system structure. Experience has proven that writing a complex application based on ET++ can result in a reduction in source code size of 80% and more compared to the same software written on top of a conventional graphic toolbox. ET++ is implemented in C++ and runs under UNIX™ and either SunWindows™, NeWS™, or the X11 window system. This paper discusses the design and implementation of ET++. It also reports key experience from working with C++ and ET++. A description of code browsing and object inspection tools for ET++ is included as well. ET++ is available in the public domain.

The ET++ project was partially supported by the Swiss National Science Foundation." [Weinand et al. Design and Implementation of ET++, a Seamless Object-Oriented Application Framework]

Source code

Documentation

The following two documents are from the doc subdirectory of et.tar.Z, above.

Garbage collection

DEC CCgc

Source code

Papers

Boehm-Demers-Weiser conservative garbage collector

Other