C++ Libraries
General-purpose and special-purpose libraries written in C++
If you know of other early C++ libraries, please contact Paul McJones (paul at mcjones dot org).
Contents
- Chronology
- General purpose
- AT&T, NIHCL, libg++, COOL, GNU iostream, GNU gperf, C++ Booch Components, LEDA, STL
- Simulation
- CPPS, SILO
- User interface
- InterViews, Iris, ET++,
- Garbage collection
- DEC CCgc, Boehm-Demers-Weiser conservative garbage collector
- Other
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
- Paper: Andrew Koenig. Associative arrays in C++. Proceedings of the USENIX Conference, San Francisco, June 1988. PDF
- Source code, Cfront release 3.0.3, circa 1991: Map.h Map.c
Array algorithms - Alexander Stepanov
- Source code: Array_alg.h Array_alg.c
Other
- Andrew Koenig. A RISC class (extended abstract). Unpublished report, AT&T Bell Laboratories, Murray Hill, New Jersey, 1993. PDF
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
- Release 3.0, May 25, 1990 (the version included with Data abstraction and object-oriented programming in C++)
- nihcl-3.0.tar.Z. Library source code. compressed tar archive
- Release 3.1.4, March 16, 1994
- nihcl-3.1.4.tar.Z. Library source code. compressed tar archive
Documentation
- Keith E. Gorlen. Object-Oriented Programming Support (OOPS) Version 1 Reference Manual. Computer Systems Laboratory, Division of Computer Research and Technology, National Institutes of Health, 1986.
- Keith E. Gorlen, Sanford M. Orlow, and Perry S. Plexico. Data abstraction and object-oriented programming in C++, John Wiley & Sons, Inc., 1990, ISBN 0-471-92346-X.
- Reprinted with corrections, March 1991.
Papers
- Keith E. Gorlen. An object-oriented class library for C++ programs. Software: Practice and Experience, Volume 17, Number 12, 1987, pages 899-922. Wiley Online Library
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:
[Doug Lea, The GNU C++ Library]
- Classes representing strings, numbers, and other black box values, along with similar Abstract Data Type (ADT) classes representing sets, sequences, maps, etc.
- IO Streams and related support provided by any minimal C++ library.
- Storage allocation classes and utilities.
- ``Lightweight'' veneers organizing functionality commonly supported in C libraries.
- A few other uncategorizable classes and sample applications."
Source code
- Versions 1.22 (June 10, 1988) through 2.8.1.3 (February 23, 1999) libg++ directory / online at gnu.org / ftp at mirrorservice.org
Documentation
- Doug Lea. GNU C++ Library User's Manual. Free Software Foundation 1988.
Papers
- Doug Lea. libg++, the GNU C++ Library. C++ Conference, 1988, pages 243-256.
- Doug Lea. ``The GNU C++ Library''. The C++ Report, June 1993. (Reprinted in Stanley Lippman (ed) C++ Gems, SIGS Books, 1996.) PostScript at gee.cs.oswego.edu
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
- Release of 9/4/1991. zip archive / online at www.slac.stanford.edu (requires account)
Documentation
- Texas Instruments Incorporated. COOL User’s Manual. Information Technology Group, Austin, Texas, Internal Original Issue January 1990. PDF
Papers
- Mary Fontana and Martin Neath. Checked Out And Long Overdue:
Experiences in the Design of a C++ Class Library.
- C++ Conference 1991, pages 179-192.
- Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990. PDF
- Mary Fontana, Lamott Oren, and Martin Neath. COOL - A C++ Object-Oriented Library. Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990, 12 pages. PDF
- Mary Fontana, Lamott Oren, and Martin Neath. A Portable Exception Handling Mechanism for C++, Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990. PDF
- Mary Fontana, Lamott Oren, and Martin Neath. A Portable Implementation of Parameterized Templates Using A Sophisticated C++ Macro Facility. Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990. PDF
- Mary Fontana, Lamott Oren, and Martin Neath. A Runtime Type Checking and Query Mechanism for C++. Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990. PDF
- Mary Fontana, LaMott Oren, and Dane Meyer. Symbols and Packages in C++. Technical Report, Texas Instruments Incorporated, Austin, Texas, Internal Original Issue January 1990. PDF
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
- Versions 0.52 (November 12, 1991) and 0.60 (February 16, 1992) libg++ directory / online at gnu.org / ftp at mirrorservice.org
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
- gperf is packaged within libg++ archives starting with version 1.35.1 (July 21, 1989) libg++ directory / online at gnu.org / ftp at mirrorservice.org
Papers
- Douglas C. Schmidt. GPERF: A Perfect Hash Function Generator. Proceedings of the 2nd C++ Conference, USENIX, San Francisco, California, April 9-11, 1990, pages 87-102. PDF at vanderbilt.edu
C++ Booch Components
Papers
- Grady Booch and Michael Vilot. The design of the C++ Booch Components. In Proceedings of the European Conference on Object-Oriented Programming on Object-Oriented Programming Systems, Languages, and Applications (Ottawa, Canada). OOPSLA/ECOOP '90. ACM Press, New York, NY, 1990, pages 1-11. ACM Digital Library (open access)
LEDA
Source code
- Release 2.1.1, November 1991.
Papers
- Kurt Mehlhorn and Stefan Näher. LEDA: A Library of Efficient Data Types and Algorithms. MFCS 1989, pages 88-106.
- Stefan Näher andKurt Mehlhorn. LEDA: A Library of Efficient Data Types and Algorithms. ICALP 1990, pages 1-5.
- Kurt Mehlhorn and Stefan Näher. Algorithm Design and Software Libraries: Recent Developments in the LEDA Project. IFIP Congress (1) 1992, pages 493-505.
- Stefan Näher. LEDA: A Library of Efficient Data Types and Algorithms. STACS 1993, pages 710-711.
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
- Alexander Stepanov: gclib, AT&T Bell Laboratories, 1987. online at stepanovpapers.com
- Anonymous. Array_alg.h and Array_alg.c. AT&T Tools and Reusable Components, 1988. online
- Alexander Stepanov and Meng Lee. The Standard Template Library, HP Laboratories, release of October 31, 1995. zip archive at stepanovpapers.com unpacked at stepanovpapers.com
Documentation
- Alexander Stepanov and Meng Lee. The Standard Template Library. HP Laboratories Technical Report 95-11(R.1), November 14, 1995. PDF at stepanovpapers.com
- Revised version of A. A. Stepanov and M. Lee. The Standard Template Library, Technical Report X3J16/94-0095, WG21/N0482, ISO Programming Language C++ Project, May 1994.
- Supercedes Alexander Stepanov and Meng Lee. The Standard Template Library. HP Laboratories Technical Report 94-34(R.1), April 13, 1994
Papers
- Alexander A. Stepanov: Science of C++ Programming. Invited presentation to C++ standards committee, San Jose, California, November 11, 1993, 25 slides. PDF at stepanovpapers.com
- Alexander Stepanov: The Standard Template Library. BYTE Magazine, October 1995. HTML at stepanovpapers.com (online at byte.com)
Note: in the code for remove_copy_if, the expression !prod(*first) should be !pred(*first).
Simulation
CPPS
Papers
- L.L. Rose. Modeling and simulation of computer systems. Technical Report 86-8, University of Pittsburgh Computer Science Department, 1986.
- D.P. Sanderson and L.L. Rose. Object-oriented modeling using C++. In Proceedings of the 21st Annual Symposium on Simulation (Tampa, Florida, United States), 1988. M. A. Abrams, Ed. Annual Simulation Symposium. IEEE Computer Society Press, Los Alamitos, CA, 143-156.
- Gary M. Johnston and Roy H. Campbell. A Multiprocessor Operating System
Simulator. Proceedings of the 1988 USENIX C++ Conference, Denver, CO, October 17-21, 1988, pages 169-182.
SILO
Source code
- S. Manoharan. SILO : An event-based simulation platform. University of Edinburgh, July 20, 1990. Posted to Comp.sources.misc, volume 14, issue 69, August 1990. compressed tar archive
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 others 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
- Release 2.4, September 1988. online at foofoo.stanford.edu
- Release 2.5, May 1989. online at foofoo.stanford.edu
- Release 2.6, February 1990. compressed tar archive / online at foofoo.stanford.edu
- Release 3.0.1, October 1991. online at foofoo.stanford.edu
- Release 3.1, December 1992. compressed tar archive / online at foofoo.stanford.edu
- Release 3.2a, June 1994. compressed tar archive
Documentation
- Mark A. Linton, Paul R. Calder, John A. Interrante, Steven Tang, and John M. Vlissides. InterViews Reference Manual. Version 3.1-Beta, June 26, 1992. PDF
- Mark Linton. Programming with InterViews. Slides for tutorial presentation. Silicon Graphics, 1992. PDF
Papers
- Mark Linton. InterViews blurb. PDF
- Mark A. Linton, Russell W. Quong and Paul R. Calder. The Design of the Allegro Programming Environment. Proceedings of the 1987 USENIX C++ Workshop, editor Keith Gorlen, Santa Fe, NM, November 9-10, 1987, pages 268-273.
- Mark A. Linton, Paul R. Calder, and John M. Vlissides. InterViews: A C++ Graphical Interface Toolkit.
Stanford Technical Report: CSL-TR-88-358 July 1988 PDF
- An earlier version was published as: Mark A. Linton and Paul R. Calder. The Design and Implementation of InterViews. Proc. USENIX C++ Workshop, Santa Fe, New Mexico, November 1987, pages 256-267.
- John M. Vlissides and Mark A. Linton. Applying Object-Oriented Design to Structured Graphics, C++ Conference Proceedings, 1988. PDF
- Mark A. Linton, John M. Vlissides, and Paul R. Calder. Composing User Interfaces with InterViews. Computer, February, 1989. PDF
Iris
Papers
- E.R. Gansner. Iris: A Class-Based Window Library. C++ Conference, USENIX, 1988, pages 283-292. PDF at bitsavers.com
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]
- README.ETDOC. text
Source code
- Release 2.2, December 1990
- et.tar.Z. Library and application source code, etc. compressed tar archive
- etman.tar.Z. man pages. compressed tar archive
Documentation
The following two documents are from the doc subdirectory of et.tar.Z, above.
- Erich Gamma and André Weinand. ET++2.2 -Introduction and Installation. UBILAB, Union Bank of Switzerland, December 21, 1990, 58 pages. PDF
- André Weinand, Erich Gamma, and Rudolf Marty. Design and Implementation of ET++, a Seamless Object-Oriented Application Framework. Reprinted from Structured Programming, Vol. 10, No. 2, 1989. ©1989 Springer-Verlag New York Inc. PDF
Garbage collection
DEC CCgc
Source code
- Joel Bartlett. Generational, mostly-copying garbage collector for C++. Western Research Laboratory, Digital Equipment Corporation, 1990-1993.
- 13sep93.tar.Z. online at ftp.digital.com via archive.org
- 23mar92.tar.Z online at ftp.digital.com via archive.org
Papers
- Joel F. Bartlett. Compacting garbage collection with ambiguous roots. Tech. Rep. 88-2, DEC Western Research Laboratory, Palo Alto, CA, Feb. 1988.
PDF at bitsavers.org
- Also in Lisp Pointers 1, 6 (April-June 1988), pages 3-12. ACM Digital Library (open access)
- Joel F. Bartlett. Mostly-Copying garbage collection picks up generations and C++. Technical note WRL-TN-12, DEC Western Research Laboratory, Palo Alto, CA, Oct. 1989. PDF at bitsavers.org
Boehm-Demers-Weiser conservative garbage collector
- Hans-J. Boehm. Source code and papers, Xerox PARC, 1994-1996. Archive of ftp://ftp.parc.xerox.com/pub/gc/. online at hboehm.info
- Hans-J. Boehm. Source code and papers, 2000-2015. online at hboehm.info
Other
- Chuck Allison. The standard C++ library. The C/C++ Users Journal. Volume 12, Number 12, December 1994, pages 69-80. online at freshsources.com
- See also http://www.trumphurst.com/cpplibs/cpplibs.phtml