C++26

C++26 هو الاسم غير الرسمي للمراجعة المعيارية المفتوحة لمعيار المنظمة الدولية للتوحيد القياسي (ISO) واللجنة الكهروتقنية الدولية (IEC) 14882 للغة البرمجة C++ ، والتي تلي C++23 ، وقد تم إصدارها رسميًا من قبل WG21 في 28 مارس 2026. [ 1 ] [ 2 ] والمراجعة الحالية العاملة من C++26 هي N5046. [ 3 ]

الأوراق المقترحة والمعتمدة في المعيار من قبل لجنة معايير لغة C++، ومحاضر اجتماع التقييس الذي عُقد في صوفيا، بلغاريا، وعبر الإنترنت في يونيو 2025، متاحة للعموم. [ 4 ] مسودة الصياغة مكتملة الميزات، [ 5 ] ويجري إرسالها للتصويت الدولي. [ 6 ] بعد البت في بعض التعليقات الواردة في اجتماع التقييس الذي عُقد في نوفمبر 2025 في كونا، هاواي ، انتهت لجنة معايير لغة C++ من البت في التعليقات المتوقعة، وأتمت الصيغة الفنية للمسودة، وأرسلتها للتصويت النهائي للموافقة عليها في اجتماع التقييس التالي [ 5 ] في لندن ، المملكة المتحدة، في الفترة من 23 إلى 28 مارس 2026. [ 7 ] [ 8 ]

يمكن تجربة المترجمات التجريبية والقياسية التي تُنفذ بعض الميزات القادمة على مقتطفات برمجية قصيرة من خلال مستكشف المترجمات . وتتميز بعض متغيرات المترجمات فقط بالمعرفات المختصرة للأوراق البحثية التي تقترح الميزات الجديدة التي تُنفذها، مثل "P3372" لحاويات constexpr والمحولات .

اعتبارًا من 30 أبريل 2026، يدعم GCC معظم ميزات C++26 مع إصدار gcc 16.1. [ 9 ] [ 10 ]

سمات

تشمل التغييرات التي تم قبولها في C++26 ما يلي:

