P2247R0
2020 Library Evolution Report

Published Proposal,

Source:
GitHub
Issue Tracking:
GitHub
Project:
ISO/IEC JTC1/SC22/WG21 14882: Programming Language — C++
Audience:
WG21

This report summarizes the activities of C++'s Library Evolution group from 2020-02 through 2020-10. It is split into two sections; one focused on execution (process, logistics, and operations) and one focused on technical work (papers we processed, etc).

Readers are encouraged to also look at:

1. Execution

1.1. Telecons

Since 2020-04, Library Evolution has held a 90 minute telecon twice a week to review papers. Typically, 1 or 2 papers are reviewed at each telecon.

More details on how we use telecons can be found in [P2145R1].

# of Telecons 29
# of Papers Reviewed On Telecons 38
Mean Telecon Attendance 31.7
Total # of Attendees 132
Mean Telecons Per Attendee 7
Median Telecons Per Attendee 3

1.2. Mailing List Reviews

Over the summer, we began conducting reviews of papers on the Library Evolution mailing list. We conduct 2 to 3 reviews concurrently, and each review lasts for a few weeks.

Mailing list reviews are critical to our operations, as they allow us to increase our paper-processing bandwidth without increasing the frequency or duration of telecons. Additionally, certain classes of papers tend to be particularly well suited for mailing list reviews, such as new proposals which tend need feedback, not decision making.

More details on how we use mailing lists can be found in [P2145R1].

# of Papers Reviewed On The Mailing List 14

1.3. Electronic Polling

In 2020-10, we began the polling period for our first slate of Library Evolution electronic straw polls. We believe electronic straw polls are the best option for Library Evolution to make decisions given our current process. They ensure that all stakeholders have an opportunity to participate.

More details on electronic polling can be found in [P2195R0].

1.4. Chair Guide

We have developed a Library Evolution chairing guide, which can be found on the Library Evolution GitHub wiki.

1.5. Staff

Library Evolution is organized by a team, not a single individual:

Team leadership has a number of benefits:

We hold a regular staff meeting every two weeks to discuss our operations and make plans for the future.

Additionally, the following noble individuals take minutes for Library Evolution, and deserve accolades:

2. Technical

2.1. Plenary Approved Priorities

2.1.1. Executors

During the Summer of 2020, Library Evolution conducted an extensive review of [P0443R13] Executors. Six review groups were formed, each of which focused on a particular aspect of the proposal and then wrote a report with their findings which was presented at a telecon:

Additionally, we reviewed the following papers relating to Executors at telecons:

In 2020-10, we started taking electronic polls on Executors; the results are expected in 2020-11.

2.1.2. Networking

Work on Networking has been proceeding in the Networking Study Group, not Library Evolution. We hope to begin a Library Evolution review of Networking for C++23 in the first half of 2021.

We did review [P2161R2] (Remove Default Candidate Executor), which proposes changes to the Networking Technical Specification. In 2020-10 we began electronic polling to advance this paper.

2.1.3. Coroutines Library Support

In the Spring of 2020, we discussed the roadmap for Coroutines Library Support at a Library Evolution telecon. We also discussed the following papers at telecons:

No further work on Coroutines Library Support occurred after the Spring of 2020 due to a lack of new papers and a lack of revisions of existing papers. This plenary-approved priority is at risk of missing C++23 unless authors actively drive the work.

2.1.4. Standard Library Modules

In the Spring of 2020, we discussed the existing proposal for Standard Library Modules ([P0581R1]) as well as a paper discussing the merits of modularizing the Standard Library ([P2172R0]).

No further work on Standard Librarhy Modules occurred after the Spring of 2020 due to a lack of new papers and a lack of revisions of existing papers. This plenary-approved priority is at risk of missing C++23 unless authors actively drive the work.

2.2. Other Highlights

2.2.1. Formatting and Printing

We reviewed a proposed output counterpart to std::format, [P2093R1] (Formatted Output). The response was positive and we expect to see additional work in this area.

Additionally, a few papers proposing additions or fixes to std::format are on our agenda for 2020-11 telecons:

2.2.2. Ranges

In 2020-10, we will begin reviewing a group proposal suggesting a set of range features for C++23, [P2214R0], at Library Evolution telecons.

We reviewed the following ranges papers at telecons:

We reviewed the following ranges papers on the mailing list:

2.2.3. Text and Unicode

Work on Text and Unicode primarily occurs in the Text and Unicode Study Group, however a few papers are advancing to Library Evolution.

In 2020-11, we will begin a mailing list review of [P1885R3] Naming Text Encodings to Demystify Them.

2.2.4. Freestanding

We reviewed a set of coupled papers proposing a reorganization and enhancement of freestanding on Library Evolution telecons:

In 2020-11, we’ll be reviewing a revision of [P1642R4] at a telecon.

2.3. Other Work

The following papers were reviewed at Library Evolution telecons and in 2020-10 we started electronic polls to forward them to Library Working Group:

The following papers were reviewed at Library Evolution telecons:

The following papers were reviewed on the mailing list:

References

Informative References

