تم إصدار المعيار الجديد C++23: ما الذي تغير وكيف سيؤثر على التطوير
قامت اللجنة الدولية لتوحيد معايير C++ (ISO/IEC JTC1/SC22/WG21) باعتماد النسخة الجديدة من اللغة رسميًا — C++23. هذا الإصدار ليس أساسيًا مثل C++11 أو C++20، ولكنه يتضمن العديد من التحسينات المنتظرة التي ستجعل الكود أكثر أمانًا وتعبيرًا وأداءً. سنستعرض المستجدات الرئيسية التي يجب أن يعرفها كل مطور C++.
التغييرات الرئيسية في C++23
- Deducing this (P0847R7) — المستجد الأكثر انتظارًا. الآن يمكن تحديد الكائن الذي يتم استدعاء الدالة عليه بشكل صريح، مما يبسط التحميل الزائد لإصدارات lvalue/rvalue والثابتة وغير الثابتة، ويتخلص من تكرار الكود في قوالب CRTP.
- std::expected (P0323R12) — نوع لمعالجة الأخطاء بدون استثناءات، بديل لـ std::optional والاستثناءات. يسمح بإرجاع إما قيمة أو خطأ، وهو أمر بالغ الأهمية للأنظمة ذات متطلبات الأداء الصارمة.
- الوحدات النمطية std (P2465R3) — يتم الآن تصدير المكتبة القياسية عبر الوحدات النمطية، مما يسرع التجميع ويحسن عزل الكود. على سبيل المثال،
import std;يحل محل عشرات#include. - تحسينات coroutines — تمت إضافة النوع
std::generatorللتسلسلات الكسولة وتم إصلاح العديد من مشكلات الأداء وبيئة العمل في coroutines من C++20. - تعدد العمليات — آلية جديدة
std::latchوstd::barrierلمزامنة الخيوط، بالإضافة إلىstd::counting_semaphoreالمحسّن.
ماذا يعني هذا للمطورين؟
C++23 لا يكسر التوافق مع الإصدارات السابقة، ولكنه يقدم ممارسات جديدة. على سبيل المثال، deducing this يبسط كتابة المكتبات، و std::expected سيحل تدريجيًا محل الفحوصات الضخمة لرموز الإرجاع. العديد من المترجمات (GCC 13+، Clang 16+، MSVC 2022 17.6+) تدعم بالفعل جزءًا من الميزات.
بالنسبة لأولئك الذين يعملون مع الأنظمة عالية التحميل، تعتبر الوحدات النمطية (تسريع البناء بنسبة 20-40%) ومعالجة الأخطاء المحسّنة بدون استثناءات مهمة بشكل خاص. إذا كنت تستخدم C++20، فإن الترحيل إلى C++23 لن يتطلب إعادة كتابة الكود — يكفي تفعيل علامة التجميع الجديدة.
متى نتوقع الدعم الكامل؟
من المتوقع أن يكون الدعم الكامل لـ C++23 في المترجمات بحلول نهاية عام 2024. يمكنك حاليًا اختبار الميزات الفردية باستخدام العلامات -std=c++2b (GCC/Clang) أو /std:c++latest (MSVC). نوصي بالبدء بـ std::expected و deducing this — فهي الأكثر فائدة في المشاريع الحقيقية.
ستجد أمثلة الكود الحالية والمقارنة مع C++20 في وثائق المترجمات. C++23 هي خطوة تطورية تجعل اللغة أكثر أمانًا وراحة دون التضحية بالأداء.