لغة

  • تُنفَّذ خاصية الانعكاس أثناء وقت الترجمة (على عكس لغات مثل جافا وسي شارب التي تُنفَّذ أثناء وقت التشغيل ). [ 11 ] (تُطبِّق نسخة تجريبية من Clang من تطوير دان كاتز، بالإضافة إلى GCC 16، هذه الميزات. ويمكن تجربة هذه المُترجمات، بالإضافة إلى تطبيق آخر من EDG، من خلال مستكشف المُترجمات). يستخدم هذا مُعاملًا جديدًا ^^(يُطلق عليه عامةً "مُعامل آذان القط" [ 12 ] ) لاستدعاء الانعكاس، بدلًا من الكلمة المفتاحية Reflection TS reflexpr.
  • التعليقات التوضيحية ، التي تُلحق بيانات وصفية انعكاسية بكائن ما (وتتم معالجتها لاحقًا من سمات المُصرّف). [ 13 ]
  • العقود [ 14 ] إضافة الكلمة المفتاحية contract_assert، بالإضافة إلى المعرفات ذات المعنى الخاص ، preو post. [ 15 ] ( تتوفر نسخة تجريبية من Clang من إعداد Eric W Fiselier وبعض متغيرات GCC التي تدعم العقود من خلال Compiler Explorer.)
  • static_assertالرسائل التي ينشئها المستخدمون [ 16 ]
  • إدخال سلوك خاطئ لقراءة المتغيرات غير المهيأة [ 17 ]
  • [[indeterminate]]السمة، التي تشير إلى أن متغيرًا أو معلمة دالة لها قيمة غير محددة إذا لم يتم تهيئتها [ 18 ] [ 19 ]
  • Deprecate std::memory_order::consumeand std::kill_dependency(), [ 20 ] [ 21 ] بسبب تعقيد نموذج الذاكرة وانخفاض اعتماد المترجم [ 22 ]
  • إزالة السمة، بسبب إهمال [ 23 ][[carries_dependency]]std::memory_order::consume
  • حذف مؤشر إلى نوع غير مكتمل يُعدّ خطأً في الصياغة.
  • إزالة مقارنات المصفوفات المهملة
  • constexprروابط منظمة ومراجع constexprللمتغيرات
  • constexprالتوظيفnew
  • constexprطاقم عمل منvoid*
  • constexprالحاويات والمحولات [ 24 ]
  • constexprالوراثة الافتراضية [ 25 ]
  • constexprالاستثناءات [ 26 ]
  • السماح برمي الاستثناءات في التقييم الثابت [ 26 ]
  • أصدقاء متغيرون
  • فاصلة أكسفورد المتغيرة، أي "إهمال معلمات الحذف بدون فاصلة سابقة". على سبيل المثال، هذا التركيب غير متوافق مع لغة C ، ومضر بلغة C++ ، ويمكن استبداله بسهولة بـ . [ 27 ]voidf(inta...);voidf(inta,...);
  • متغيرات بديلة بدون اسم [ 28 ]
  • ترتيب القيود التي تتضمن تعبيرات الطي
  • فهرسة الحزم
  • يمكن أن تؤدي التجليدات المنظمة إلى تقديم حزمة
  • سمات الربط المهيكل
  • إعلان الربط الهيكلي كشرط
  • يضيف #embedتوجيهًا (تم تقديمه لأول مرة في C23 ) لتضمين الموارد الثنائية، __has_embedويسمح بفحص توافر المورد بواسطة توجيهات المعالج المسبق.
  • سلاسل غير مُقَيَّمة
  • إضافة الأحرف @و $و `إلى مجموعة الأحرف الأساسية. على الرغم من أنها غير مستخدمة حاليًا، إلا أن هذا سيسمح باستخدام هذه الأحرف في المستقبل.
  • تعطيل وظائف الأعضاء الخاصة لسبب محدد ( )=delete("reason");
  • منع إعادة مرجع إلى متغير مؤقت في دالة [ 29 ]
  • template forحلقات وقت الترجمة (المعروفة أيضًا باسم عبارات التوسيع) [ 30 ] للتكرار على حزم النوع/المعلمات ، والكائنات الشبيهة بالصفوف، والكائنات الوصفية. [ 31 ]
  • اسمح بربط نقطة الدخولmain بالوحدة النمطية العامة . هذا يسمح للدالة بالارتباط . [ 32 ]main()extern"C++"

مكتبة

  • رؤوس مكتبة المعايير الجديدة :
  • يوفر جدولة متوازية (in <execution>) سياق تنفيذ غير متزامن قياسي يضمن التقدم المستمر، [ 33 ] مع "مكتبة التحكم في التنفيذ" للعمليات غير المتزامنة والروتينات الفرعية ، بما في ذلك تجريد "المرسل" وفئة مخصصة std::execution::task<T, Env>. [ 34 ] وقد تم اقتراحه بناءً على إطار عمل stdexec من Nvidia . [ 35 ]
  • نموذج المرسل/المستقبل غير المتزامن للتزامن المنظم [ 36 ] ( Libunifex هو تطبيق أولي يمكن تجميعه في C++17 أو أحدث.)
  • مكتبة قياسية محصنة بالحدود [ 37 ]
  • std::copyable_function، غلاف دالة متعددة الأشكال للأغراض العامة يمكن نسخها وتعيينها.
  • std::is_within_lifetimeيحدد ما إذا كان المؤشر يشير إلى كائن لا يزال ضمن فترة حياته
  • std::submdspan()، تُعيد عرضًا لمجموعة فرعية من مجموعة موجودةstd::mdspan
  • المقابض الأصلية في تدفقات الملفات
  • دعم لـ std::optional<T&>، تخزين مرجع اختياري [ 38 ]
  • تخصيص حلقة std::formatter<>التكرار std::filesystem::path( std::formatter<std::filesystem::path>)
  • ربط تدفقات السلاسل النصية معstd::string_view
  • التفاعل std::bitsetمعstd::string_view
  • std::views::concat، عرض لدمج العروض الأخرى
  • دمج السلاسل النصية وعرض السلاسل النصية
  • طباعة أسطر فارغة std::println()(مُطبقة بالفعل في C++23 من قبل معظم موردي المترجمات)
  • std::ranges::generate_random، يملأ نطاقًا بأرقام عشوائية من مولد بتات عشوائية منتظم
  • دعم التجزئة std::chronoلفئات القيم
  • تمت إضافة بروتوكول tuple إلىstd::complex
  • المزيد constexprلـ <cmath>و<complex>
  • إضافة البادئات الجديدة لنظام الوحدات الدولي لعام 2022 على النسب: std::quecto، std::ronto، std::ronna، وstd::quetta
  • حساب التشبع : std::saturating_add، std::saturating_sub، std::saturating_mul، std::saturating_divوstd::saturating_cast

استقبال

أصدر العديد من الأشخاص تقارير رحلات من اجتماع لجنة معايير لغة C++ في صوفيا، والذي اكتملت فيه ميزات المسودة، [ 33 ] [ 39 ] ومن المؤتمر الدولي للغة C++، C++ On Sea، الذي عُقد مباشرة بعد ذلك. [ 40 ]

أكد الجميع على أهمية إدخال خاصية الانعكاس أثناء الترجمة ، باعتبارها تغييرًا جوهريًا. وعلى وجه الخصوص، وصف هيرب ساتر ، رئيس لجنة معايير لغة C++ التابعة لمنظمة ISO، وهانا دوسيكوفا، مساعدة رئيس فريق عمل "تطور اللغة" التابع للجنة معايير C++، التأثيرات المحتملة لخاصية الانعكاس في لغة C++ بأنها "لغة جديدة كليًا". [ 33 ] كما وصف ساتر إصدار C++26 بأنه الإصدار "الأكثر إقناعًا" منذ إصدار C++11 . [ 2 ]

تعرضت ميزة العقود لانتقادات من قبل بعض أعضاء لجنة لغة C++، لأسباب مختلفة (مثل التشكيك في سلامتها أو تعقيدها أو تفاصيل تنفيذها). [ 41 ]

تمت إزالة ميزة إعادة التوطين البسيطة، التي اقترحت محددات جديدة trivially_relocatable_if_eligibleو replaceable_if_eligible، [ 15 ] من C++26 بسبب أخطاء في التنفيذ وتم تأجيلها إلى معيار لاحق. [ 42 ]

انظر أيضاً

مراجع

  1. تقرير من اجتماع لجنة ISO C++ في كرويدون 2026 : "تم إصدار C++26 رسميًا من قبل WG21 يوم السبت 28 مارس 2026!". 28 مارس 2026.
  2. 1 2 ساتر، هيرب (29 مارس 2026). "تم الانتهاء من C++26! - تقرير رحلة: اجتماع معايير ISO C++ في مارس 2026 (لندن كرويدون، المملكة المتحدة)" . herbsutter.com . تم الاطلاع عليه في 29 مارس 2026 .
  3. "مسودة عمل، معيار للغة البرمجة C++" (ملف PDF) . المعايير المفتوحة . المنظمة الدولية للمقاييس/اللجنة الكهروتقنية الدولية. 12-05-2026.
  4. "mailing2025-07 post-Sofia" . JTC1/SC22/WG21 - لجنة معايير لغة C++ - ISOCPP . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  5. 1 2 "جدول معايير C++" (ملف PDF) . اللجنة الفنية المشتركة 1/اللجنة الفرعية 22/مجموعة العمل 21 - لجنة معايير C++ - ISOCPP . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  6. "حياة اقتراح ISO: من "فكرة رائعة" إلى "معيار دولي"" . أخبار، وحالة، ومناقشات حول لغة C++ القياسية . مؤسسة لغة C++ القياسية . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  7. "الاجتماعات القادمة، الاجتماعات السابقة" . أخبار، حالة، ومناقشات حول لغة C++ القياسية . مؤسسة لغة C++ القياسية . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  8. "N5024" (ملف PDF) . مؤسسة لغة C++ القياسية . تم الاطلاع عليه بتاريخ 4 يناير 2026 .
  9. تم إصدار GCC 16.1 مع دعم AMD Zen 6، وAlgol 68، والعديد من التحسينات على لغة C++ ، بقلم مايكل لارابيل. phoronix.com. 8 مايو 2026.
  10. سلسلة إصدارات GCC 16 ، gcc.gnu.org. 8 مايو 2026. تم الاطلاع عليه في 8 مايو 2026.
  11. وايت تشيلدرز وآخرون (26 يونيو 2024). "P2996R4 - الانعكاس لـ C++26" . isocpp.org . WG21. 
  12. هيرب ساتر (23 يناير 2026). "تأملات: محرك الصواريخ الذي سيحدد مسار العقد في لغة C++ - هيرب ساتر - مؤتمر CppCon 2025" . يوتيوب . CppCon.
  13. وايت تشيلدرز، دان كاتز، باري ريزفين، دافيد فانديفورد (14 أكتوبر 2024). "شروح للتأمل" . open-std.org . WG21.{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  14. "تأكيدات العقد (منذ C++26) - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 9 مارس 2025 .
  15. 1 2 "كلمات مفتاحية C++ - cppreference.com" . en.cppreference.com . تم الاطلاع عليه بتاريخ 27-07-2025 .
  16. دارغو، ساندور. "C++26: رسائل static_assert التي يُنشئها المستخدم" . أخبار وحالة ومناقشات حول معيار C++ . مؤسسة معيار C++ . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  17. سلوك غير محدد ، cppreference.com
  18. cppreference.com. "سمة C++: غير محددة (منذ C++26)" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 18 أبريل 2026 .
  19. تحسينات طفيفة في السلامة في لغة C++ الأساسية
  20. cppreference.com. "std::memory_order" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 18 أبريل 2026 .
  21. cppreference.com. "std::kill_dependency" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 18 أبريل 2026 .
  22. هانز بوهم (14 فبراير 2025). "إلغاء تفعيل وإيقاف استخدام memory_order::consume" (ملف PDF) . open-std.org . WG21.
  23. cppreference.com. "خاصية C++: carrys_dependency (منذ C++11) (تمت إزالتها في C++26)" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 18 أبريل 2026 .
  24. حاويات ومحولات constexpr ، openstd.org
  25. constexpr الوراثة الافتراضية ، open-std.org
  26. 1 2 constexpr exceptions , open-std.org.
  27. "P3176R1: الفاصلة المتغيرة في أكسفورد" . eisenwave.github.io . تم ​​الاطلاع عليه بتاريخ 2024-12-09 .
  28. عنصر نائب لطيف بدون اسم ، open-std.org
  29. تحسين سلامة الكود في C++26: المدراء والمراجع المعلقة
  30. بيانات التوسعة open-std.org
  31. تقرير رحلة: اجتماع معايير ISO C++ في يونيو 2025 (صوفيا، بلغاريا) . "(...) يضيف "قالبًا لـ" لتسهيل التكرار على بيانات الانعكاس في وقت الترجمة." herbsutter.com. 2025-06-21
  32. مايكل سبنسر (10 فبراير 2025). "السماح بربط الدالة الرئيسية بالوحدة النمطية العامة" . open-std.org . WG21.
  33. 1 2 3 ساتر، هيرب. "تقرير رحلة: اجتماع معايير ISO C++ في يونيو 2025 (صوفيا، بلغاريا)" . ساتر ميل . تم الاطلاع عليه في 6 سبتمبر 2025 .
  34. cppreference.com. "مكتبة التحكم في التنفيذ (منذ C++26)" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 15 فبراير 2026 .
  35. إريك نيبلر. "مرحباً بكم في stdexec" . nvidia.github.io . شركة إنفيديا . تم الاطلاع عليه بتاريخ 11 يوليو 2026 .
  36. ساتر، هيرب. "تقرير رحلة: اجتماع معايير ISO C++ الصيفي (سانت لويس، ميزوري، الولايات المتحدة الأمريكية)" . مطحنة ساتر . تم الاسترجاع في 6 سبتمبر 2025 .
  37. ساتر، هيرب. "تدريب تيامات على استخدام الصناديق، وإلغاء استدعاء كثولو: ترويض وحوش UB في لغة C++" . مطحنة ساتر .
  38. ستيف داوني، بيتر سومرلاد (4 أبريل 2025). "std::optional<T&>" (ملف PDF) . open-std.org . WG 21.
  39. لوبيز-غوميز، خافيير. "اجتماع المجموعة العاملة الصيفية 21؛ تقرير الرحلة" . الموقع الشخصي لخافيير لوبيز-غوميز . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  40. دارغو، ساندور. "تقرير رحلة: سي++ أون سي 2025" . مدونة ساندور دارغو . تم الاطلاع عليه بتاريخ 6 سبتمبر 2025 .
  41. تيمور دوملر وآخرون (6 أكتوبر 2025). "تأكيدات العقود في C++26، مُعاد تأكيدها" (ملف PDF) . open-std.org . WG 21. 
  42. هيرب ساتر (10 نوفمبر 2025). "تقرير رحلة: اجتماع معايير ISO C++ في نوفمبر 2025 (كونا، الولايات المتحدة الأمريكية)" . مطحنة ساتر.