A comprehensive collection of C++ design documents, source code, and materials documenting the language's development from 1979 through standardization.
C++ Historical Sources Archive: Preserving the Evolution of a Programming Language
Introduction
The C++ History Collection, curated by Paul McJones, represents an invaluable repository of materials documenting the birth, development, standardization, and widespread adoption of the C++ programming language. This archive serves as both a historical record and a technical resource for researchers, language designers, and developers interested in understanding how one of the world's most influential programming languages evolved over decades.
The Chronology of C++ Development
The Early Years (1979-1983)
The journey of C++ began in April 1979 when Bjarne Stroustrup initiated work on "C with Classes" at Bell Labs. By October 1979, the first implementation called Cpre was running, marking the beginning of what would become a revolutionary programming language. The language underwent several name changes before settling on "C++" in 1983, with the first internal use at Bell Labs occurring in August of that year.
Commercialization and Growth (1984-1990)
February 1985 saw the release of Cfront Release E, the first external C++ release, followed by the commercial Release 1.0 in October 1985. The language gained significant traction with the publication of "The C++ Programming Language" book and the first commercial Cfront PC port by Glockenspiel in 1986.
The period from 1987 to 1990 marked rapid expansion, with multiple releases of Cfront (1.2 in February 1987, 2.0 in June 1989) and the founding of the ANSI C++ committee (J16) in 1989. The first ANSI X3J16 technical meeting in January 1990 brought together language stakeholders to begin the standardization process.
Standardization Era (1991-1998)
The 1990s were dominated by standardization efforts. The first ISO WG21 meeting in Lund, Sweden in 1991 set the stage for international standardization. Key features like templates (accepted in Seattle, WA in 1990), exceptions (Palo Alto, CA in 1990), runtime type identification (Portland, Oregon in 1993), and namespaces (Munich, Germany in 1993) were gradually incorporated into the language.
The culmination of these efforts came in 1998 when the ISO C++ standard was ratified, establishing C++ as a mature, standardized programming language.
C with Classes (Cpre): The Genesis
Early Documentation and Papers
The archive contains several foundational papers that document the early development of C with Classes:
Bjarne Stroustrup. "Classes: an abstract data type facility for the C language." (January 1980) - This Bell Labs technical report and subsequent SIGPLAN paper laid the groundwork for object-oriented extensions to C.
Bjarne Stroustrup. "Adding Classes to C: An Exercise in Language Evolution." (April 1982) - Published in Software: Practice and Experience, this paper provided a more detailed exploration of the language's evolution.
Bjarne Stroustrup. "A Set of C Classes for Co-routine Style Programming." (May 1980) - This technical memorandum explored advanced programming techniques using the new language features.
Cpre Implementation
The Cpre pre-processor represented the first working implementation of C with Classes. Stroustrup notes that by March 1980, Cpre was supporting one real project and several experiments across 16 different systems. The implementation included features like Simula-like classes, demonstrating the language's early focus on object-oriented programming concepts.
Cfront Releases: The Evolution of the Compiler
Release E (February 1985)
Release E marked the first external release of C++. According to Stroustrup, every word and line of code (with the exception of parts of the makefile) was written by him. This release included:
- The C++ compiler source code
- Standard libraries (complex, new, stream, and task libraries)
- Documentation and tutorials
- Installation guides
Release 1.0 and 1.2 (1985-1987)
The commercial releases brought C++ to a wider audience. Release 1.0 in October 1985 was the first commercial release, followed by Release 1.2 in February 1987. These versions introduced:
- Improved error handling and diagnostics
- Enhanced library support
- Better compatibility with different systems
- More comprehensive documentation
Release 2.0 and Beyond (1989-1994)
Release 2.0 in June 1989 represented a major milestone, introducing templates and other advanced features. Subsequent releases (2.1.0+, 2.1++, and eventually 3.0) continued to refine the language and compiler implementation.
Release 3.0, while pre-standard, included many features that would later become part of the ISO standard. Stroustrup notes that Cfront 3 is "pre-standard and emphatically not recommended for use or further development," but it remains historically significant.
Standardization Documents
The archive includes extensive materials from the ISO C++ Standards Committee (WG21), covering the period from 1992 to 2006. These documents provide insight into the standardization process, including:
- Committee papers and proposals
- Technical discussions and debates
- Design rationales for language features
- Voting records and decision-making processes
GNU g++ Releases
The collection also documents the development of the GNU C++ compiler (g++), which became an important alternative implementation of the language. The GNU project played a crucial role in making C++ accessible to the open-source community.
Academic and Industry Papers
Historical Perspectives
Several key papers provide historical context for C++ development:
Tony Griggs. "New C++ Language Extends C Programming Capabilities." (December 1984) - An early industry perspective on the language's potential.
Bjarne Stroustrup. "A History of C++: 1979-1991." (1993) - Presented at HOPL-II, this paper provides a comprehensive overview of the language's first twelve years.
Bjarne Stroustrup. "Evolving a language in and for the real world: C++ 1991-2006." (2007) - Presented at HOPL-III, this paper continues the historical narrative through the standardization era.
Bjarne Stroustrup. "Thriving in a crowded and changing world: C++ 2006–2020." (2020) - Presented at HOPL-IV, this paper brings the story up to the modern era.
Technical Papers
The archive includes numerous technical papers covering various aspects of C++ design and implementation, including:
- Operator overloading
- Complex arithmetic support
- Coroutine-style programming
- I/O facilities
- Multiple inheritance
- Type-safe linkage
Libraries and Applications
The collection documents both general-purpose and special-purpose libraries written in C++, as well as applications that demonstrate the language's capabilities. These materials show how C++ was used in practice and how the ecosystem developed around the language.
Acknowledgments and Contributions
The archive acknowledges numerous contributors who have helped preserve and document C++ history, including:
- Bjarne Stroustrup (the language's creator)
- Chuck Allison (timeline corrections)
- Jonathan Caves (Cfront 1.0 release notes)
- Noel Hunt (Pi debugger for blit)
- Poul-Henning Kamp (Cfront 1.2 contributions)
- Warren Toomey and The Unix Heritage Society (Research Unix sources)
- Willem Wakker and ACE Associated Computer Experts (Cfront 1.0 source)
- Mark Hopkins (transcription of Release E)
Significance and Impact
The C++ Historical Sources Archive represents more than just a collection of old code and documents. It provides a window into the process of language design and standardization, showing how technical decisions were made, how features evolved, and how the language adapted to changing computing needs.
For researchers, the archive offers primary source materials for studying programming language evolution. For developers, it provides historical context for understanding why certain language features exist and how they were intended to be used. For historians of computing, it documents an important chapter in the development of software engineering practices.
Access and Preservation
The materials in this archive are made available with the permission of copyright owners for historical research purposes. The collection continues to grow as new materials are discovered and contributed, ensuring that future generations will have access to this important piece of computing history.
The preservation of these materials is crucial as original hardware and software become increasingly difficult to access. By maintaining these historical sources, the archive helps ensure that the lessons learned during C++'s development remain available for study and reflection.
Conclusion
The C++ Historical Sources Archive stands as a testament to the collaborative effort that went into creating one of the world's most widely-used programming languages. From its humble beginnings as "C with Classes" to its current status as a standardized, industrial-strength language, C++'s evolution is documented in remarkable detail within this collection.
As programming languages continue to evolve and new ones emerge, the lessons contained in this archive remain relevant. The careful documentation of design decisions, the consideration of trade-offs, and the focus on practical utility that characterized C++'s development provide valuable insights for anyone involved in language design or software engineering.
Comments
Please log in or register to join the discussion