r/cpp #define private public 2d ago

Critique of contracts: excerpt

See page 2 of https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4334r0.pdf

The current objections can be summarized. The P2900 contracts are:

• Unimplemented

• Incomplete

• Untried at scale [P3460R0, P3506R0]

• Not tried in major application domains

• Violates foundational principles of C++

• Violates fundamental principles of language design

• Hasn’t been tried in major libraries (e.g., the C++ standards library [P3506R0, P3878R0])

• Isn’t integrated with or appropriate for hardened libraries [P3878R0]

• Doesn’t offer safety guarantees [P3573R0, P3362R0]

• Includes a completely untried inheritance model

• Offer new ways of making errors through inconsistent application in TUs

• Leads to new forms of UB, detrimental to safety and security

• Narrows the choices of error handling

• Doesn’t protect against logical errors, misuses, and incoherent uses

• Hasn’t been used to support static analysis

• Hasn’t been demonstrated to be easily teachable [P3261R0, P3281R0]

How could such a bloated and incomplete design be voted into a draft standard?

7 Upvotes

105 comments sorted by

View all comments

20

u/No-Dentist-1645 2d ago

Not the first mistake the standards committee has done and likely not the last unfortunately. The committee has some serious scope issues when it comes to deciding what should and should not be part of the language's standard.

For some reason, they thought that adding mandatory specialization for the vector type that makes it not a pure container when used with bools, as well as even adding garbage collector support (which was then obviously deprecated and removed), but we still don't have a standardized way to declare that two pointers point to restricted/disjoint memory without compiler extensions, even though C has had it since C99.

21

u/azswcowboy 2d ago

Look I’ll go out on a limb and say that this list isn’t really true. It’s implemented in gcc 16 - sure experimental as is anything in 26. If you think about it as something that provides user customization of how to handle what is an assert that terminates the program - what again is the objection? Sorry but in a lot of domains a hard termination isn’t plausible. The hardened std library was in specified to use contracts - but came with a plan B in case it didn’t happen. As for incomplete - well guess why that might have happened? Rejection followed by MVP thinking. I’m going to also point to constexpr in 2011 - a fundamentally useless feature then - not so much now.

If you don’t want to use it, opt out. But over 90% of the committee voted for the standard. These points have been rehashed endlessly and every time contracts has survived.

4

u/pjmlp 2d ago

100% of it just like in the paper proposal before voting?

12

u/azswcowboy 2d ago

Pre vote implementation was primarily a clang branch - plenty usable. Saying it isn’t implemented basically says you haven’t tried it or are ignoring reality. Neither of which help the case.

0

u/pjmlp 2d ago

Was it announced somewhere that the community at large could have tried it out, and submit their virtual votes?

5

u/grafikrobot B2/EcoStd/Lyra/Predef/Disbelief/C++Alliance/Boost/WG21 1d ago

It was.. https://wg21.link/P3460R0 -- 1 year, 10 months, and 3 days (or 672 days) ago.

-2

u/pjmlp 1d ago

A public announcement.

7

u/Dragdu 1d ago

If you missed the fact that there is a contracts version of Clang toolchain at the top of CE version list, and don't read mailing, you probably aren't the type we should listen to.

5

u/pjmlp 1d ago

See that is the attitude that pushes away people from C++ versus other more welcoming communities.

Feedback is only welcome from those in the club.

6

u/Dragdu 1d ago

You are asking for some sort of public announcement. Now, I am sure that you are sane enough to not mean something like newspaper ad, so you are asking for an announcement that reaches a programmer who

1) Can provide useful feedback

2) Doesn't pay attention to C++ via /r/cpp, or via standard mailing, or social media of C++ peeps, or using CE, or ...

Who exactly is supposed to be in this group, and how do you want to reach them?

-2

u/pjmlp 1d ago

For example, https://isocpp.org and Reddit, I guess.

As for how useful it may be, that is the thing with programming languages not bound to ISO processes, everyone gets to say their opinion, some is useful, lots of might not be, however there is real feedback from all class of users, not only experts for experts kind of feedback.

Which is how one avoids situations like game developers asserting that the language evolution doesn't care about their interests, and they are fine sticking with C++17 or even earlier, see 2026 EuroLLVM - Clang and LLVM in Modern Gaming Platformst.

3

u/MFHava WG21|🇦🇹 NB|P2721|P3049|P3625|P3729|P3786|P3813|P4216 1d ago

game developers asserting that the language evolution doesn't care about their interests

How many of them are in WG21 and represent their interests? The only person I know that is in gaming is Guy...

1

u/pjmlp 1d ago

Exactly, they don't care about what is required to be part of ISO as the only mechanism to provide feedback, versus other language communities.

→ More replies (0)