On the other hand, Hell would freeze over before you could convince the business to throw the cpp codebase and replace it by anything else, without necessarily a lot of things to show to the customer. And as much as we like to criticize business decisions, here it is probably the right call.
However, if you are startup starting today, it would probably be a good idea to consider other options, that could be used as an advantage against incumbents.
Lots of code might not be updated, thing is, with C++20 I still get to compile my pre-C++98 code.
Even taking into account the breaking changes between language revisions, they are quite minor versus writing into another language.
Plus there are still lots of stuff missing, like a proper GUI library that can even compete with MFC, OWL, let alone something like UWP or Qt.
And that will be still be able to interop with the "everything else" that doesn't get updated.
(Perhaps not seemlessly, but certainly better than a Rust <-> C++ interop.)
But the interop story between modern cpp and older cpp is much better than the interop story between rust and older cpp.
That's named evolving and improving. And that's how a language stay alive.
gets(), exception specifications, semantic corrections for a couple of cases like decltype vs auto, auto original meaning, std::bind(), and several others
However they don't play a Python 3, and rather take the effort to minimize the impact of those changes.
C++ has opted to avoid those struggles by never removing features; you can disagree with that decision but it was done for good reasons.
The register keyword issue crops up because legacy code included and linked to modern C++ will occasionally have the word "register" affixed to a loop variable. Generally speaking, once you change standards, there is room to drop the old stuff. It's just gradual. Static analyzers do a lot to modernize code now too, so the situation is not as painful as it used to be.
[0] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p188...
This statement does not do justice to the process that led to the renaming of "Perl 6" to "The Raku Programming Language". If you are interested in the process, https://github.com/Raku/problem-solving/issues/81 will give you some of the discussion that happened online.
New code doesn't have to use old features.
Yeah but it's hard to manage in multiple ways. Is there good tooling to help? And it means a lot of references you could normally check are using features you can't use.
Plus none of your libraries are going to agree on what parts to use.
For writing memory safe code I already have .NET and JVM set of programming languages, so when I need to go outside of these platforms, I rather pick the tool that provides zero attrition with the existing tooling.
These are all issues that will be fixed, but they aren't yet there.
I know, C++ is a dirty snowball rolling downhill, gobbling up every feature it can put its tendrils on, and always has been, but it is getting silly.