C++26 Disapproved

(andreasfertig.com)

121 points | by thatxliner 4 hours ago

15 comments

  • jandrewrogers 42 minutes ago
    As someone who writes high-reliability C++ but is completely outside the standards process, I see the issues with C++ Contracts. It isn’t clear that it solves a problem that anyone has in real codebases, especially after C++20 concepts.

    If you were already writing high-reliability C++ then the benefits are difficult to quantify. If you weren’t writing high-reliability C++ then it saves you almost nothing over doing the standard idioms of high-reliability C++ that were already available to you at very marginally more cost. It does standardize expression of it in narrow cases but the payoff seems minimal.

    Most of what C++ Contracts delivers is a mashup of what you can already do with constexpr and C++20 Concepts. I like reliability features but this feature, as delivered, looks fairly useless if you already use reliability features. A compelling standard would need to make much deeper guarantees out of the box. And the compiler can already see through most compositions of constexpr and C++20 concepts, which is already very expressive.

    C++ Contracts looks a bit like a feature that was designed long before current standard features existed.

    • drivebyhooting 39 minutes ago
      Your comment just made me realize contracts is different from concepts (which are basically bounded genetics, right…?)
      • jandrewrogers 18 minutes ago
        C++ concepts evaluate the properties of types at compile-time. You can inject arbitrary constraints on type properties anywhere in the code including conditional codegen. It is a way of asking if a type “can express this complex set of abstract things or has this enumerated set of properties” with almost arbitrary detail. They are extremely powerful in terms of expressiveness and specialization of code. Insanely good for performance and reliability engineering.

        One of the best features to be added to C++ in many years.

        C++ contracts are an attempt to bring C asserts into the C++ age. The weakness of C++ contracts is that they are mostly syntactic sugar over C asserts. If you really care about this type of thing, you probably already have a custom C++ assertion framework that is at least as nuanced if not more.

        The promise of C++ contracts is that they can aid formal verification, which would be great. As delivered, it can’t do much more than was already possible, which will inhibit adoption.

      • stingraycharles 34 minutes ago
        Concepts are evaluated compile time and make a lot of TMP more elegant. Contracts are runtime check, akin to assertions.

        Phrased differently, contracts are to concepts what assert is to static_assert.

      • rramadass 23 minutes ago
        Concepts are for Types at compile time while Contracts are for Values at runtime.
    • quotemstr 30 minutes ago
      Huh? Concepts are types of types. Contracts are fancier, structured runtime assertions. What does one have to do with the other? They're nothing alike.
      • jandrewrogers 8 minutes ago
        That’s exactly my point.

        Contracts notionally offer the ability to lift some runtime assertions to compile-time. That is how it was sold. Except they don’t in practice.

        Meanwhile, concepts + constexpr if used artfully deliver that in practice, including for many cases that contracts were supposed to solve.

        I push all verification to compile-time to the extent possible.

      • rramadass 21 minutes ago
  • LugosFergus 1 hour ago
    I get why some folks would like to see contracts in the language, but C++ is also buckling due to the shear complexity that's getting tacked on to it. I'd rather see more proposals such as C++26's "erroneous behavior" that attempts to reign in the language's shortcomings.
    • airstrafer 42 minutes ago
      Agree. There's an argument that Contracts reduces the complexity of using the language because it offers a more readable alternative to template metaprogramming (also, it has better error messages). But the argument really falls apart when you review WG21's track record for other features.

      Like for example, Coroutines were billed as an easier way to write concurrent code, but personally I think it completely failed and ended up being hopelessly complex and confusing. Modules are the same - superficially they make things simpler, but when people actually go to adopt it, the details are so complex that nobody bothers.

  • skrrtww 1 hour ago
    Personally I'd like to see C++ chill out on new features and maybe sort out the shitshow that is char8_t and std::filesystem.
    • Krutonium 37 minutes ago
      Maybe a slightly faster std::regex or whatever it's called; apparently it's horrendously slow for no benefit.
      • stingraycharles 33 minutes ago
        Ranges need work as well, there’s lot of opportunity to improve things there.
  • aldanor 8 minutes ago
    Approval of runtime failures essentially failed at runtime
  • nukanse 15 minutes ago
    C++ should focus into turning SIMD into a higher level language instead of being a giant collection of intrinsics. Avx code is unreadable.
    • jandrewrogers 3 minutes ago
      SIMD cannot be solved at the compiler level. The capabilities of silicon SIMD implementations are fundamentally so disjoint that code using SIMD requires contextual and platform-specific data structures and algorithms.

      SIMD on different silicon is incompatible at layers of abstraction far above the codegen manipulation a compiler can do.

  • imaginit 34 minutes ago
    > contracts. Put simply, a number of NBs believe that this feature is not yet ready for release.

    The ISO National Bodies voted wisely. C++ has had so many ill defined features over the decades and they wanted to avoid yet another one.

    I don't have any skin in the game. I've stayed with the C++11 feature set.

  • Animats 31 minutes ago
    At this point, changes to major programming languages have to adapt to a world in which AI systems generate and change much of the code. C++ contracts may be good or bad, but they are from before strong AI coding systems. So it's time to rethink.

    And we have no idea what AI systems will be doing in 2027.

  • drivebyhooting 40 minutes ago
    I used to be a C++ programmer but I haven’t done it in a few years.

    I pretty much do all my low level vibe coding in Rust. Is C++ still relevant? What prevents Rust from completely supplanting it?

    • gucci-on-fleek 4 minutes ago
      Even if C++ is irrelevant for new code, there's so much software already written in it that we'll be maintaining it for decades to come. I'd argue that Cobol and Fortran have been mostly obsolete for new code for almost 30 years now, yet both are still widely used today, and they've even had major updates in the past decade [0] [1]. And there's even more software written in C++ than there is in Cobol or Fortran, so I don't think that C++ is going away any time soon.

      [0]: https://en.wikipedia.org/wiki/COBOL#COBOL_2023

      [1]: https://en.wikipedia.org/wiki/Fortran#Fortran_2023

    • fancyfredbot 14 minutes ago
      C++ is the third most popular programming language according to TIOBE behind C and python. It's got an 8.87% ranking. So yes it looks like C++ is still relevant. In fact C++ usage has risen slightly.

      Rust is in tenth place with 1.44% ranking, it's rising fast but still has a long way to go before it catches C++.

      I'm not going to speculate about why Rust hasn't yet supplanted C++ but I will say I don't find it surprising.

    • willtemperley 38 minutes ago
      Your Rust very likely runs in a C / C++ environment.
    • anonymous908213 27 minutes ago
      99.9% of all system code in the world is still written in C/++. It runs your Java, C#, Javascript, Python, PHP, basically every production language that isn't Go or Rust. It runs the two most popular game engines in the world. It runs your phone, server, and laptop, no matter which of any you use. It runs your car. It runs almost every embedded and industrial application on the planet.

      Is it still relevant, JFC. The way people on this forum manage to sequester themselves from reality. Let me reverse the question: is Rust relevant? Mozilla developed Rust, abandoned their Rust browser, and only 10% of Firefox is written in Rust. Maybe 1% of modules in Chrome and Linux are written in Rust, if that. And what of Rust applications written from scratch? Can you name ten applications that have, say, exposure to more than 100,000 users? Impossible mode: they can't be developer tools only used by other developers (uv, ripgrep, etc.), they must actually be applications used by enterprises or consumers.

      • devsda 15 minutes ago
        I read that as "is c++ still relevant for new features, given Rust and its popularity", not "who is still using C++".

        Personally, I think it is still relevant. Many people thought Kotlin could overtake Java, Java reinvented itself with new initiatives/features and was saved from becoming irrelevant.

        Rust also has the LLM advantage which is where I think the "if it compiles it works" nature of Rust is easier for manual changes and maintenance when needed.

      • qtqtqt 8 minutes ago
        > basically every production language that isn't Go or Rust.

        Even in their case. Rust depends on LLVM which is wriiten in C++. Go needs libc on some platforms.

      • adzm 18 minutes ago
        As a big c++ fan, new projects are generally choosing Rust, which I would agree with, even though I do indeed love C++
  • wahern 40 minutes ago
    Correct me if I'm wrong, because I don't follow C++ very closely, but based on previous discussions on HN, the opposition paper obliquely referenced in the blog post was presumably Bjarne Stroustrup's, who IIRC had already said he would work behind the scenes to make sure the final pro forma vote to standardize C++26 would fail.
    • Maxatar 34 minutes ago
      Yes that's right, and from following some threads on reddit about this, he used some really dirty tactics to get it to fail, like scheduling certain snap elections to happen with very short notice at times of the day when people who would oppose his point of view would likely be asleep.
      • adzm 17 minutes ago
        So is he a hero, or villain? Does it all come down to concepts?
  • ranger_danger 1 hour ago
    Maybe this time could be used to consider memory safety much more seriously.

    EDIT: Would love to know why people are so angry about that?

    • SolarNet 1 hour ago
      The issue that caused this to be voted down is often seen as a memory safety solution (not something I personally 100% agree with, but thats a broad view). And the rest of this release includes other memory safety work. And it was voted down and delayed for apparent political reasons (again not a view I agree with).

      So most people will read your view as hypocritical/misinformed.

      • MBCook 30 minutes ago
        It could also be read as a straight up attack. Basically, a way of saying “why not follow Rust“ without having to say the word Rust.

        I think it was a fair question. As someone who doesn’t follow C++ I really don’t know what else was in the proposal. It’s nice to hear there is memory safety stuff.

    • GalaxyNova 1 hour ago
      Memory safety was solved in 1959 with the invention of lisp
  • hankbond 1 hour ago
    Maybe my reading comprehension has just nosedived but I could not find where this article discusses what the heck Contracts refers to?
    • AlotOfReading 1 hour ago
      You'll find plenty of info if you search for anything like "c++ contracts" [0], but the short of it is that they're just pre/post conditions on functions. Slightly improved assertions, basically.

      [0] https://en.cppreference.com/cpp/language/contracts

      • btown 48 minutes ago
        https://www.cppstories.com/2026/cpp26_contracts/ is IMO a better introduction.

        cppreference is often a bit too technical for its own good :)

        But I think there's a broader issue which is that if it took me multiple searches to find a good-enough visual "pitch" for what contracts look like in practice, its champions have not yet won hearts and minds - which brings us to the situation at hand.

        • bionhoward 40 minutes ago
          Oh im not a c++ guy but that actually looks pretty awesome because it’s like Hoare logic
    • SolarNet 1 hour ago
      Its a very inside baseball article. Contracts is a proposed C++ language feature for improving programmable assertions of program state. E.g. a better c++ version of C's assert function. That in theory will improve both safety and performance by letting people add more complex assertions (e.g. pre/post conditions) to functions.
  • youre-wrong3 41 minutes ago
    [dead]
  • vivzkestrel 1 hour ago
    - since you are a part of the voting group, i have a doubt

    - let us say tomorrow everyone were to consider removing all unsigned variables across c++

    - what is the impact in terms of compatibility for all the old c++ applications which i believe would be millions of them if not billions?

    - the reason i ask is they say do not unsigned anything as much as you can because overflowing the bottom below 0 is easy

    - has there ever been any consideration to get rid of unsigned xyz in c++?

  • SP3269 55 minutes ago
    Time to cancel the project. C++ acquired sufficient set of features over the years, becoming very PL/I-esque.
  • voakbasda 1 hour ago
    I feel like this is a bellwether event for society at large. Growing impasses between more and more segments of society. Diminishing trust leading to the inability to reach consensus. Maybe it’s just me though.
    • SolarNet 1 hour ago
      Perhaps it is, in this case it would be between money and everyone else specifically. Contracts is a pet project of Microsoft and the heavy money parts of the committee. They've basically shouted down the dissenters, hence the effectively unprecedented action of the rubberstamp portion of the process saying they dont think consensus was reached in a kosher way.
      • Maxatar 1 hour ago
        No one who developed contracts works for Microsoft. Of the like 20 people who contributed to the feature, 4 of them work for Bloomberg, so you could maybe argue that Bloomberg has a vested interest in the feature, but that's really stretching things.

        Support for contracts is fairly broad and spans numerous organizations.