Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restructuring clauses for C++26 #5315

Closed
jensmaurer opened this issue Feb 23, 2022 · 25 comments
Closed

Restructuring clauses for C++26 #5315

jensmaurer opened this issue Feb 23, 2022 · 25 comments
Assignees
Milestone

Comments

@jensmaurer
Copy link
Member

jensmaurer commented Feb 23, 2022

See #2252 [basic] before [lex]

Maybe also move the preprocessor section near lex or merge both into a new "lexical processing" clause.

[basic] has some details that need to move later, e.g. allocation/deallocation function details should go to "Declarations".

Operator overloading [over.oper] should partially move to [expr] and to "Declarations".

Isn't "[charconv] Primitive numeric conversions" a good fit for Clause 26 "Numerics library"?

keep Utility types: pair, tuple, variant, optional, any, bitset under [utilities], but create a new grouping subclause called "data types".

Maybe put all of locale, regex. std::format under I/O-ish (because locale-using)

Create [text] clause; see #5226 for details.

@JohelEGP
Copy link
Contributor

Isn't "[charconv] Primitive numeric conversions" a good fit for Clause 26 "Numerics library"?

I think so, too. Currently, it's hard to find. It makes more sense than [text], as text can represent more than just numbers.

Maybe put all of locale, regex. std::format under I/O-ish (because locale-using)

I'm not sure. You can use std::format while avoiding the locale-using overloads. I'd lean more to moving it to [text].

@AlisdairM
Copy link
Contributor

[meta] and [concepts] should be adjacent clauses, or [concepts] should become a subclass of [meta] adjacent to [type.traits].

@JohelEGP
Copy link
Contributor

JohelEGP commented Mar 14, 2023

I agree with making [concepts] a subclause. Not much point to a top-level [concepts] if new concepts are, rightfully, placed in more pertinent subclauses. Its title also needs to better reflect that "not all concepts are here!" Perhaps "basic concepts".

@AlisdairM
Copy link
Contributor

Is it time to move the container header synopses closer to where their contents are defined? E.g., [array.syn],[deque.syn],[forward.list.syn],[list.syn], and [vector.syn] are all adjacent at the top of the sequence containers subclause, [sequences], before we start on the definitions in [array] as a sibling node, and similarly for the associative containers, unordered containers, and container adapters. I don't think any other library clause collects header synopses in this way.

@jwakely
Copy link
Member

jwakely commented Mar 22, 2023

Yes, the containers structure is weird.

@jensmaurer
Copy link
Member Author

jensmaurer commented Jun 29, 2024

Consensus from 2024-06-28 editorial meeting:

Have a new "text" top-level clause with charconv, formt, text.encoding, re, locale and the C library facilities mentioned in #5226.

New order top-level clauses: Algorithms, Strings, Text, Numerics, Time, I/O

Move [execpol] to the end of algorithms.parallel.

Move debugging to end of diagnostics

Reorder container subclauses (sequential, associative, unordered, adapters) so that the header synopsis comes just before the first "class template X" heading that describes the content of the respective header.

Move type.index to support.rtti and extract its header subclause so that it becomes a sibling of type.index.

@jensmaurer
Copy link
Member Author

@jwakely , please have a look.

@AlisdairM
Copy link
Contributor

We were also broadly in favour of moving <span> and <mdspan> from Container to Utilities, following the other vocabulary types such as tuple, optional, and any. However, there was also concern about too much churn in one standard, so it was agreed we defer that change to C++29.

@AlisdairM
Copy link
Contributor

We also spoke about finding a new top level title for the Metaprogramming Library so that we could incorporate Concepts and place it adjacent to Type Traits. However, we did not find an acceptable solution at this time. It is anticipated that the reflection library will slide into the Metaprogramming Library.

@AlisdairM
Copy link
Contributor

There was no discussion about reordering Core clauses, such as by #2252. Is there time to revisit that in this cycle?

@jensmaurer
Copy link
Member Author

jensmaurer commented Jun 29, 2024

The core language changes that have been contemplated are more involved than shuffling subclauses around, so would need CWG oversight. I don't see an urgent need to do something.

@jicama
Copy link
Contributor

jicama commented Jul 1, 2024

I would hope to rename [dcl.dcl] to just [dcl] and [stmt.stmt] to just [stmt].

@AlisdairM
Copy link
Contributor

These core reorganisation changes were suggested and not discussed for
both C++20 and C++23. Assuming they are now out of scope for C++26,
when should we raise them for C++29.

While they are not my suggestion, they are a change I am very much in
favor of.

@jensmaurer
Copy link
Member Author

@jicama , renaming those two labels hardly counts as "clause restructuring", since it's not moving text around. @AlisdairM , do you refer to @jicama comment or something else?

