Discussion about this post

User's avatar
Sergio DuBois's avatar

Even granting the premise that the C++ standard cannot specify its environment, it isn’t obvious that this pushes us toward abandoning ABI stability. If anything, the absence of a specified environment raises the bar for changes that require global coordination. When a language has no reference runtime, no distribution channel, and no authority to enforce synchronized upgrades, the only leverage it has is whatever contracts the ecosystem already honors. The question isn’t whether the standard can define the environment. It can’t. The question is whether breaking ABI assumes a kind of control the language has never actually possessed.

Expand full comment
Steve Sperandeo's avatar

Hi Vinnie,

I just went through P9999R0 and you raise some critical points--ones I think are overdue for our consideration. Here are some further points:

- The Cargo Advantage: It’s becoming impossible to ignore that Rust’s Cargo is a fundamental competitive advantage over C++. It’s not just about "convenience"; it’s about the velocity of the entire ecosystem. Cargo is a delight to use; and, in my opinion, one of Rust's strongest advantages. C++ _must_ create a similar tool to remain competitive.

- The Meritocracy Gap: We currently have no mechanism to embrace a true meritocracy for data structures. Why can't we have a "blessed" competition for things like Swiss Tables or better concurrency primitives? We need a way for the committee to provide "security and performance reviews" for external packages so they can be adopted with confidence without waiting a decade for an ISO seal. Empirically-tested data structures and packages should win the day, and receive the full recommendation from the C++ community. The strongest solutions should rise to the top. Move fast and promote strong packages. Move fast and improve things.

- Missing Modern Pillars: We are still struggling with basics while the industry has moved to IPC, rich thread pools, cross-platform inotify, C++ pandas/jupyter notebook kernels, distributed programming, and distributed concurrency. C++ should be leading here, but the lack of standardized "ecosystem tools" makes these tasks feel like reinventing the wheel every time.

- Delight as a Metric: Even the most advanced systems engineers appreciate a polished, easy-to-use interface. There’s a misconception that making things easy to use is "appealing to the lowest common denominator." It’s actually the opposite. It’s about making high-performance tools delightful to use so that we can focus on solving the actual problem, not the boilerplate.

- No Inroads: I want to teach my kids C++. I want it to be their first language. I don't want to teach them python as their first language. Where do I even start? Godbolt some examples? How do engineers start their careers in C++? The fragmentation and lack of "promoted" packages is also present in training materials. C++ should have an answer for this. Include people. Make C++ more inclusive by getting organized and promoting the strongest option. The C++ Guidelines are a great start, but we need more. We can do much better.

The "infinite pain" of technical debt you mentioned is real. Thanks for putting this on paper so clearly.

Best,

Steve

Expand full comment
1 more comment...

No posts

Ready for more?