The Two Factions of C++
A recent post dissects the growing schism within the C++ community, revealing two distinct factions: modern, well-tooled tech giants versus legacy codebases shackled by backward compatibility. This deep dive into the committee's struggles, the rise of Rust, and Google's Carbon project highlights why the language's future is a contentious and often frustrating topic for developers on Hacker News.
The Lowdown
The C++ ecosystem is fractured, facing internal disagreements and external pressures that paint a grim picture for its unified future. The author argues that C++'s Evolution Working Group (EWG) is doubling down on a trajectory that prioritizes backward compatibility and avoids breaking changes, even as the US government warns against memory-unsafe languages and major tech companies like Microsoft, Google, and AWS pivot towards Rust or even C++ successors like Carbon.
Key issues contributing to this divide include:
- Committee Inertia: The EWG's commitment to no ABI breaks and avoiding "viral annotations" like lifetime safety, often seen as maintaining incompatible goals with modern needs.
- External Pressure: Government warnings and the significant adoption of Rust by major tech players signal a shift away from C++ in critical new development.
- Key Figures Departing: The departure of figures like Herb Sutter from Microsoft and Google's reduced participation in C++ development, leading to efforts like Carbon, underscore a loss of faith in the official evolution process.
- Unimplemented Features: Long-promised features like modules remain elusive, and "Safety Profiles" are seen as a compromise for legacy code rather than a holistic safety solution.
- Developer Frustration: The arduous and often fruitless process of proposing changes to the C++ standard committee leaves many contributors feeling alienated.
At the core of this conflict are two distinct "factions" of C++ users:
- Modern C++ Adopters: Characterized by tech corporations with robust automated tooling, the ability to build everything from versioned source, and a willingness to embrace change for performance and safety. They can handle migrations and refactoring gracefully.
- Legacy C++ Maintainers: Represented by older organizations with monolithic, often unmaintainable codebases, poor tooling, and an inability to easily build dependencies from source. For this group, backward compatibility is paramount, and any breaking change is a non-starter.
The author posits that the C++ committee, by prioritizing features designed for "Legacy C++" (e.g., Safety Profiles, Modules designed for minimal disruption) and steadfastly refusing ABI breaks, is deepening this rift. This approach leads to a situation where the "modern" and "legacy" camps are essentially speaking different languages, with the committee seemingly unwilling to entertain radical changes that could fundamentally improve the language, like Sean Baxter's Safe C++. This commitment to the past, while understandable for some, increasingly isolates the language from the needs of its most innovative users.
The Gossip
Committee's Convoluted Consensus
Commenters discuss the nature of the C++ standardization committee, highlighting how its consensus-driven approach inevitably leads to slow, incremental changes rather than the bold shifts some might desire. The difficulty of achieving broad agreement among many stakeholders is seen as both a strength in maintaining stability and a weakness in adapting to modern demands, with some suggesting this leads to inconsistent implementations and frustrating stagnation.
Version Vagaries and Value
This theme explores the debate around the value and necessity of newer C++ standards compared to older, more stable versions. One perspective argues that chasing the latest C++ version is costly and offers diminishing returns, with C++98/Qt5 being "good enough." The counter-argument emphasizes the significant benefits of modern features like move semantics, smart pointers, and `std::optional`, while still acknowledging issues with some C++20+ additions like modules. The discussion reflects a tension between stability and progress, and the optionality of adopting new features.
Google's Gone, Carbon's Catch?
A singular but pointed comment queries the current status of Google's alternative language, Carbon, and whether the company's efforts have shifted since the article's implied timeline (suggesting LLM assistance or a full Rust rewrite). This highlights the ongoing interest and uncertainty surrounding Google's commitment to C++ and its successor projects, reflecting the broader industry's search for alternatives.