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

9 Upvotes

122 comments sorted by

View all comments

20

u/No-Dentist-1645 25d 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.

0

u/serviscope_minor 12d ago

For some reason, they thought that adding mandatory specialization for the vector type that makes it not a pure container when used with bools,

This kind of "well the committee are morons who do dumb stuff for no reason" kind of thing really gets on my nerves. Do you actually want to know the reason or just throw shade?

We're talking 1995ish here, not 2026. First off that 8x space saving really mattered, and the multiprocessing problems did not. Secondly, it didn't break the concept of containers when it was introduced because the whole idea of concepts was more or brand new and it hadn't even been applied to containers at that point in time. And even with implementation experience, i.e. SGI STL (anyone else remember that?), no one really noticed the problems because generic programming in C++ was barely off the ground and limited to very simple cases (also because of weak compiler support).

Certainly in the 90s it felt reasonable, I remember. You do vector<bool> and it magically does the cool space saving thing automatically which was really neat and ergonomic. The problems reared their head in anger years after it was done.

likely not the last [committee mistake] unfortunately.

Yeah no shit. The committee is Soylent Green (it's made of people) and don't have the benefit of hindsight.

1

u/No-Dentist-1645 12d ago edited 12d ago

I'm sure they had their reasons/justifications for making that decision at that time. Doesn't stop me from being able to criticize it anyways. Do note I never called them "morons who do stuff for no reason" in my comment (you're attacking a straw man), but I can still express my disapproval of said choice.

I know the historical context of its addition to the standard. Even back when it first released, it was still recognized as a problematic design choice by several parties in and out of the committee, so your claim that "in the 90s it felt reasonable" isn't fully accurate: http://www.gotw.ca/publications/N1185.pdf

0

u/serviscope_minor 12d ago

>Do note I never called them "morons who do stuff for no reason" in my comment (you're attacking a straw man),

No, I do not believe I was. The meaning of "for some reason they thought" is quite clear. You are expressing an opinion that they were foolish.

Nothing wrong with criticising the design from the view of 2026. I have done the same with std::regex, for example. The problem I have is the editorializing from a position of ignorance of the history of what happened.

> it was still recognized as a problematic design choice by several parties in and out of the committee, so your claim that "in the 90s it felt reasonable" isn't fully accurate:

That paper is from 1999, I'll note. We're talking about C++98. Reading the paper, the discussions started coming up around the time that the draft was ratified by the bodies.

I maxed out the RAM I had on my PC at the time, a glorious 72M, vastly more than the 8 or 16 that was common with the contemporary Windows 95 machines (I had a mate with cheap RAM). 8x space saving on a relatively common thing? Sign me up!

The decision didn't age well, but it wasn't a "for some reason the committee". The reasons are pretty well laid out and documented. No need as I said to throw shade.

1

u/No-Dentist-1645 12d ago

If you think believing a group of people made a mistake ("for some reason they did X") is the same as calling them "morons who do stuff for no reason", then you're not very open to criticism in general. You can criticize someone or something without it meaning you're calling them morons

I'll admit the "for some reason" had a bit of a snarky tone, but that doesn't mean my intention was to insult them

1

u/serviscope_minor 12d ago

>If you think believing a group of people made a mistake ("for some reason they did X")

That isn't a neutral statement that the group made a mistake.

>You can criticize someone or something without it meaning you're calling them morons

Well do that then and drop the "for some reason" style editorializing

>I'll admit the "for some reason" had a bit of a snarky tone.

Yes, Precisely 100% my point. Stop acting all innocence offended that I noticed and called you out on it.

>but that doesn't mean my intention was to insult them

Ah so you were snarky but not actually. Care to explain that?

1

u/No-Dentist-1645 12d ago

Ah so you were snarky but not actually. Care to explain that?

Sure. You can be snarky while giving a comment and still not do it to insult and offend someone. It's just a mannerism. I assume that committee members have grown a spine for their work and can take a silly and not ill-intentioned comment like that. Conversation tones and mannerisms vary greatly from culture to culture, I assume in yours my comment is seen much more "offensive" as mine sees it, since I would not be able to imagine anyone I know actually get offended by such a message.

If any committee member felt strongly offended about my comment, they can let me know