70
Thriving in a Crowded and Changing World: C++ 2006–2020
BJARNE STROUSTRUP, Morgan Stanley and Columbia University, USA
Shepherd: Yannis Smaragdakis, University of Athens, Greece
By 2006, C++ had been in widespread industrial use for 20 years. It contained parts that had survived unchanged
since introduced into C in the early 1970s as well as features that were novel in the early 2000s. From 2006 to
2020, the C++ developer community grew from about 3 million to about 4.5 million. It was a period where
new programming models emerged, hardware architectures evolved, new application domains gained massive
importance, and quite a few well-nanced and professionally marketed languages fought for dominance. How
did C++ ś an older language without serious commercial backing ś manage to thrive in the face of all that?
This paper focuses on the major changes to the ISO C++ standard for the 2011, 2014, 2017, and 2020 revisions.
The standard library is about 3/4 of the C++20 standard, but this paper’s primary focus is on language features
and the programming techniques they support.
The paper contains long lists of features documenting the growth of C++. Signicant technical points are
discussed and illustrated with short code fragments. In addition, it presents some failed proposals and the
discussions that led to their failure. It oers a perspective on the bewildering ow of facts and features across
the years. The emphasis is on the ideas, people, and processes that shaped the language.
Themes include eorts to preserve the essence of C++ through evolutionary changes, to simplify its use, to
improve support for generic programming, to better support compile-time programming, to extend support
for concurrency and parallel programming, and to maintain stable support for decades’ old code.
The ISO C++ standard evolves through a consensus process. Inevitably, there is competition among proposals
and clashes (usually polite ones) over direction, design philosophies, and principles. The committee is now
larger and more active than ever, with as many as 250 people turning up to week-long meetings three times
a year and many more taking part electronically. We try (not always successfully) to mitigate the eects of
design by committee, bureaucratic paralysis, and excessive enthusiasm for a variety of language fashions.
Specic language-technical topics include the memory model, concurrency and parallelism, compile-time
computation, move-semantics, exceptions, lambda expressions, and modules. Designing a mechanism for
specifying a template’s requirements on its arguments that is suciently exible and precise yet doesn’t
impose run-time costs turned out to be hard. The repeated attempts to design łconceptsž to do that have their
roots back in the 1980s and touch upon many key design issues for C++ and for generic programming.
The description is based on personal participation in the key events and design decisions, backed by the
thousands of papers and hundreds of meeting minutes in the ISO C++ standards committee’s archives.
CCS Concepts:
· Software and its engineering → Software notations and tools
;
General programming
languages;
Additional Key Words and Phrases: C++, programming language design and evolution, standardization, generic
programming, resource management, concurrency and parallelism, simplication of language use
ACM Reference Format:
Bjarne Stroustrup. 2020. Thriving in a Crowded and Changing World: C++ 2006ś2020. Proc. ACM Program.
Lang. 4, HOPL, Article 70 (June 2020), 167 pages. https://doi.org/10.1145/3386320
Author’s address: Bjarne Stroustrup, Morgan Stanley and Columbia University, USA, Bjarne@Stroustrup.com.
Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee
provided that copies are not made or distributed for prot or commercial advantage and that copies bear this notice and
the full citation on the rst page. Copyrights for third-party components of this work must be honored. For all other uses,
contact the owner/author(s).
© 2020 Copyright held by the owner/author(s).
2475-1421/2020/6-ART70
https://doi.org/10.1145/3386320
Proc. ACM Program. Lang., Vol. 4, No. HOPL, Article 70. Publication date: June 2020.
This work is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License.