The other major problem for C++ is that correct C++ basically looks like nonsense, because the committee insists on pushing dangerous footguns that nobody sane would ever use in normal codebases through yet takes their sweet time with adding basic functionalities like pattern matching or even "print", which is somehow finally added in C++23. Worse still, nothing is ever really allowed to be removed/deprecated from C++, so you have decades of accumulated syntax debt that nobody is allowed to actually fix.
I think the biggest issue with C++ is that despite the fact that 90% of the language just should not be used in any normal code, period, there really is nothing that can replace C++ in its niche of high performance, low-level systems level programming. There is a good language buried underneath C++ somewhere, it's just that nobody has taken the time to extract it.
Well.. "C".. though I wouldn't go so far as to call that a good language, either.
But the major players do seem to be happy to replace their C++ code with Rust.
Perhaps it's time to ease up on the backwards compatibility. Especially in the era of AI.
Past discussion (653 comments): https://news.ycombinator.com/item?id=42231489
also at the time this is what HN wrote about it: https://news.ycombinator.com/item?id=42231489
Why would anyone expect big broad changes? And historically, whenever they did happen anyway through forced compromise, they resulted in failure because they were not consistently implemented.
The only way that works is small compatible and iterative changes.
Refactoring work, terrain tested code?!?
https://www.joelonsoftware.com/2000/04/06/things-you-should-...
Did they decide to keep things as is or rewrite in Rust with LLM assistance in the couple years since this article? Carbon seems to have gone nowhere.
Carbon?
Alas, C++ still mostly does its libraries via conceptual copy-and-paste (#include). So that would need to be fixed, if you wanted to mix-and-match dialects. You could probably keep '#include' syntax, but subtly change its meaning.
The issue with Netscape (per that article) was that it was a rewrite, not a refactor. I.e. replacing all the existing code with new code. That's why it took a long time to release a new version: the previous code hadn't changed and the new code wasn't functionally equivalent to the existing code, let alone have any new features.
If you've worked on technical problems with an IETF Working Group you'll know what actual consensus looks like. If you've been around a while you might even have seen abuse of process used to dodge rules and seen demonstrated before you why we need consensus anyway. ISO's procedures are probably adequate for its original goals but they're completely inappropriate for designing a programming language. SC22 should never have existed and is entirely the wrong place to do this work.
I'm critical about some choices made with C++20 and after, like the mess that modules are, and the too-little-too-late ranges library. C++26 is also a joke imho. But on the other hand, working with std::optional and (in C++23) std::expected is so much better than without. The thing is nobody forces you to use every single feature of a new standard, but I would not recommend ignoring very good tools just for the sake of it.
actually it is very explicitly pushing to refactor and rejuvenate the working field tested code, instead of green field rewriting it.
elsewhere he goes on to what's needed for that, also see the great both entertaining and informative fosdem talks about rejuvenating LibreOffice
Most programming languages "go nowhere" in the sense that they never end up used for lots of real world projects - but they can have interesting and useful ideas which inspire future languages.
Google writes a tremendous amount of new code. You can reap a large portion of the benefits by using Rust for new code.
At least as far as public info goes it's still being worked on. The GitHub repo [0] has pretty consistent activity and some recent-ish talks [1], one of which says that they are considering a 0.1 release "early next year".
PS: it's funny I wrote my comment three days (and not an hour) ago.
Even in those domains there are efforts to do things in Rust, although it's unclear when Rust is going to be an actually serious/viable option.
I suspect C++ will become less of a "mainstream" language but only relevant in those specific domains. OS / Services will consider alternatives first.
C++26 will allow billions of lines of pointless serialization boilerplate to finally be deleted, adding the basic reflection functionality that most other languages have had for decades.
Not much has changed, though, it still is. Just with a lot more bells and whistles around it
an active project indeed!
That's not the biggest upside of move semantics. You can't safely express smart pointers without move semantics. They tried with std::auto_ptr, and it didn't work.

Zero Ranger.
Toggle original/dithered image
There seems to be a lot of fighting and arguing over the future of C++.
On Reddit and a certain orange website, definitely, but also surely at the official C++ standard committee meetings. You don’t need to look very far.
EDIT (25-11-2024): Typos and phrasing. Mentioned on HN, r/cpp, lobste.rs.
It looks like we’re in the following situation:
In the meantime:

I don’t know about you, but if I were to look at all of this as an outsider, it sure would look as if C++ is basically falling apart, and as if a vast amount of people lost faith in the ability of C++’s committee to somehow stay on top of this.5
People seem to be looking for other solutions.
Say, Google. Google evidently lost faith in ’the process’ ever since the ABI-vote. This isn’t a loss of faith in the language itself, Google has one of the largest C++ codebases in the world, and it has served them incredibly well. It’s a loss of faith in the language’s ability to evolve as pressure mounts from different angles (potential government regulations, competing languages, a desire for better performance and safety guarantees from key players, etc.).
So what’s the problem? Why doesn’t C++ just…change?
Well, figuring that out is easy. Just look at what Herb Sutter said in his paper on profiles:
“We must minimize the need to change existing code. For adoption in existing code, decades of experience has consistently shown that most customers with large code bases cannot and will not change even 1% of their lines of code in order to satisfy strictness rules, not even for safety reasons unless regulatory requirements compel them to do so.”
– Herb Sutter
Cool. Is anyone surprised by this? I don’t think so.
Now, let’s contrast this with Chandler Carruth’s biography on the WG21 member page:
I led the design of C++ tooling and automated refactoring systems built on top of Clang and now part of the Clang project. […]
Within Google, I led the effort to scale the automated Clang-based refactoring tools up to our entire codebase, over 100 million lines of C++ code. We can analyze and apply refactorings across the entire codebase in 20 minutes.
Oh. Do you see it? (Yes you do, I highlighted it.)
It’s “automated tooling”. Except it’s not just that, automated migration tooling is just the peak, the single brightly glowing example.
We’re basically seeing a conflict between two starkly different camps of C++-users:
One of these groups will be capable of handling a migration somewhat gracefully, and it’s the group that is capable of building their C++ stack from versioned source, not the group that still uses ancient pre-built libraries from 1998.
This ability, to build the entire entire dependency stack from versioned source (preferably with automated tests) is probably the most critical dividing line between the two camps.
In practice, of course, this is a gradient. I can only imagine how much sweat, tears, bills and blood must’ve flown to turn big tech codebases from terrifying balls of mud into semi-manageable, buildable, linted, properly versioned, slightly-less-terrifying balls of mud.
With the bias of hindsight, it’s easy to think of all of this as inevitable: There was a clear disconnect between the needs of corporations such as Google (who use relatively modern C++, have automated tooling and testing, and modern infrastructure), and the (very strong) desire for backwards compatibility.
To go out on a limb, the notion of a single, dialect-free and unified C++ seems like it’s been dead for years.6 We have, at the very least, two major flavors of C++:
uniqe_ptr, constexpr, lambdas, optional, but that’s not the point. What matters is the tooling.You’ll notice that the main difference isn’t about C++ itself at all. The difference is tooling and the ability to build from versioned source in any clean, well-defined manner. Ideally, even the ability to deploy without needing to remember that one flag or environment variable the previous guy usually set to keep everything from imploding.
How much of eg. Google’s codebase is following ‘modern’ C++ idioms is pretty much secondary to whether the tooling is good, and whether it can be built from source.
A lot of people will tell you that tooling isn’t the responsibility of the C++ standard committee, and they are right. Tooling isn’t the responsibility of the C++ standard committee, because the C++ standard committee abdicates any responsibility for it (it focuses on specifications for the C++ language, not on concrete implementations)7. This is by design, and it’s hard to blame them considering the legacy baggage. C++ is a standard unifying different implementations.
That said, if there’s one thing which Go got right, it’s that tooling matters. C++, in comparison, is from a prehistoric age before linters were invented. C++ has no unified build system, it has nothing even close to a unified package management system, it is incredibly hard to parse and analyze (this is terrible for tooling), and is fighting a horrifying uphill battle against Hyrum’s Law for every change that needs to be made.
There’s a massive, growing rift between those two factions (good tooling, can effortlessly build from source vs. poor tooling, can’t build from source), and I honestly don’t see it closing anytime soon.
The C++ committee seems pretty committed (committeed, if you will) to maintaining backwards compatibility, no matter the cost.
I don’t necessary disagree with this, by the way! Backwards compatibility is a huge deal for a lot of people, for very good reasons. Other people don’t care nearly as much. It doesn’t matter which group is “right”: It’s just that these are incompatible views.
This is why profiles are the way they are: Safety Profiles are not intended to solve the problems of modern, tech-savvy C++ corporations. They’re intended to bring improvements without requiring any changes to old code.
Likewise, modules. You’re intended to be able to “just” import a header file as a module, and there should not be any sort of backwards compatibility issues.
Of course, everyone loves features which can just be dropped-in and bring improvements without requiring any changes to old code. But it’s pretty clear that these features are designed (first and foremost) with the goal of ’legacy C++’ in mind. Any feature that would require a migration from legacy C++ is a non-starter for the C++ committee since, as Herb Sutter said, you essentially cannot expect people to migrate.
(Again, building features with ’legacy C++’ in mind is not bad. It’s a completely sensible decision. )
This is something which I try to keep in mind when I look at C++ papers: There’s two large audiences here. One is that of modern C++, the other is that of legacy C++. These two camps disagree fiercely, and many papers are written with the needs of one specific group in mind.
This, obviously, leads to a lot of people talking past each other: Despite what people think, Safety Profiles and Safe C++ are trying to solve completely different problems, for different audiences, not the same ones.
The C++-committee is trying to keep this rift from widening. That’s, presumably, why anything in the direction of Safe C++ by Sean Baxter is a non-starter for them. This is a radical, sweeping change that could create a fundamentally new way of writing C++.
Of course, there’s also the question of whether specific C++ standard committee members are just being very, very stubborn, and grasping at straws to prevent an evolution which they personally aesthetically disagree with.
Far be it from me to accuse anyone, but it wouldn’t be the first time I heard that the C++ committee applied double standards such as: “We expect a full, working implementation across several working compilers from you if you’d like to see this proposal approved, but we’re still happy to commit to certain vast projects (eg. modules, profiles) that have no functioning proof of concept implementation.”
If this were the case (I genuinely cannot say) then I really wouldn’t know for how much longer C++ could continue going down that road without a much more dramatic split.
And all of that that is not even getting into the massive can of worms and problems that’d be caused by breaking ABI compatibility.
If you want to be cynical, you can interpret this as an explicit “Nuh-uh” towards Rust’s lifetime annotations, and Sean Baxter’s ‘Safe C++’ proposal. If you want to be less cynical, it’s at least a bitter awareness of the fact that the industry doesn’t care to refactor existing code. ↩︎
“You don’t pay for what you don’t use.” Essentially, an existing C++ feature can only ever impact your runtime performance if you actively use it. This is not quite compatible with a stable ABI since a stable ABI (understood as a feature of C++) precludes certain performance improvements. ↩︎
I think Carbon is a lot more interesting than most people give it credit for. Ask me about my opinion sometime. I might write a post on it. EDIT: Done. ↩︎
We’re getting there! GCC apparently just added support for the std module a few days before this article was posted. It might still take a while, and who knows about the ecosystem, but there is progress! ↩︎
Is it falling apart? Eh. Depends on what you mean. All that C++ code is not going to go anywhere. So in that sense, no. C++ code will continue to exist, at the very least. ↩︎
Whether it was ever alive, with all sorts of different compilers, and their own compiler extensions is a different question. ↩︎
This is slightly unfair. There’s a study group dedicated to tooling, SG15. For example, see this post. Of course, the entire process is still focused on writing papers, not on eg. shipping a canonical package manager. ↩︎