سیپلاسپلاس ۲۳
C++23 نام غیررسمی نسخه بعدی استاندارد ISO / IEC 14882 برای زبان برنامهنویسی سیپلاسپلاس است که از C++20 پیروی میکند. پیشنویس فعلی N4910 است.[۱]
در فوریه ۲۰۲۰، در نشست نهایی برای C++20 که در پراگ صورت گرفت، یک طرح کلی برای C++23 تصویب شد:[۲][۳] ویژگیهای برنامهریزیشده برای C++23 شامل پشتیبانی کتابخانه برای کوروتینها، کتابخانه استاندارد ماژولار، اجراکنندهها و شبکه میباشد.
اولین جلسه WG21 با تمرکز بر C++23 قرار بود در اوایل ژوئن ۲۰۲۰ در وارنا برگزار شود، اما به دلیل دنیاگیری کووید-۱۹ لغو شد،[۴][۵] مانند نشست نوامبر ۲۰۲۰ در نیویورک[۶][۵] و نشست فوریه ۲۰۲۱ در کایلوا، هاوایی.[۶] همه جلسات در حال حاضر تا نوامبر ۲۰۲۲ به صورت مجازی برنامهریزی شدهاند.[۶]
سربرگهای جدید
ویرایش<expected>
[۷]<flat_map>
[۸]<flat_set>
[۹]<generator>
[۱۰]<mdspan>
[۱۱]<print>
[۱۲]<spanstream>
[۱۳]<stacktrace>
[۱۴]<stdfloat>
[۱۵]
سربرگهایی که از زبان C گرفته شدهاند:
<stdatomic.h>
[۱۶]
ویژگیهای جدید
ویرایشدر جلسات غیابیِWG21، تاکنون چند ویژگی جدید به پیشنویس C++23 اضافه شدهاست. اما موارد زیر پس از جلسه مجازی WG21 در ۹ نوامبر ۲۰۲۰، که در نظرسنجیها تأیید شدند، اضافه شدند:[۱۷]
- پسوندهای لفظی برای
std::size_t
و نوع علامتدار مربوطه.[۱۸] - تابع عضو
contains
std::basic_string
وstd::basic_string_view
تا بررسی کند رشته دارای یک زیررشته یا کاراکتر است یا خیر.[۱۹] - کتابخانه
<stacktrace>
، بر اساس Boost.Stacktrace[۲۰] std::is_scoped_enum
[۲۱]- سربرگ
<stdatomic.h>
، برای تطبیق با اتمیکهای C[۲۲]
پس از نشست مجازی WG21 در ۲۲ فوریه ۲۰۲۱، ویژگیهای زیر که توسط نظرسنجیها تأیید شدند اضافه میشوند:[۲۳]
- بازسازی آداپتورهای Range ورودی و
counted_iterator
.[۲۴] - حذف لیست پارامترهای خالی غیرضروری
()
از عبارات لامبدا.[۲۵] - ریلکسسازی شرایط مورد نیاز برای
time_point::clock
.[۲۶] std::visit
برای کلاسهایی که ازstd::variant
مشتق شدهاند.[۲۷]- قفلکردن قفلشوندهها.[۲۸]
- Rangeهای شرطی اقتباسی.[۲۹]
std::to_underlying
.[۳۰]
پس از نشست مجازی عمومی استانداردهای ISO در ژوئن ۲۰۲۱، ویژگیهای جدید و گزارشهای نقص توسط نظرسنجیها تأیید شد:[۳۱]
if consteval
[۳۲]- محدود کردن تبدیلهای متنی به
bool
.[۳۳] - اجازه دادن به صفتهای تکراری[۳۴]
std::span
بر مبنای جریان رشته<spanstream>
.[۳۵]std::out_ptr
وstd::inout_ptr
.[۳۶]constexpr
برایstd::optional
،std::variant
،[۳۷] و== std::type_info::operator
.[۳۸]- سازندههای جفتتکرارشونده برای
std::stack
(stack) وstd::queue
(queue).[۳۹] - چند تغییر در کتابخانه ranges:
- ممنوعیت ساخت
std::basic_string
وstd::basic_string_view
ازnullptr
.[۴۵] std::invoke_r
.[۴۶]- بهبود در
std::format
.[۴۷] - افزودن آرگومانهای پیشفرض برای سازنده فورواردینگ
std::pair
.[۴۸]
پس از نشست مجازی عمومی استانداردهای ISO در اکتبر ۲۰۲۱، ویژگیهای جدید و گزارشهای نقص توسط نظرسنجیها تأیید شد:[۴۹]
- متغیرهای غیر لفظی، برچسبها و gotoها در توابع
constexpr
، اما هنوز برای ارزیابی آنها در زمان کامپایل درست نیستند.[۵۰] this
واضح برای پارامتر شیء.[۵۱]- تغییرات در مجموعه کاراکترها و رمزگذاریها.[۵۲][۵۳]
- پیشپردازشگرهای جدید:
#elifdef
و#elifndef
.[۵۴] - اجازه دادن به اعلانهای alias در init-statement.[۵۵]
- بارگذاری بیش از حد اپراتور مشترک چندبُعدی (به عنوان مثال
arr[1, 2]
).[۵۶] - کپی Decay در زبان:
auto(x)
یا{
x}auto
.[۵۷] - تغییرات در کتابخانه قالببندی متن:
- اضافه کردن نوع
std::pmr::stacktrace
که معادلstd::basic_stacktrace<std::pmr::polymorphic_allocator>
است.[۶۰] - تغییرات در کتابخانه ranges:
- تعریف دقیق view.[۶۱]
- جایگزینی الگوی تابع
std::ranges::istream_view
با الگوهای مستعارstd::ranges::istream_view
،std::ranges::wistream_view
، و شی پوینت سفارشیسازیstd::views::istream
.[۶۲] - خانواده آداپتورهای رنج
zip
:[۶۳]zip_view
zip_transform_view
adjacent_view
(وstd::views::pairwise
معادلstd::views::adjacent<2>
)adjacent_transform_view
(وstd::views::pairwise_transform
معادلstd::views::adjacent_transform<2>
)
std::move_only_function
.[۶۴]- عملیات مونادیک برای
std::optional
.[۶۵] - قالب تابع عضو
std::basic_string::resize_and_overwrite
.[۶۶] - چاپ نشانگرهای فرار (
volatile T*
).[۶۷] std::byteswap
.[۶۸]- اضافهبارهای پاک کردن ناهمگن برای ظروف انجمنی.[۶۹]
- هر خصوصیتی از
std::span
وstd::basic_string_view
قابل کپیکردن است.[۷۰] - افزودن خصیصههای
noexcept
شرطی بهstd::exchange
.[۷۱] - خصوصیات اصلاح شده و استفاده از انواع کلاس عدد صحیح.[۷۲]
- هدرهای C واضحتر شدند. هدرها در کدهایی که فقط باید سیپلاسپلاس معتبر باشند، مفید نیستند. بنابراین، هدرهای C باید توسط کتابخانه استاندارد سیپلاسپلاس بهعنوان یک بخش کاملاً پشتیبانیشده و نه منسوخ ارائه شوند، اما همچنین باید از استفاده از آنها در کدهایی که کد قابلیت همکاری چند زبانه نیستند، جلوگیری کرد. [. .] این پیشنهاد باعث میشود هدرهای C دیگر منسوخ نشوند، بنابراین هیچ تهدید رسمیای برای حذف در آینده وجود ندارد.»[۷۳]
پس از نشست مجازی WG21 در ۷ فوریه ۲۰۲۲، ویژگیهای زیر که توسط نظرسنجیها تأیید شدند اضافه میشوند:[۷۴]
std::expected
[۷۵]constexpr
برایcmath
وcstdlib
[۷۶]- تابع علامتگذاری کد غیرقابل دسترسی[۷۷]
ranges::to
[۷۸]- منسوخشدنِ
std::aligned_storage
وstd::aligned_union.
[۷۹] - یک type trait برای تشخیص اتصال مرجع به موقت.[۸۰]
constexpr
شدنِstd::unique_ptr
[۸۱]- پشتیبانی پایپ برای آداپتورهای محدوده تعریف شده توسط کاربر.[۸۲]
ranges::iota
،ranges::shift_left
وranges::shift_right
[۸۳]views::join_with
[۸۴]- آداپتورهای محدوده پنجره:
views::chunk
وviews::slide
[۸۵] views::chunk_by
[۸۶]
ویژگیهای حذف شده
ویرایش- پشتیبانی جمعآوری زباله که در C++11 اضافه شده بود، با وجود بسیاری از پیادهسازیهای GC موجود برای سیپلاسپلاس حذف شد. Garbage Collection در سیپلاسپلاس به وضوح برای یکسری برنامه خاص مفید است. با این حال، جمعآوری زباله همانطور که توسط استاندارد مشخص شدهاست برای آن برنامهها مفید نیست.[۸۷]
منابع
ویرایش- ↑ "Working Draft, Standard for Programming Language C++" (PDF). 2022-03-17.
- ↑ Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information" (PDF). Archived from the original (PDF) on 2019-12-29. Retrieved 2020-02-13.
- ↑ Voutilainen, Ville (2019-11-25). "To boldly suggest an overall plan for C++23". www.open-std.org. Archived from the original on 2019-12-24. Retrieved 2020-02-13.
- ↑ "Evolving C++ remotely".
- ↑ ۵٫۰ ۵٫۱ Sutter, Herb (29 July 2020). "Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++)" (PDF).
- ↑ ۶٫۰ ۶٫۱ ۶٫۲ "Upcoming Meetings, Past Meetings".
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header (C++23) - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ «Standard library header - cppreference.com». en.cppreference.com. دریافتشده در ۲۰۲۲-۰۹-۲۰.
- ↑ Ranns, Nina (2020-11-19). "WG21 2020-11 Virtual Meeting: Minutes of Meeting" (PDF).
- ↑ JeanHeyd Meneide; Rein Halbersma (2019-11-24). "Literal Suffix for (signed) size_t".
- ↑ Wim Leflere; Paul Fee (2020-06-13). "string contains function".
- ↑ Alexey Gorgurov; Antony Polukhin (2020-09-16). "A Proposal to add stacktrace library".
- ↑ Juan Alday (2020-10-12). "A proposal for a type trait to detect scoped enumerations" (PDF).
- ↑ Hans-J. Boehm (2020-10-23). "P0943R6: Support C atomics in C++".
- ↑ Ranns, Nina (2021-02-22). "WG21 2021-02 Virtual Meeting: Minutes of Meeting" (PDF).
- ↑ Tim Song (2021-01-12). "Repairing input range adaptors and counted_iterator".
- ↑ Alex Christensen; JF Bastien (2020-12-11). "P1102R2: Down with ()!".
- ↑ Alexey Dmitriev; Howard Hinnant (2020-10-22). "Relax Requirements for time_point::clock".
- ↑ Barry Revzin (2020-10-30). "Inheriting from std::variant".
- ↑ Tim Song (2020-11-13). "Locks lock lockables".
- ↑ Barry Revzin (2020-02-19). "Conditionally borrowed ranges".
- ↑ JeanHeyd Meneide (2021-01-22). "std::to_underlying for enumerations".
- ↑ Ranns, Nina (2021-06-07). "WG21 2021-06 Virtual MeetingMinutes of Meeting" (PDF).
- ↑ Barry Revzin; Richard Smith; Andrew Sutton; Daveed Vandevoorde (2021-03-22). "if consteval".
- ↑ Andrzej Krzemieński (2021-04-12). "Narrowing contextual conversions to bool".
- ↑ Erich Keane (2020-07-02). "Allow Duplicate Attributes" (PDF).
- ↑ Peter Sommerlad (2021-02-26). "A strstream replacement using span<charT> as buffer" (PDF).
- ↑ JeanHeyd Meneide; Todor Buyukliev; Isabella Muerte (2021-04-15). "out_ptr - a scalable output pointer abstraction".
- ↑ Barry Revzin (2021-02-11). "Missing constexpr in std::optional and std::variant".
- ↑ Peter Dimov (2021-05-01). "Making std::type_info::operator == constexpr".
- ↑ Corentin Jabot (2021-03-05). "Iterators pair constructors for stack and queue" (PDF).
- ↑ Christopher Di Bella (2021-02-19). "starts_with and ends_with".
- ↑ Barry Revzin (2021-03-05). "Superior String Splitting".
- ↑ Tim Song (2021-05-06). "join_view should join all views of ranges".
- ↑ Barry Revzin (2021-05-14). "Views should not be required to be default constructible".
- ↑ Corentin Jabot (2021-03-17). "Range constructor forstd::string_view 2: Constrain Harder" (PDF).
- ↑ Yuriy Chernyshov (2020-09-06). "A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr".
- ↑ Zhihao Yuan (2020-04-29). "invoke_r".
- ↑ Victor Zverovich (2021-02-05). "std::format improvements".
- ↑ Logan R. Smith (2021-01-25). "Default Arguments for pair's Forwarding Constructor".
- ↑ Ranns, Nina (2021-10-04). "WG21 2021-10 Virtual Meeting Minutes of Meeting" (PDF).
- ↑ Ville Voutilainen (2021-07-12). "Non-literal variables (and labels and gotos) in constexpr functions".
- ↑ Gašper Ažman; Sy Brand; Ben Deane; Barry Revzin (2021-07-12). "Deducing this".
- ↑ Corentin Jabot (2021-09-14). "Consistent character literal encoding" (PDF).
- ↑ Jens Maurer (2021-09-21). "Character sets and encodings".
- ↑ Melanie Blower (2021-04-30). "Add support for preprocessing directives elifdef and elifndef" (PDF).
- ↑ Jens Maurer (2021-04-13). "Extend init-statement to allow alias-declaration".
- ↑ Mark Hoemmen; Daisy Hollman; Corentin Jabot; Isabella Muerte; Christian Trott (2021-09-14). "Multidimensional subscript operator" (PDF).
- ↑ Zhihao Yuan (2021-07-12). "auto(x): decay-copy in the language".
- ↑ Victor Zverovich; Corentin Jabot (2021-09-11). "Fixing locale handling in chrono formatters".
- ↑ Victor Zverovich (2021-09-24). "Add support for std::generator-like types to std::format".
- ↑ Steve Downey (2021-06-14). "Add a pmr alias for std::stacktrace".
- ↑ Barry Revzin; Tim Song (2021-08-15). "What is a view?".
- ↑ Nicolai Josuttis (2021-09-24). "Fix istream_view" (PDF).
- ↑ Tim Song (2021-06-11). "zip".
- ↑ Matt Calabrese; Ryan McDougall (2021-07-09). "move_only_function".
- ↑ Sy Brand (2021-04-27). "Monadic operations for std::optional".
- ↑ Chris Kennelly; Mark Zeren (2021-09-14). "basic_string::resize_and_overwrite".
- ↑ Bryce Adelstein Lelbach (2021-09-25). "Printing volatile Pointers".
- ↑ Isabella Muerte; Corentin Jabot (2021-09-17). "Byteswapping for fun&&nuf".
- ↑ Konstantin Boyarinov; Sergey Vinogradov; Ruslan Arutyunyan (2020-12-15). "Heterogeneous erasure overloads for associative containers".
- ↑ Nevin Liber (2021-03-19). "Require span & basic_string_view to be TriviallyCopyable" (PDF).
- ↑ Giuseppe D'Angelo (2021-06-28). "Add a conditional noexcept specification to std::exchange".
- ↑ Tim Song (2021-08-06). "Cleaning up integer-class types".
- ↑ Thomas Köppe (2021-06-11). "Clarifying the status of the "C headers"".
- ↑ Ranns, Nina (2022-02-07). "WG21 2022-02 Virtual Meeting: Minutes of Meeting" (PDF).
- ↑ Vicente Botet; JF Bastien; Jonathan Wakely (2022-01-07). "std::expected".
- ↑ Edward J. Rosten; Oliver J. Rosten (2021-11-12). "constexpr for <cmath> and <cstdlib>" (PDF).
- ↑ Melissa Mears; Jens Maurer (2021-10-15). "Function to mark unreachable code" (PDF).
- ↑ Corentin Jabot; Eric Niebler; Casey Carter (2022-01-21). "Conversions from ranges to containers" (PDF).
- ↑ CJ Johnson (2021-11-22). "Deprecate std::aligned_storage and std::aligned_union" (PDF).
- ↑ Tim Song (2021-10-13). "A type trait to detect reference binding to temporary".
- ↑ Andreas Fertig (2021-11-06). "Making std::unique_ptr constexpr" (PDF).
- ↑ Barry Revzin (2021-12-17). "Pipe support for user-defined range adaptors".
- ↑ Tim Song (2021-12-05). "ranges::iota, ranges::shift_left, and ranges::shift_right".
- ↑ Barry Revzin (2022-01-28). "views::join_with".
- ↑ Tim Song (2021-12-05). "Windowing range adaptors: views::chunk and views::slide".
- ↑ Tim Song (2021-11-19). "views::chunk_by".
- ↑ JF Bastien; Alisdair Meredith (2021-04-16). "Removing Garbage Collection Support".