[LWG1396]
INCITS. regex should support allocators. Tentatively NAD. URL: https://wg21.link/lwg1396
[LWG3430]
Jonathan Wakely. std::fstream & co. should be constructible from string_view. Open. URL: https://wg21.link/lwg3430
[LWG3440]
Ville Voutilainen. Aggregate-paren-init breaks direct-initializing a tuple or optional from {aggregate-member-value}. Tentatively NAD. URL: https://wg21.link/lwg3440
[LWG3451]
Johel Ernesto Guerrero Peña. Inconsistently explicit deduction guides. New. URL: https://wg21.link/lwg3451
[LWG3454]
Alisdair Meredith. pointer_traits::pointer_to should be constexpr. LEWG. URL: https://wg21.link/lwg3454
[P0205R0]
Moritz Klammler. Allow Seeding Random Number Engines With std::random_device. 11 February 2016. URL: https://wg21.link/p0205r0
[P0443R13]
Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, Carter Edwards, Gordon Brown, D. S. Hollman, Lee Howes, Kirk Shoop, Lewis Baker, Eric Niebler. A Unified Executors Proposal for C++. 2 March 2020. URL: https://wg21.link/p0443r13
[P0581R1]
Marshall Clow, Beman Dawes, Gabriel Dos Reis, Stephan T. Lavavej, Billy O’Neal, Bjarne Stroustrup, Jonathan Wakely. Standard Library Modules. 11 February 2018. URL: https://wg21.link/p0581r1
[P0870R4]
Giuseppe D'Angelo. A proposal for a type trait to detect narrowing conversions. 23 September 2020. URL: https://wg21.link/p0870r4
[P0952R0]
Thomas Köppe, Davis Herring. A new specification for std::generate_canonical. 12 February 2018. URL: https://wg21.link/p0952r0
[P1056R1]
Lewis Baker, Gor Nishanov. Add lazy coroutine (coroutine task) type. 7 October 2018. URL: https://wg21.link/p1056r1
[P1255R6]
Steve Downey. A view of 0 or 1 elements: views::maybe. 5 April 2020. URL: https://wg21.link/p1255r6
[P1288R0]
Lewis Baker. Coroutine concepts and metafunctions. 7 October 2018. URL: https://wg21.link/p1288r0
[P1467R4]
David Olsen, Michał Dominiak. Extended floating-point types and standard names. 14 June 2020. URL: https://wg21.link/p1467r4
[P1478R3]
Hans Boehm. Byte-wise atomic memcpy. 18 November 2019. URL: https://wg21.link/p1478r3
[P1641R3]
Ben Craig. Freestanding Library: Rewording the Status Quo. 11 April 2020. URL: https://wg21.link/p1641r3
[P1642R3]
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 25 May 2020. URL: https://wg21.link/p1642r3
[P1642R4]
Ben Craig. Freestanding Library: Easy [utilities], [ranges], and [iterators]. 12 July 2020. URL: https://wg21.link/p1642r4
[P1673R2]
Mark Hoemmen, D. S. Hollman, Christian Trott, Daniel Sunderland, Nevin Liber, Siva Rajamanickam, Li-Ta Lo, Damien Lebrun-Grandie, Graham Lopez, Peter Caday, Sarah Knepper, Piotr Luszczek, Timothy Costa. A free function linear algebra interface based on the BLAS. 13 January 2020. URL: https://wg21.link/p1673r2
[P1709R2]
Michael Wong, Phillip Ratzloff, Richard Dosselmann, Michael Wong, Matthew Galati, Andrew Lumsdaine, Jens Maurer, Domagoj Saric, Jesun Firoz, Kevin Deweese. Graph Library. 13 January 2020. URL: https://wg21.link/p1709r2
[P1885R3]
Corentin Jabot. Naming Text Encodings to Demystify Them. 14 September 2020. URL: https://wg21.link/p1885r3
[P1924R0]
Alexander Zaitsev. Making std::stack constexpr. 7 October 2019. URL: https://wg21.link/p1924r0
[P1925R0]
Alexander Zaitsev. Making std::queue constexpr. 7 October 2019. URL: https://wg21.link/p1925r0
[P1926R0]
Alexander Zaitsev. Making std::priority_queue constexpr. 7 October 2019. URL: https://wg21.link/p1926r0
[P1944R1]
Daniil Goncharov, Antony Polukhin. Add Constexpr Modifiers to Functions in cstring and cwchar Headers. 26 May 2020. URL: https://wg21.link/p1944r1
[P1990R1]
Daniil Goncharov, Antony Polukhin. Add operator[] to std::initializer_list. 26 May 2020. URL: https://wg21.link/p1990r1
[P2037R1]
Andrzej Krzemieński. String's gratuitous assignment. 15 June 2020. URL: https://wg21.link/p2037r1
[P2093R1]
Victor Zverovich. Formatted output. 18 July 2020. URL: https://wg21.link/p2093r1
[P2098R1]
Walter E Brown, Bob Steagall. Proposing std::is_specialization_of. 11 April 2020. URL: https://wg21.link/p2098r1
[P2136R0]
Zhihao Yuan. invoke<R>. 2 March 2020. URL: https://wg21.link/p2136r0
[P2138R3]
Ville Voutilainen. Rules of Design <=> Specification engagement. 15 September 2020. URL: https://wg21.link/p2138r3
[P2139R1]
Alisdair Meredith. Reviewing Deprecated Facilities of C++20 for C++23. 15 June 2020. URL: https://wg21.link/p2139r1
[P2145R1]
Bryce Adelstein Lelbach, Titus Winters, Fabio Fracassi, Billy Baker, Nevin Liber, JF Bastien, David Stone, Botond Ballo, Tom Honermann. Evolving C++ Remotely. 15 September 2020. URL: https://wg21.link/p2145r1
[P2146R2]
Amanda Kornoushenko. Modern std::byte stream IO for C++. 22 July 2020. URL: https://wg21.link/p2146r2
[P2161R2]
Robert Leahy. Remove Default Candidate Executor. 14 July 2020. URL: https://wg21.link/p2161r2
[P2162R1]
Barry Revzin. Inheriting from std::variant (resolving LWG3052). 14 August 2020. URL: https://wg21.link/p2162r1
[P2164R2]
Corentin Jabot. views::enumerate. 13 September 2020. URL: https://wg21.link/p2164r2
[P2165R1]
Corentin Jabot. Compatibility between tuple and tuple-like objects. 14 July 2020. URL: https://wg21.link/p2165r1
[P2166R1]
Yuriy Chernyshov. A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr. 7 September 2020. URL: https://wg21.link/p2166r1
[P2168R0]
Corentin Jabot, Lewis Baker. generator: A Synchronous Coroutine Generator Compatible With Ranges. 16 May 2020. URL: https://wg21.link/p2168r0
[P2172R0]
Corentin Jabot. What do we want from a modularized Standard Library?. 16 May 2020. URL: https://wg21.link/p2172r0
[P2183R0]
David Olsen, Ruslan Arutyunyan, Michael J. Voss, Michał Dominiak, Chris Kohlhoff, D.S. Hollman, Kirk Shoop, Inbal Levi. Executors Review: Properties. 14 July 2020. URL: https://wg21.link/p2183r0
[P2195R0]
Bryce Adelstein Lelbach. Electronic Straw Polls. 15 September 2020. URL: https://wg21.link/p2195r0
[P2197R0]
Michael Tesch, Victor Zverovich. Formatting for std::complex. 22 August 2020. URL: https://wg21.link/p2197r0
[P2202R0]
Gašper Ažman, Tony van Eerd, Thomas Rodgers, Tomasz Kamiński, Corentin Jabot, Robert Leahy, Gordon Brown, Kirk Shoop, Eric Niebler, Dietmar Kühl. Senders/Receivers group Executors review report. 15 July 2020. URL: https://wg21.link/p2202r0
[P2203R0]
Ryan McDougall, Tomasz Kamiński, Conor Hoekstra, Bryan St. Amour. LEWG Executors Customization Point Report. 15 July 2020. URL: https://wg21.link/p2203r0
[P2205R0]
Inbal Levi, Ruslan Arutyunyan, Zach Laine, Tom Scogland, Dmitri Mokhov, Chris Kohlhoff, Daisy Hollman, Jared Hoberock. Executors Review - Polymorphic Executor. 19 August 2020. URL: https://wg21.link/p2205r0
[P2206R0]
Ruslan Arutyunyan, Ben Craig, Guy Davidson, Anuya Welling, Michael Voss, Tom Scogland, Chris Kohlhoff, Gordon Brown, Lee Howes. Executors Thread Pool review report. 2 September 2020. URL: https://wg21.link/p2206r0
[P2207R0]
Guy Davidson, Ben Craig, Robert Leahy, Michał Dominiak, Alexey Kukanov, Hartmut Kaiser, Daisy Hollman, Jared Hoberock, Gordon Brown. Executors review: concepts breakout group report. 14 August 2020. URL: https://wg21.link/p2207r0
[P2212R1]
Alexey Dmitriev, Howard Hinnant. Relax Requirements for time_point::clock. 14 September 2020. URL: https://wg21.link/p2212r1
[P2213R0]
Amir Kirsh, Inbal Levi, Dan Raviv, Ran Regev, Dvir Yitzchaki, Andrei Zissu, Yehezkel Bernart, Michael Peeri. Executors Naming. 16 August 2020. URL: https://wg21.link/p2213r0
[P2214R0]
Barry Revzin, Conor Hoekstra, Tim Song. A Plan for C++23 Ranges. 15 October 2020. URL: https://wg21.link/p2214r0
[P2216R0]
Victor Zverovich. std::format improvements. 6 September 2020. URL: https://wg21.link/p2216r0
[P2220R0]
Kirk Shoop. redefine properties in P0443. 15 September 2020. URL: https://wg21.link/p2220r0
[P2221R0]
Kirk Shoop. define P0443 cpos with tag_invoke. 15 September 2020. URL: https://wg21.link/p2221r0
[P2235R0]
Ville Voutilainen. Disentangling schedulers and executors. 15 October 2020. URL: https://wg21.link/p2235r0