Personal tools
You are here: Home Projects C++ Libraries
Document Actions

C++ Libraries

by Paul McJones last modified 2010-10-04 13:29

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

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 - Näher 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

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++)
  • Release 3.1.4, March 16, 1994

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. DOI

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

  • 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

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

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

  • 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 wustl.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. DOI

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

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 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

  • 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 att.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

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 Microsoft Word
  • 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 Microsoft Word

Garbage collection

DEC CCgc

Source code

Papers

  • Joel F. Bartlett. Compacting garbage collection with ambiguous roots. Tech. Rep. 88-2, DEC Western Research Laboratory, Palo Alto, CA, Feb. 1988. Online at HP Laboratories
  • 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. Online at HP Laboratories

Boehm-Demers-Weiser conservative garbage collector

Other

July 2013 »
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: