سیپلاسپلاس ۲۳
از ویکیپدیا، دانشنامه آزاد
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 در سیپلاسپلاس به وضوح برای یکسری برنامه خاص مفید است. با این حال، جمعآوری زباله همانطور که توسط استاندارد مشخص شدهاست برای آن برنامهها مفید نیست.[۸۷]
منابع
Wikiwand - on
Seamless Wikipedia browsing. On steroids.