The story of C++ starts at the fabled Bell Labs. In 1979, Bjarne Stroustrup joined the Computing Science Research Center of Bell Labs after completing his PhD thesis on the organization of system software for a distributed system. Upon arriving at Department 1127, Bjarne found himself in a unique environment. He recalls:

“When I joined I was basically told to ‘do something interesting,’ given suitable computer resources, encouraged to talk to interesting and competent people, and given a year before having to formally present my work for evaluation.”

While working on his PhD thesis, Bjarne developed a software simulator with Simula (short for simulation language). Simula is considered the first object-oriented language, and Bjarne was enamored with this new methodology. But Simula’s glaring shortcoming was its poor performance. The link-time and run-time characteristics rendered Simula impractical for large programs. So in the spring of 1979, Bjarne settled on the interesting idea of adding Simula features to C.1

C with Classes

Earlier in that decade, and at the very same Department 1127, Ken Thompson and Dennis Ritchie began collaborating on the UNIX operating system. C was developed by Dennis as a by-product of improving the portability of UNIX. Consequently, C gained traction and grew in popularity throughout the decade. By 1979, C was one of the viable languages that Bjarne chose as the starting point of his new work.

Until 1983, Bjarne’s new language (known as C++ today) was aptly named “C with Classes”. This language infused C’s low-level functionality with Simula’s high-level functionality. The result was a new language that could simultaneously offer higher abstractions and lower resource management.2

Standard Template Library

The Standard Template Library (STL), primarily developed by Alexander Stepanov, has been responsible for several critical components of C++. Stepanov’s work champions the use of small, generic algorithms and data structures that do not sacrifice performance. In the 1970’s, Stepanov began ruminating over the idea and implementation of generic programming. Teaming up with David Musser and Deepak Kapur, Stepanov found moderate success implementing his ideas into various languages - most notably Ada - over the subsequent decade. By the early 1990’s, Stepanov was encouraged to create a third party library for C++. His work was strongly endorsed by Bjarne Stroustrup and Andrew Koenig, and the STL library was formally accepted as part of the C++ standard by 1994.

STL is commonly divided into 4 subcategories: containers, iterators, functions, and algorithms. Vectors, maps, random access iterators, several generic algorithms, and much more all trace their origins back to the Standard Template Library. Today, any reference to STL is technically a misnomer; STL itself has been an abandoned and unmaintained library for years while the Standard C++ Library has evolved to incorporate all of STL’s original ideas and implementations. STL’s impact on C++ is hard to overlook given how often its name is still encountered to this day.3

ISO Standardizations

The first standardization of C++ by the International Organization for Standardization (ISO) in 1998 was a watershed moment. This standardization ensured that no single entity could completely control the future of the language. This first standardization, known as C++98, is celebrated for its incorporation of STL’s functionality. C++03 was the next revision with some minor updates - most notably its value initialization functionality.

Nearly a decade later, the long awaited C++11 arrived. Along with introducing a laundry list of new features, the ISO C++ committee decided to introduce a new standard every 3 years. As expected, C++14 and C++17 have followed. C++20 is due to be introduced next year.

Modern C++

In 2001, Andrei Alexandrescu released his influential book: Modern C++ Design: Generic Programming and Design Patterns Applied. Alexandrescu’s book popularized “a template-intensive, generic style of writing code” that is commonly referred to as Modern C++. Although Alexandrescu was the first to coin the name, Modern C++ can be interpreted in several different ways today.4

Modern C++ will often imply the use of core features introduced in C++11. Some headlining features of this standard include smart pointers, move semantics, and multi-threading support. To a lesser degree, the use of the Boost library may also be implied in reference to Modern C++.

C++20 and Beyond

A report from the ISO C++ Committee has confirmed a significant list of features that will be incorporated into C++20.5 The addition of modules, coroutines, and concepts are highly anticipated.

C++ remains the leader in real-time applications in which reliability and performance are prioritized. The strengths of C++ are its flexibility and ability to be re-purposed for new hardware and complex systems. In a recent interview, Bjarne Stroustrup reflected on the history of C++, and optimistically predicted the omnipresence of C++ into the future.6


References

[1] A History of C++: 1979 - 1991 by Bjarne Stroustrup
[2] The Development of the C Language by Dennis Ritchie
[3] Standard Template Library Lecture
[4] What Does Modern C++ Really Mean?
[5] 2019-02 Kona ISO C++ Committee Trip Report
[6] 40 Years of C++ with Bjarne Stroustrup: Webinar by Udacity (Streamed April 25, 2019)