How can we tell?
When pondering a question such as the title of this chapter, we are faced with the big challenge of selection. The choice of libraries for any project is completely contextual, and it fully depends on what the project is trying to solve. Of course, there are some features that are needed no matter what the project does, such as logging or unit testing, but what should we pick beyond these?
After all, it seems deeply unfair to compare web development in C++ with web development in Java, as it is to compare systems programming in C++ with systems programming in Java. Neither is C++ used for web development extensively, nor is Java for systems programming. In fact, C++ has had its own niche for a long time, and while it has been slowly eroded by Java, C#, Rust, and Python, it still holds the fort for use cases such as game development, firmware, high-frequency trading, engineering applications, automotive, systems programming, and probably others. The other languages have little traction in these domains, for very good reasons related to C++’s flexibility, performance, and control.
Another problem is the sheer number of libraries that exist for the aforementioned languages, particularly C++. An advantage of the venerable C++ is that programmers have had time to develop behemoth libraries such as Boost, which has no equal in the worlds of Java or C# (excluding the standard libraries), and absolutely no contender in the world of Python. We could argue that JavaScript has something similar to React and its surrounding ecosystem. However, in terms of the volume of available libraries, C++ looks dominant.
These observations leave us with one characteristic that we need to account for: how modern is the set of libraries? What would we want from a modern programming language and its ecosystem? Where does C++ stand from this perspective? Let’s examine these questions.