ACM Home Page
Please provide us with feedback. Feedback
Evolving a language in and for the real world: C++ 1991-2006
Full text MovMov (60:46),  PdfPdf (838 KB)
Source
History of Programming Languages archive
Proceedings of the third ACM SIGPLAN conference on History of programming languages table of contents
San Diego, California
Pages: 4-1 - 4-59  
Year of Publication: 2007
ISBN:978-1-59593-766-X
Author
Bjarne Stroustrup  Texas A&M University
Sponsor
SIGPLAN: ACM Special Interest Group on Programming Languages
Publisher
ACM  New York, NY, USA
Bibliometrics
Downloads (6 Weeks): 72,   Downloads (12 Months): 643,   Citation Count: 0
Additional Information:

appendices and supplements   abstract   references   index terms   collaborative colleagues  

Tools and Actions: Request Permissions Request Permissions    Review this Article  
DOI Bookmark: Use this link to bookmark this Article: http://doi.acm.org/10.1145/1238844.1238848
What is a DOI?

APPENDICES and SUPPLEMENTS
Pdfslides.pdf (1.47 MB),
Evolving a language in and for the real world: c++ 1991-2006 slides


ABSTRACT

This paper outlines the history of the C++ programming language from the early days of its ISO standardization (1991), through the 1998 ISO standard, to the later stages of the C++0x revision of that standard (2006). The emphasis is on the ideals, constraints, programming techniques, and people that shaped the language, rather than the minutiae of language features. Among the major themes are the emergence of generic programming and the STL (the C++ standard library's algorithms and containers). Specific topics include separate compilation of templates, exception handling, and support for embedded systems programming. During most of the period covered here, C++ was a mature language with millions of users. Consequently, this paper discusses various uses of C++ and the technical and commercial pressures that provided the background for its continuing evolution.


REFERENCES

Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.

 
1
 
2
David Abrahams and Aleksey Gurtovoy: C++ Template Meta-programming Addison-Wesley. 2005. ISBN 0-321-22725-5.
 
3
Andrei Alexandrescu: Modern C++ Design. Addison-Wesley. 2002. ISBN 0-201-70431.
 
4
Ping An, Alin Jula, Silvius Rus, Steven Saunders, Tim Smith, Gabriel Tanase, Nathan Thomas, Nancy Amato, Lawrence Rauchwerger: STAPL: An Adaptive, Generic Parallel C++ Library. In Wkshp. on Lang, and Comp. for Par. Comp. (LCPC), pp. 193--208, Cumberland Falls, Kentucky, Aug 2001.
 
5
AT&T C++ translator release notes. Tools and Reusable Components. 1989.
 
6
7
 
8
J. Barreiro, R. Fraley, and D. Musser: Hash Tables for the Standard Template Library. Rensselaer Polytechnic Institute and Hewlett Packard Laboratories. February, 1995. ftp://ftp.cs.rpi.edu/pub/stl/hashdoc.ps.Z
 
9
 
10
11
 
12
Hans-J. Boehm and Michael Spertus: Transparent Garbage Collection for C++. ISO SC22 WG21 TR NN1943==06-0013.
 
13
Hans-J. Boehm: An Atomic Operations Library for C++. ISO SC22 WG21 TR N2047==06-0117.
 
14
Hans-J. Boehm: A Less Formal Explanation of the Proposed C++ Concurrency Memory Model. ISO SC22 WG21 TR N2138==06-0208.
 
15
Grady Booch: Software Components with Ada. Benjamin Cummings. 1988. ISBN 0-8053-0610-2.
 
16
The Boost collection of libraries, http://www.boost.org.
 
17
Walter Bright: D Programming Language, http://www.digitalmars.com/d/.
 
18
Peter A. Buhr and Glen Ditchfield: Adding Concurrency to a Programming Language. Proc. USENIX C++ Conference. Portland, OR. August 1992.
 
19
 
20
T. Cargill: Exception handling: A False Sense of Security. The C++ Report, Volume 6, Number 9, November-December 1994.
 
21
D. Caromel et al.: C++//. In Parallel programming in C++. (Wilson and Lu, editors). MIT Press. 1996. ISBN 0-262-73118-5.
 
22
Fernando Cacciola: A proposal to add a general purpose ranged-checked numeric_cast (Revision 1). ISO SC22 WG21 TR N1879==05-0139.
 
23
CGAL: Computational Geometry Algorithm Library. http://www.cgal.org/.
 
24
Siva Challa and Artur Laksberg: Essential Guide to Managed Extensions for C++. Apress. 2002. ISBN: 1893115283.
25
26
 
27
Steve Clamage and David Vandevoorde. Personal communications. 2005.
 
28
 
29
Lawrence Crowl: Thread-Local Storage. ISO SC22 WG21 TR N1966==06-0036.
 
30
Lawrence Crowl: Defaulted and Deleted Functions. ISO SC22 WG21 TR N2210==07-0070.
 
31
 
32
Beman Dawes: Filesystem Library Proposal for TR2 (Revision 2). ISO SC22 WG21 TR N1934==06-0004.
 
33
 
34
D. Detlefs: Garbage collection and run-time typing as a C++ library. Proc. USENIX C++ conference. 1992.
 
35
 
36
Dinkumware: Dinkum Abridged Library http://www.dinkumware.com/libdal.html.
 
37
Gabriel Dos Reis and Bjarne Stroustrup: Formalizing C++. TAMU CS TR. 2005.
38
 
39
Gabriel Dos Reis and Bjarne Stroustrup: Generalized Constant Expressions (Revision 3). ISO SC22 WG21 TR N1980==06-0050.
 
40
The Embedded C++ Technical Committee: The Language Specification & Libraries Version. WP-AM-003. Oct 1999 (http://www.caravan.net/ec2plus/).
 
41
Ecma International: ECMA-372 Standard: C++/CLI Language Specification. http://www.ecma-international.org/publications/standards/Ecma-372.htm. December 2005.
 
42
Boris Fomitch: The STLport Story, http://www.stlport.org/doc/story.html.
 
43
Eric Gamma, et al.: Design Patterns. Addison-Wesley. 1994. ISBN 0-201-63361-2.
44
 
45
Jeff Garland: Proposal to Add Date-Time to the C++ Standard Library. ISO SC22 WG21 TR N1900=05-0160.
 
46
 
47
Geodesic: Great circle. Now offered by Veritas.
 
48
 
49
William Gropp, Steven Huss-Lederman, Andrew Lumsdaine, Ewing Lusk, Bill Nitzberg, William Saphir, and Mare Snir: MPI: The Complete Reference --- 2nd Edition: Volume 2 --- The MPI-2 Extensions. The MIT Press. 1998.
 
50
Keith E. Gorlen: An Object-Oriented Class Library for C++ Programs. Proc. USENIX C++ Conference. Santa Fe, NM. November 1987.
 
51
J. Gosling and H. McGilton: The Java(tm) Language Environment: A White Paper. http://java.sun.com/docs/white/langenv/.
52
 
53
D. Gregor and B. Stroustrup: Concepts. ISO SC22 WG21 TR N2042==06-0012.
 
54
D. Gregor, J. Järvi, G. Powell: Variadic Templates (Revision 3). ISO SC22 WG21 TR N2080==06-0150.
55
56
 
57
H. Hinnant, D. Abrahams, and P. Dimov: A Proposal to Add an Rvalue Reference to the C++ Language. ISO SC22 WG21 TR N1690==04-0130.
 
58
Howard E. Hinnant: Multithreading API for C++ 0X - A Layered Approach. ISO SC22 WG21 TR N2094==06-0164.
 
59
J. Hughes and J. Sparud: Haskell++: An object-oriented extension of Haskell. Proc. Haskell Workshop, 1995.
 
60
IA64 C++ ABI. http://www.codesourcery.com/cxx-abi.
 
61
IDC report on programming language use. 2004. http://www.idc.com.
 
62
Standard for the C Programming Language. ISO/IEC 9899. ("C89").
 
63
Standard for the C++ Programming Language. ISO/IEC 14882. ("C++98").
 
64
Standard for the C Programming Language. ISO/IEC 9899:1999. ("C99").
 
65
International Organization for Standards: The C Programming Language. ISO/IEC 9899:2002. Wiley 2003. ISBN 0-470-84573-2.
 
66
International Organization for Standards: The C++ Programming Language ISO/IEC 14882:2003. Wiley 2003. ISBN 0-470-84674-7.
 
67
Technical Report on C++ Performance. ISO/IEC PDTR 18015.
 
68
Technical Report on C++ Standard Library Extensions. ISO/IEC PDTR 19768.
 
69
ISO SC22/WG21 website: http://www.open-std.org/jtcl/sc22/wg21/.
 
70
Sorin Istrail and 35 others: Whole-genome shotgun assembly and comparison of human genome assemblies. Proc. National Academy of Sciences. February, 2004. http://www.pantherdb.org/.
 
71
Jaakko Järvi: Proposal for adding tuple type into the standard library. ISO SC22 WG21 TR N1382==02-0040.
 
72
 
73
J. Järvi, B. Stroustrup and G. Dos Reis: Deducing the type of a variable from its initializer expression. ISO SC22 WG21 TR N1894, Oct. 2005.
74
 
75
L. V. Kale and S. Krishnan: CHARM++ in Parallel programming in C++. (Wilson and Lu, editors). MIT Press. 1996. ISBN 0-262-73118-5.
 
76
 
77
 
78
Brian Kernighan: Why Pascal isn't my favorite programming language. AT&T Bell Labs technical report No. 100. July 1981.
 
79
 
80
Christopher Kohlhoff: Networking Library Proposal for TR2. ISO SC22 WG21 TR N2054==06-0124.
 
81
Mark A. Linton and Paul R. Calder: The Design and Implementation of InterViews. Proc. USENK C++ Conference. Santa Fe, NM. November 1987.
 
82
A. Mishra et al.: R++: Using Rules in Object-Oriented Designs. Proc. OOPSLA-96. http://www.research.att.com/sw/tools/r++/.
 
83
W. G. O'Farrell et al.: ABC++ in Parallel Programming in C++. (Wilson and Lu, editors). MIT Press. 1996. ISBN 0-262-73118-5.
 
84
Thorsten Ottosen: Proposal for new for-loop. ISO SC22 WG21 TR N1796==05-0056.
 
85
Sean Parent: personal communications. 2006.
 
86
J. V. W. Reynolds et al.: POOMA in Parallel Programming in C++. (Wilson and Lu, editors). MIT Press. 1996. ISBN 0-262-73118-5.
 
87
 
88
Nathan C. Myers: Traits: a new and useful template technique. The C++ Report, June 1995.
 
89
C. Nelson and H.-J. Boehm: Sequencing and the concurrency memory model. ISO SC22 WG21 TR N2052==06-0122.
 
90
Mac OS X10.1 November 2001 Developer Tools CD Release Notes: Objective-C++. http://developer.apple.com/releasenotes/Cocoa/Objective-C++.html
 
91
Leonie V. Rose and Bjarne Stroustrup: Complex Arithmetic in C++. Internal AT&T Bell Labs Technical Memorandum. January 1984. Reprinted in AT&T C++ Translator Release Notes. November 1985.
 
92
P. Rovner, R. Levin, and J. Wick: On extending Modula-2 for building large integrated systems. DEC research report #3. 1985.
93
 
94
 
95
D. C. Schmidt and S. D. Huston: Network programming using C++. Addison-Wesley Vol 1, 2001. Vol. 2, 2003. ISBN 0-201-60464-7 and ISBN 0-201-79525-6.
 
96
 
97
J. Siek et al.: Concepts for C++. ISO SC22 WG21WG21-N1758.
 
98
Jeremy G. Siek and Walid Taha: A Semantic Analysis of C++ Templates. Proc. ECOOP 2006.
 
99
Yannis Smargdakis: Functional programming with the FC++ library. ICFP'00.
 
100
Olaf Spinczyk, Daniel Lohmann, and Matthias Urban: AspectC++: an AOP Extension for C++. Software Developer's Journal. June 2005. http://www.aspectc.org/.
 
101
 
102
A. A. Stepanov: Abstraction Penalty Benchmark, version 1.2 (KAI). SGI 1992. Reprinted as Appendix D.3 of {67}.
 
103
A. Stepanov and M. Lee: The Standard Template Library. HP Labs TR HPL-94-34. August 1994.
 
104
Alex Stepanov: Foreword to Siek, et al.: The Boost Graph Library. Addison-Wesley 2002. ISBN 0-21-72914-8.
 
105
Alex Stepanov: personal communications. 2004.
 
106
Alex Stepanov: personal communications. 2006.
 
107
Christopher Strachey: Fundamental Concepts in Programming Languages. Lecture notes for the International Summer School in Computer Programming, Copenhagen, August 1967.
 
108
Bjarne Stroustrup: Classes: An Abstract Data Type Facility for the C Language. Bell Laboratories Computer Science Technical Report CSTR-84. April 1980. Revised, August 1981. Revised yet again and published as {109}.
109
 
110
B. Stroustrup: Data abstraction in C. Bell Labs Technical Journal. Vol 63. No 8 (Part 2), pp 1701-1732. October 1984.
 
111
B. Stroustrup: A C++ Tutorial. Proc. 1984 National Communications Forum. September, 1984.
 
112
B. Stroustrup: The C++ Programming Language ("TC++PL"). Addison-Wesley Longman. Reading, Mass., USA. 1986. ISBN 0-201-12078-X.
 
113
114
 
115
B. Stroustrup and J. E. Shopiro: A Set of Classes for Coroutine Style Programming. Proc. USENIX C++ Workshop. November, 1987.
 
116
Bjarne Stroustrup: quote from 1988 talk.
 
117
Bjarne Stroustrup: Parameterized Types for C++. Proc. USENIX C++ Conference, Denver, CO. October 1988. Also, USENIX Computer Systems, Vol 2 No 1. Winter 1989.
 
118
 
119
Bjarne Stroustrup and Dmitri Lenkov: Run-Time Type Identification for C++. The C++ Report. March 1992. Revised version. Proc. USENIX C++ Conference. Portland, OR. August 1992.
120
 
121
122
 
123
B. Stroustrup: Proposal to Acknowledge that Garbage Collection for C++ is Possible. WG21/N0932 X3J16/96-0114.
 
124
 
125
 
126
 
127
B. Stroustrup: C and C++: Siblings, C and C++: A Case for Compatibility, C and C++: Case Studies in Compatibility. The C/C++ Users Journal. July, August, and September 2002.
 
128
B. Stroustrup: Why can't I define constraints for my template parameters?. http://www.research.att.com/~bs/bs_faq2.html#constraints.
 
129
B. Stroustrup and G. Dos Reis: Concepts --- Design choices for template argument checking. ISO SC22 WG21 TR N1522. 2003.
 
130
B. Stroustrup: Concept checking --- A more abstract complement to type checking. ISO SC22 WG21 TR N1510. 2003.
 
131
B. Stroustrup: Abstraction and the C++ machine model. Proc. ICESS'04. December 2004.
 
132
B. Stroustrup, G. Dos Reis: A concept design (Rev. 1). ISO SC22 WG21 TR N1782=05-0042.
 
133
B. Stroustrup: A rationale for semantically enhanced library languages. ACM LCSD05. October 2005.
 
134
B. Stroustrup and G. Dos Reis: Supporting SELL for High-Performance Computing. LCPC05. October 2005.
 
135
Bjarne Stroustrup and Gabriel Dos Reis: Initializer lists. ISO SC22 WG21 TR N1919=05-0179.
 
136
B. Stroustrup: C++ pages. http://www.research.att.com/~bs/C++.html.
 
137
B. Stroustrup: C++ applications. http://www.research.att.com/~bs/applications.html.
 
138
H. Sutter, D. Miller, and B. Stroustrup: Strongly Typed Enums (revison 2). ISO SC22 WG21 TR N2213==07-0073.
 
139
H. Sutter and B. Stroustrup: A name for the null pointer: nullptr (revision 2). ISO SC22 WG21 TR N1601==04-0041.
 
140
Herb Sutter: A Design Rationale for C++/CLI, Version 1.1 --- February 24, 2006 (later updated with minor editorial fixes). http://www.gotw.ca/publications/C++CLIRationale.pdf.
 
141
Numbers supplied by Trolltech. January 2006.
 
142
UK C++ panel: Objection to Fast-track Ballot ECMA-372 in JTC1 N8037. http://public.research.att.com/~bs/uk-objections.pdf. January 2006.
 
143
E. Unruh: Prime number computation. ISO SC22 WG21 TR N462==94-0075.
 
144
 
145
D. Vandevoorde: Right Angle Brackets (Revision 1). ISO SC22 WG21 TR N1757==05-0017.
 
146
D. Vandevoorde: Modules in C++ (Version 3). ISO SC22 WG21 TR N1964==06-0034.
 
147
Todd Veldhuizen: expression templates. C++ Report Magazine, Vol 7 No. 4, May 1995.
 
148
Todd Veldhuizen: Template metaprogramming. The C++ Report, Vol. 7 No. 5. June 1995.
 
149
 
150
Todd Veldhuizen: C++ Templates are Turing Complete 2003.
 
151
Todd L. Veldhuizen: Guaranteed Optimization for Domain-Specific Programming. Dagstuhl Seminar of Domain-Specific Program Generation. 2003.
152
 
153
 
154
P. M. Woodward and S. G. Bond: Algol 68-R Users Guide. Her Majesty's Stationery Office, London. 1974. ISBN 0-11-771600-6.
 
155
The Visualization Toolkit, An Object-Oriented Approach To 3D Graphics, 3rd edition, ISBN 1-930934-12-2. http://public.kitware.com/VTK.
 
156
FLTK: Fast Light Toolkit. http://www.fltk.org/.
 
157
Lockheed Martin Corporation: Joint Strike Fighter air vehicle coding standards for the system development and demonstration program. Document Number 2RDU00001 Rev C. December 2005. http://www.research.att.com/~bs/JSF-AV-rules.pdf.
 
158
Microsoft Foundation Classes.
 
159
Smartwin++: An Open Source C++ GUI library. http://smartwin.sourceforge.net/.
 
160
WTL: Windows Template Library --- A C++ library for developing Windows applications and UI components. http://wtl.sourceforge.net.
 
161
gtkmm: C++ Interfaces for GTK+ and GNOME. http://www.gtkmm.org/
 
162
wxWidgets: A cross platform GUI library. http://wxwidgets.org/.
 
163
Windows threads: Processes and Threads. http://msdn.microsoft.com/library/en-us/dllproc/base/processes_and_threads.asp.
 
164
Wikipedia: Java (Sun) --- Early history. http://en.wikipedia.org/wiki/Java_(Sun).