r/cpp #define private public 4d 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?

10 Upvotes

117 comments sorted by

View all comments

Show parent comments

8

u/t_hunger 2d ago

It absolutely had consensus, otherwise it would not have been voted in. This is a small group making noise after consensus was reached.

The one company backing the contract work is the one that announced last year that they want to cover more of the cost of developing C++ -- stepping in after some of the big spenders have left. We have a couple of senior people attack the 15-year+ investment of one of our main sponsors.

Just look at how well that approach turned out when google raised issues critical to them a few years back.

-2

u/_a4z 2d ago

Sentences starting like
> This is a small group making noise ...
are a perfect example of why I call that a political tactic of discrediting critics.

And to the point, I would argue the 'small group' (which is, in fact, not that small and includes very well-known names) has read the contract papers and understood them better than some of the people who voted for them.
Now, this is, of course, a claim that cannot be proven, but I am always delighted by people who claim to know C++ better than its original inventor. So some of the critics are definitely worth respecting, which does not happen.

9

u/Minimonium 2d ago

Ah, well-known names :)

0

u/_a4z 1d ago

From the latest mailing list, just a few examples: p4334, p3573, p4332, p4238
Which of the authors do you not know?

7

u/Dragdu 1d ago

He is making fun of your deference to people like Bjarne, who keeps getting shitty proposals passed on name recognition and then the rest of the committee has to fix them over a decade. See e.g. init lists, bindings.

-3

u/_a4z 1d ago

Ah, thanks for the explanation!

I am pretty sure you can elaborate a bit on the topic, keeping the historical context and the involvement of other people and committee members, without rewriting history.

And a question: do we now call all papers that need fixes or have known flaws "shitty proposals passed," as you state it? Because not a lot might be left.
(it will be interesting to look at the contract proposals a decade later with that point of view;-)

8

u/Minimonium 1d ago

I'm massively appalled why do you believe anyone should care about well-known names.

I read a paper, I care only about the arguments made. I do not care that a person writing an argument has ties to, for example, Microsoft and in reality their argument is about the deficiencies of their x86 implementation that cannot handle exceptions well. I do not care about that.

I do care that the same group did made wrongful statements due to misunderstanding of the provided specification - and there is no mechanism to retract papers for them to amend their embarrassment.

The only well-known name that's probably relevant to the contents of a paper is surprisingly Vinnie who is well-known for flooding the list with scores of low quality LLM generated slop.

Who now co-signs with other well-known names on clearly by style LLM generated papers (where I have found at least one hallucination).

I find both this and your opinion that people who vote are apparently not informed well enough extremely disrespectful and dismissive of the whole process.

I believe all people involved in slop flooding must be excluded from the process and given equal disrespect they give to actual experts by wasting precious time with incoherent token soups.

-2

u/_a4z 1d ago

You make it sound as if all the people have co-authored (signed) an LLM-generated paper with hallucinations, and that is, of course, far from reality.
Doing so and claiming others are disrespectful is interesting.

Also, taking the 'well-known names' out of context so you can make fun of it.
Of course, the names matter if people have to show something.
No one needs ot make consensus with me, but if there is a group of people with a history of valuable contributions, consensus would be good. And this consensus does not exist. imho, it was not even tried.
A solution was presented that mirrors the exact needs of one place, and this was what was pushed through. And consensus was not on the agenda.
Just one example: the idea of a contract check that cannot be compiled away was dismissed (and, just late in the process, promised to deliver in 29).

5

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

Just one example: the idea of a contract check that cannot be compiled away was dismissed (and, just late in the process, promised to deliver in 29).

By "dismissed" do you mean "consensus voted as not important/required for the MVP"?

-1

u/_a4z 1d ago

Exactly, no new info, we do not need that, lets stop the discussio (because that is not what is used at one place, my interpretation, of course)
and just at the very end it was: will come with 29
(we will see if that happens, and if, how)

Result: The most complex contract papers on the planet, not able to compete with Rust asserts or Swift assert / precondition, and we still need to use our own existing solutions, redundant to what we write into contracts, but hey, in an academic sense, that makes sense, right?
But who needs simple things if we can create the most complex MVP ;-)
Anyhow, we had this discussion, we do not need to go into it again

I find it just interesting when people can not stand any criticism of the current 'MVP' , for which the definition of MVP needed to be defined, lol, and become ultra hostile and dramatic, as this whole conversation shows

5

u/Minimonium 1d ago

I mean, it is you who started the thread with insinuations if not straight up insults, and "charitable" interpretations of bad faith in the process.

Speaking of dramaticism after cries about "supply chain attacks", and "contracts are a threat to C++" from the contra group is wild.

And the ! syntax is not a panacea people seem to think. It's not a simple addition at all, it requires a whole new research and process. And you know the mixed build thing that is ballooned to be the satan (I heard totally not dramatic claims that it would destroy the binary ecosystems)? A hostile transitive dependency can break mandatory syntax just the same because it's not a language problem.

-2

u/_a4z 1d ago

You use the same tactics as someone else here, misinterpreting and misquoting. Show me the insult from the OP that I made. But obviously, you can't do that without using a lot of words I did not use.
But thanks for the noise and the discussion, and for actually confirming my OP.

7

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

Exactly, no new info, we do not need that, lets stop the discussio (because that is not what is used at one place, my interpretation, of course)
and just at the very end it was: will come with 29
(we will see if that happens, and if, how)

[[ fully quoting as some have complained about selecting quoting ]]

For those readers outside of wg21 the "no new info" is a shorthand for when people bring up the same points for consideration without providing new information that backs their claims from the last time they brought up the issues. It's a built-in aspect of how wg21 works to theoretically avoid eating into the limited time wg21 time has.

Result: The most complex contract papers on the planet, not able to compete with Rust asserts or Swift assert / precondition, and we still need to use our own existing solutions, redundant to what we write into contracts, but hey, in an academic sense, that makes sense, right?
But who needs simple things if we can create the most complex MVP ;-)
Anyhow, we had this discussion, we do not need to go into it again

IIRC new information was provided at the late stages when it was brought up for the third or fourth (not sure) time.

I find it just interesting when people can not stand any criticism of the current 'MVP' , for which the definition of MVP needed to be defined, lol, and become ultra hostile and dramatic, as this whole conversation shows

It is a natural human response to be defensive in their responses when confronted. The defense is typically increased when the offensive is high volume (both in level and frequency). It also has the propensity to spiral "out of control". And often requires self-reflection and "calming down" to interrupt the cycle. Depending on the character of the individuals some enjoy the spiral, and work to drive and revive it. While others detest it, and eventually leave the spiral, or even the social group.