صدر C++23: نظرة عامة على التغييرات الرئيسية للمعيار الجديد
حدث بارز في عالم لغات البرمجة — اللجنة الدولية لتوحيد معايير C++ (ISO/IEC JTC1/SC22/WG21) اعتمدت رسمياً الإصدار الجديد من اللغة: C++23. هذا الإصدار، الذي حل محل C++20، ليس ثورياً، لكنه يحتوي على العديد من التحسينات المنتظرة والمفيدة التي ستجعل الكود أنظف وأكثر أماناً وأعلى أداءً. دعونا نستعرض أهم الابتكارات.
أهم الجديد في C++23
1. std::print و std::println — بديل حديث لـ cout
ربما يكون التغيير الأكثر وضوحاً في البرمجة اليومية. تمت إضافة الدالتين std::print و std::println إلى المكتبة القياسية، استناداً إلى التنسيق القوي من std::format (C++20). الآن أصبح الإخراج إلى وحدة التحكم ليس فقط أكثر ملاءمة، بل وأسرع بكثير من خلال std::cout.
- مثال:
std::println("مرحباً، {}! الإجابة: {}", name, 42); - المزايا: أمان الأنواع، بناء جملة قابل للقراءة، دعم Unicode.
2. deducing this (P0847R7) — الإشارة الصريحة إلى this
أحد أقوى الابتكارات للبرمجة الوصفية وإنشاء المكتبات. الآن يمكن تمرير الكائن this بشكل صريح كمعامل لدالة عضو. هذا يحل المشكلات القديمة مع لامبدا و CRTP (Curiously Recurring Template Pattern).
- يسمح بكتابة دالة عضو واحدة تعمل مع الكائنات const وغير const.
- يبسط تنفيذ نمط "التحميل الزائد حسب المؤهلات".
3. عوامل التشغيل متعددة الأبعاد operator[] (P2128R6)
إمكانية طال انتظارها — الآن يمكن لـ operator[] قبول عدة وسائط. هذا أمر بالغ الأهمية للمكتبات التي تعمل مع المصفوفات متعددة الأبعاد (مثل mdspan أو المصفوفات الخاصة).
- كان:
matrix(2, 3)أوmatrix[{2,3}] - أصبح:
matrix[2, 3]— بشكل طبيعي ومختصر.
4. std::expected — معالجة الأخطاء الوظيفية
بديل للاستثناءات ورموز الإرجاع. النوع std::expected<T, E> يحتوي إما على قيمة صحيحة أو خطأ. هذا ذو قيمة خاصة في الأنظمة التي يُحظر فيها الاستثناءات (الأنظمة المدمجة، نوى أنظمة التشغيل).
5. تحسينات الوحدات والمفاهيم
الوحدات (C++20) حصلت على إصلاحات واستقرار. الآن هي مدعومة بشكل أفضل من قبل المترجمات. أصبحت المفاهيم أكثر مرونة، مع إضافة إمكانية استخدام auto في معاملات المفاهيم.
ما الذي يستحق الذكر أيضاً؟
std::mdspan— span متعدد الأبعاد للعمل مع المصفوفات.- إصلاحات في
std::ranges— استقرار وسد الثغرات في API. - السمة
[[assume]]— تلميحات للمترجم لتحسين الأداء. - استدعاءات ثابتة لـ
operator()— إمكانية