Verdict: Recommended. An interesting insight.
This paper is basically The Design and Evolution of (Modern) C++ – for free. It ‘focuses on the major changes to the ISO C++ standard for the 2011, 2014, 2017, and 2020 revisions’ and attempts to answer the question “How did C++ - an older language without serious commercial backing manage to thrive?”
The first section introduces why C++ was developed, and what its guiding principles are. A chronology from 1979 through to 2020 details when language facilities were introduced.
The second section continues in this vein, detailing the first two decades of C++ and its development. The first decade saw ‘C with Classes’ born, in order to ‘write a version of the Unix kernel that could work on multiple processors connected through a local area network or a shared memory.’. The second decade marked the point where the C++ Committee was inaugurated – and this section detailed the features added in C++98. The author taught C++ to University students – and, as a result of examining the most popular textbooks, he exclaimed, “If that's C++, I don’t like it either!” Finally, he discusses how other languages influenced C++.
The third section is all about the C++ Standards Committee (WG21 for short) which is a bunch of volunteers performing ‘design by a confederation of committees’. Many other languages have reference implementations; however, C++’s approach is for the committee to produce the C++ standard which is a specification for compiler writers to work from. The purposes of the working groups (WGs) and study groups (SGs) are discussed, as is the ‘train model’ for C++ releases where, if a feature is not ready for the currently being worked on standard, it is left out of that release and will have to catch a later ‘train’. There are more stories about the pros and cons of the committee approach and, in some respects, this section can be considered a guide to C++ Committee etiquette – useful for new members of the committee.
The fourth section describes C++11, proclaiming it ‘feels like a new language’ and that ‘C++11 introduced a bewildering number of language features’ – and explains the success of that release. That release saw support for concurrency, facilities to simplify the language, more support for generic programming, increased static type safety, support for library building and finally standard library components. Section 5 covers C++14, the minor release that was to complete C++11. It is discussed, with source code examples.
Section 6 tackles Concepts, something in C++20 that allows ‘proper specification of interfaces to generic components’. Initially the author thought C-style macros would be sufficient but C++ templates has taken this much further. There are whole books dedicated to templates so I’ll stop here.
In Section 7, ‘Error Handling’ is discussed, with the differing facilities supported by C and the approaches added by C++ programmers over the years, concluding that ‘C++ requires two error-handing mechanisms’:
- Exceptions for errors that are rare or cannot be handled by an immediate caller.
- Error codes for errors that can be handled by an immediate caller.
Section 8, ‘C++17: Lost at Sea’, complains that ‘C++17 has quite a few new features, but none that I would deem major’ and goes on to discuss those features with examples. Also, the features that missed the C++17 are noted (Concepts, Networking, operator dot, Uniform Function Call, Default Comparison Operators and Coroutines).
Section 9, ‘C++: A struggle for direction’, covers the challenges of designing the language by committees. To remedy lack of direction, WG21 established the Direction Group (DG) to provide an overall vision for C++. He had a wish-list of features for C++17. Not all of them got into it. Some of them caught the train for C++20. Some of them missed even that. Those features are discussed.
Section 10, ‘C++ In 2020’, covers What is C++ used for?, The C++ Community, Education and Research, Tools, Programming Styles, and Core Guidelines. This section makes heavy uses of references to other papers.
Section 11, ‘Retrospective’, is where the author reflects back on C++, in detail. Finally, he also muses on what the future might bring.
The paper finishes with acknowledgements and a massive references section.
Overall, this paper is an interesting source of information for people interested in C++ and where it is going.