Yeah that's one of those quotes that has done more harm than good. It's roughly equivalent to the fallacy of the grey - some things are crap so everything is equally crap.
In reality nobody (sane) would claim that Bugzilla is better than Phabricator for example. Some project management tools are better than others.
He's right, though. C++ exists because it was compatible with C code. Not having to rewrite into Java was a major advantage and justifies most of the terrible design decisions made as a result.
Interesting, I think you're interpreting the quote in a different way to me.
It it "People complain about C++ and not Foo because even though Foo is better, C++ had to be crap in order for people to use it."
Or "People complain about C++ and not Foo because although they are equally crap, nobody uses Foo so there's nobody to complain about it."
I always thought it was the latter. Unfortunately I can't find much more on where he actually said this than his own quotes page which also doesn't really clarify anything: https://www.stroustrup.com/quotes.html
Speaking as a C++ developer on GPUs, it's mostly the first.
There's so many problems that no other language has due to the backwards compatibility guarantees Bjarne made to get companies using the language.
For example, C guarantees ABI compatibility. Object files from an older compiler/standard can be linked with newer versions of the compiler/standard. This is great if you want to distribute a proprietary library to end-users without revealing source code (libcuda & legacy enterprise tools).
But this guarantee applied to C++ means a templated function in the standard library can almost never change the implementation.
As a result of extending the guarantee to templates, the C++ standard library must create new classes and functions then deprecate the old ones, meaning they can't do basic optimizations to older code. A big complaint is "too many ways to do the same thing".
Rust doesn't make this guarantee.
That allows them to make a cleaner language with less duplication, but mostly forces Rust crates to be open-source.
Nvidia shipping libcuda.so in Rust means having to upgrade Rust constantly and potentially forcing customers to, or releasing the CUDA source code which hurts their competitive advantage.
Bjarne could've designed a number of OOP languages in the 70s and 80s. Smalltalk, Eiffel, and Simula, were better languages. But he built C with classes which is the reason it's used today.
> but mostly forces Rust crates to be open-source.
In practice how many closed source C++ libraries are there? I can't recall using a single one despite working on many closed source C++ applications. I'm sure they exist but a closed source Rust crate could just do what many C++ libraries do anyway - wrap a C ABI with a thin open source Rust shim.
> which is the reason it's used today.
Obviously it helped that C++ was backwards compatible with C, but all of those languages you mentioned use garbage collection and need some kind of runtime so they were never in the running for a systems programming language like C++. (I know "systems programming" is ambiguous but you know what I mean...)
I totally agree that the requirement of backwards compatibility with C made C++ a lot shitter. The most obvious examples are the automatic type coersion and the insane type syntax.
at least bugzilla is actively maintained. Abandonware over something Mozilla, Red Hat, Apache, GNOME, and KDE still run production workflows on isn't an obviously sane choice
In reality nobody (sane) would claim that Bugzilla is better than Phabricator for example. Some project management tools are better than others.