معيار C++ الجديد: التغييرات الرئيسية في الإصدار الأخير

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تم إصدار إصدار C++ جديد: ما الذي تغير في لغة البرمجة



قامت اللجنة الدولية لتوحيد معايير C++ (ISO/IEC JTC1/SC22/WG21) بالموافقة رسميًا على الإصدار التالي من المعيار — C++23. يجلب هذا الإصدار تحسينات طال انتظارها تجعل اللغة أكثر أمانًا وتعبيرًا وسهولة في الاستخدام لتطوير كل من البرامج النظامية والتطبيقية. نستعرض أهم المستجدات.



التغييرات الرئيسية في C++23



1. std::print — إخراج منسق دون عناء

من أبرز الميزات ظهور دالة std::print. الآن، للإخراج إلى التدفق القياسي، لا حاجة لكتابة تركيبات ضخمة مع std::cout أو استخدام printf مع خطر أخطاء الأنواع. تعمل std::print استنادًا إلى std::format، مما يضمن أمان الأنواع وسهولة القراءة:

  • تنسيق تلقائي للأرقام والسلاسل والأنواع المخصصة.
  • دعم الإعدادات المحلية (locales) وUnicode.
  • سرعة قريبة من printf، ولكن دون تسرب للذاكرة.


2. تحسين العمل مع coroutines

حصلت coroutines، التي ظهرت لأول مرة في C++20، على سلسلة من التصحيحات والإضافات. في C++23، تم تبسيط بناء جملة تعريف الدوال غير المتزامنة، كما تمت إضافة دعم std::generator — نوع جديد لإنشاء تسلسلات من القيم بشكل فوري:

  • تتيح المولدات كتابة حسابات كسولة (lazy computations) دون إدارة يدوية للحالة.
  • انخفض حجم الكود النمطي (boilerplate) للعمل مع coroutines.


3. الوحدات (Modules) — الاستقرار والأداء

على الرغم من إدخال الوحدات في C++20، إلا أن تنفيذها في المترجمات كان بحاجة إلى تحسين. في المعيار الجديد، تم توضيح قواعد التصدير والاستيراد، مما أدى إلى:

  • تقليل وقت ترجمة المشاريع الكبيرة بمقدار 2–3 مرات.
  • توافق كامل مع ملفات الرؤوس (header files) (الوضع الهجين).
  • إمكانية إنشاء وحدات للمكتبة القياسية (بشكل تجريبي).


4. إمكانيات جديدة لـ constexpr و consteval

توسيع سياق التعبيرات الثابتة هو أحد الأهداف الرئيسية لتطوير C++. في C++23، يُسمح باستخدام constexpr من أجل:

  • تخصيص الذاكرة الديناميكي (std::vector و std::string).
  • استدعاء الدوال الافتراضية (virtual functions).
  • العمل مع الفاصلة العائمة دون فقدان الدقة.

يسمح هذا بتنفيذ المزيد من العمليات الحسابية في مرحلة الترجمة، مما يسرع وقت التشغيل (runtime).



5. السمة [[assume]] — تلميحات للمحسّن (optimizer)

السمة الجديدة [[assume(تعبير)]] تُخبر المترجم بأن التعبير صحيح في هذه النقطة من الكود. وهذا يعطي:

  • تحسينات أكثر عدوانية (إزالة التفرعات، طي الحلقات).
  • زيادة الأداء في الأجزاء الحرجة (محركات الألعاب، الأنظمة المضمنة).


6. تبسيط تعدد الخيوط (multithreading)

تمت إضافة أنواع جديدة للمزامنة: std::counting_semaphore مع أداء محسّن و std::latch للحواجز لمرة واحدة. بالإضافة إلى ذلك، ظهر دعم std::mdspan

المكتبات الموصى بها