سی‌پلاس‌پلاس ۲۳

از ویکی‌پدیا، دانشنامه آزاد

C++23 نام غیررسمی نسخه بعدی استاندارد ISO / IEC 14882 برای زبان برنامه‌نویسی سی‌پلاس‌پلاس است که از C++20 پیروی می‌کند. پیش‌نویس فعلی N4910 است.[۱]

در فوریه ۲۰۲۰، در نشست نهایی برای C++20 که در پراگ صورت گرفت، یک طرح کلی برای C++23 تصویب شد:[۲][۳] ویژگی‌های برنامه‌ریزی‌شده برای C++23 شامل پشتیبانی کتابخانه برای کوروتین‌ها، کتابخانه استاندارد ماژولار، اجراکننده‌ها و شبکه می‌باشد.

اولین جلسه WG21 با تمرکز بر C++23 قرار بود در اوایل ژوئن ۲۰۲۰ در وارنا برگزار شود، اما به دلیل دنیاگیری کووید-۱۹ لغو شد،[۴][۵] مانند نشست نوامبر ۲۰۲۰ در نیویورک[۶][۵] و نشست فوریه ۲۰۲۱ در کایلوا، هاوایی.[۶] همه جلسات در حال حاضر تا نوامبر ۲۰۲۲ به صورت مجازی برنامه‌ریزی شده‌اند.[۶]

سربرگ‌های جدید

سربرگ‌هایی که از زبان C گرفته شده‌اند:

ویژگی‌های جدید

خلاصه
دیدگاه

در جلسات غیابیِ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:
    • تعمیم starts_with و ends_with برای محدوده‌های دلخواه.[۴۰]
    • split_view به lazy_split_view تغییر نام داد و split_view جدید ایجاد شد.[۴۱]
    • رفع محدودیت در join_view .[۴۲]
    • حذف محدودیت default_initializable از view مفهومی.[۴۳]
    • سازنده Range برای std::basic_string_view .[۴۴]
  • ممنوعیت ساخت 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::generator.[۵۹]
  • اضافه کردن نوع 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_viewstd::views::pairwise معادل std::views::adjacent<2>)
      • adjacent_transform_viewstd::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 در سی‌پلاس‌پلاس به وضوح برای یکسری برنامه خاص مفید است. با این حال، جمع‌آوری زباله همان‌طور که توسط استاندارد مشخص شده‌است برای آن برنامه‌ها مفید نیست.[۸۷]

منابع

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.