Thriving in a crowded and changing world: C++ 2006-2020
By 2006, C++ had been in widespread industrial use for 20 years, had more than 3 million users, and was controlled by a large and active ISO standards committee. It contained parts that had survived unchanged since they were first introduced into C in the early 1970s as well as features that were novel in the early 2000s. How did it evolve to meet the challenges of a rapidly changing world?
This paper focuses on the major changes to the ISO C++ standard for the 2011, 2014, and 2017 revisions and the proposals being processed for the C++20 revision. This includes both language and standard-library improvements. The standard library is more than 2/3rd of the standard and will be about 4/5th for C++20. However, to keep this paper from becoming a book, its primary focus is on language features and the programming techniques they support.
The paper contains long lists of features documenting the growth of C++. Significant 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 offers a perspective on the bewildering flow of facts and features across the years. The emphasis is on the ideas, people, and processes that shaped the language, rather than just language and library minutia.
In the period covered here, the C++ developer community grew to 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-financed 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?
Themes include efforts to preserve the essence of C++ through evolutionary changes, to simplify its use, to improve support for generic programming, to better use modern hardware, to support concurrency and parallel programming, to improve support for compile-time 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 160 members turning up to meetings three times a year and many more taking part electronically. We try (not always successfully) to mitigate the effects of design by committee, bureaucratic paralysis, and excessive enthusiasm for a variety of language fashions.
Specific language-technical topics include compile-time computation, move-semantics, exceptions, lambda expressions, and modules. Designing a mechanism for specifying a template’s requirements on its arguments that is sufficiently flexible 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.
Mon 21 JunDisplayed time zone: Eastern Time (US & Canada) change
13:30 - 16:15 | Monday Early AfternoonPapers at HOPL Chair(s): Yannis Smaragdakis University of Athens, Roberto Ierusalimschy PUC-Rio | ||
13:30 75mTalk | Thriving in a crowded and changing world: C++ 2006-2020 Papers Bjarne Stroustrup Morgan Stanley DOI | ||
15:15 60mTalk | Origins of the D Programming Language Papers Walter Bright The D Language Foundation, Andrei Alexandrescu The D Language Foundation, Michael Parker The D Language Foundation DOI |