@tkoeppe , we could have those label renames rather independently of anything else.

@tkoeppe
Copy link
Contributor

tkoeppe commented Jul 2, 2024

@jensmaurer I'm not even sure we should rename those labels. People are very familiar with them, and this could be pretty disruptive. What's the motivation here?

@jensmaurer
Copy link
Member Author

People are not familiar with those particular top-level labels. Why do we have [stmt.stmt] on the top level, and then [stmt.if] underneath? Same for [dcl.dcl]. Every time we need to pronounce these labels in CWG, people go another notch on becoming crazy.

@jwakely
Copy link
Member

jwakely commented Jul 2, 2024

The suggested library changes look great, thanks.

Side note: [dcl.dcl] and [stmt.stmt] are C++ tautonyms 😃 I'm not aware of any trinomial names, thankfully.

@AlisdairM
Copy link
Contributor

@AlisdairM , do you refer to @jicama comment or something else?

I was referring to your comment immediate preceding @jicama, about restructuring of specific Core clauses.

@AlisdairM
Copy link
Contributor

@jwakely thanks for the link --- an new term for my vocabulary :)

In our case, I don't think that it matters that we have tautonyms, but it is surprising to have multipart labels for a top level clause.

@jensmaurer
Copy link
Member Author

jensmaurer commented Jul 2, 2024

The core language changes likely need wording changes. Specific suggestions welcome, in a paper.

AlisdairM added a commit to AlisdairM/draft that referenced this issue Jul 28, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
AlisdairM added a commit to AlisdairM/draft that referenced this issue Jul 28, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
AlisdairM added a commit to AlisdairM/draft that referenced this issue Sep 29, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
AlisdairM added a commit to AlisdairM/draft that referenced this issue Oct 2, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
The subclause is integrated into the structure of [support.rtti],
meaning that the synopsis becomes a sibling of the rest, and the
subdivisions of the remaining text are removed (in analogy with
[type.info]).

Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
The subclause is integrated into the structure of [support.rtti],
meaning that the synopsis becomes a sibling of the rest, and the
subdivisions of the remaining text are removed (in analogy with
[type.info]).

Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
tkoeppe added a commit that referenced this issue Oct 16, 2024
Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
The subclause [text.encodings] is extracted and elevated to a sibling
subclause of [localization].

Part of the C++26 clause restructuring (#5315).
tkoeppe added a commit that referenced this issue Oct 16, 2024
Part of the C++26 clause restructuring (#5315).
@tkoeppe
Copy link
Contributor

tkoeppe commented Oct 16, 2024

The reordering of #5315 (comment) is now done.

tkoeppe added a commit that referenced this issue Oct 16, 2024
The text-related subclauses [cctype.syn], [cwctype.syn], [cwchar.syn],
[cuchar.syn], and [c.mb.wcs] are moved to a new subclause [text.c.strings].

Part of the C++26 clause restructuring (#5226, #5315).
@tkoeppe
Copy link
Contributor

tkoeppe commented Oct 16, 2024

Consensus from 2024-06-28 editorial meeting:

Have a new "text" top-level clause with charconv, formt, text.encoding, re, locale and the C library facilities mentioned in #5226.

Just to clarify for posterity: "locale" in the above refers to the entire clause [localization], not just its [locale] subclause.

@frederick-vs-ja
Copy link
Contributor

I wonder whether <type_traits> should be placed in "Metaprogramming library", as some utilities in it are actually language-supporting.

@jensmaurer
Copy link
Member Author

@frederick-vs-ja , please consider this "for C++26" activity done and closed. Do we have a similar github issue for C++29 ?

@tkoeppe
Copy link
Contributor

tkoeppe commented Oct 17, 2024

I don't think we have a concrete proposal yet for another major restructuring. The core wording things we've talked about don't affect top-level clauses I believe. We can open an issue once there's some concrete idea that we'd like to pursue.

As for <type_traits> specifically, sure, one could go back and forth about this, but I don't see an urgent defect here. There are multiple pieces of library that have some magic core language interactions (e.g. start_lifetime_as, bit_cast), and I'm not sure we should move all of those into [support]. A large part of <type_traits> consists of pure library machinery (like the transformations), and surely those should not be in [support]. So, I think the status quo is fine. Feel free to bring a more elaborate rationale.

@tkoeppe tkoeppe closed this as completed Oct 17, 2024
AlisdairM added a commit to AlisdairM/draft that referenced this issue Oct 30, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
AlisdairM added a commit to AlisdairM/draft that referenced this issue Oct 30, 2024
Per comment on issue cplusplus#5315.
Thanks to Jonathan Wakely for the notion of tautonyms.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants