C++26: قفزة عملاقة لميزات مكتبة المعايير في وقت التجميع

2025-05-01

يوشك C++26 على إحداث ثورة في البرمجة في وقت التجميع من خلال زيادة هائلة في دعم constexpr في مكتبة المعايير. تقترح العديد من المقترحات (P2562R1، P1383R2، P3074R7، P3372R2، P3508R0، P3369R0) دمج خوارزميات الفرز المستقرة، ووظائف و ، وقواعد الاتحاد المحسّنة، وكافة الحاويات والمحولات تقريبًا، وخوارزميات الذاكرة المتخصصة في فئة constexpr. يُحسّن هذا من قدرات وقت التجميع بشكل كبير، مما يسمح، على سبيل المثال، بالفرز في وقت التجميع للحاويات constexpr. وعلى الرغم من استبعاد std::hive و std::hash بسبب القيود، إلا أن C++26 يعد بتوسيع كبير لإمكانيات البرمجة في وقت التجميع.

اقرأ المزيد

C++26: قفزة عملاقة لـ constexpr

2025-04-23

من المقرر أن تحدث لغة C++26 ثورة في constexpr! تشمل الميزات القادمة التحويلات constexpr من void*، مما يسمح بالتلاعب بالذاكرة بشكل أكثر مرونة في وقت التجميع؛ و constexpr placement new، مما يسمح بوضع الكائنات داخل التعبيرات الثابتة؛ وروابط constexpr مُهيكلة، مما يجلب الروابط المُهيكلة في وقت التجميع. هذه التحسينات توسع نطاق constexpr بشكل كبير وتمكّن مكتبة القياسية من قدرات محسّنة في وقت التجميع.

اقرأ المزيد

أداء نطاقات C++20: مفاجأة غير متوقعة

2025-04-19

قام الكاتب باستبدال حلقة خام بـ `std::ranges::transform` في مشروع C++، متوقعًا زيادة في الأداء. كشفت الاختبارات عن نتيجة مفاجئة: حلقة خام مُحسّنة (باستخدام `emplace_back` و `reserve`) أثبتت أنها أسرع بنسبة 20% على Clang و 10% على GCC. تقارن المقالة بين الأساليب المختلفة، مع تسليط الضوء على الأداء وقابلية قراءة التعليمات البرمجية. الخلاصة: أعطِ الأولوية لقابلية القراءة ما لم يكن الأداء عقبة رئيسية.

اقرأ المزيد
التطوير النطاقات

C++26: لمحة عامة عن الميزات المُزالة والمنسوخة

2025-03-20

يزيل C++26 أو يُعلن عن إهمال العديد من الميزات. يشمل ذلك الإزالة الكاملة لـ `typedef` `std::allocator` الذي تم إهماله في C++20، والإزالة الكاملة للتحميل الزائد بدون وسيطات لـ`std::basic_string::reserve()`؛ وإزالة أدوات تحويل Unicode المُهملة و`std::strtok`؛ وإزالة `strstreams` القديمة وواجهات برمجة التطبيقات للوصول الذري إلى `std::shared_ptr`؛ وإزالة `std::wstring_convert`. بالإضافة إلى ذلك، تم إهمال `std::is_trivial`، ويوصى باستخدام بدائل `is_trivially_XXX` الأكثر دقة؛ وتم إهمال `std::memory_order::consume` بسبب المواصفات غير المرضية وصعوبات التنفيذ. تهدف هذه الإزالات وإعلانات الإهمال إلى تحسين أمان اللغة وكفاءتها وتنظيف الوظائف المُهملة.

اقرأ المزيد

C++26: فهرسة الحزم تبسّط استخراج العناصر

2025-01-24

على الرغم من أن C++11 قدّم حزم المعلمات، إلا أن استخراج عناصر محددة ظلّ عملية شاقة. يُدخِل C++26، بفضل الاقتراح P2662R3، فهرسة الحزم، مما يسمح بالوصول المباشر إلى عناصر الحزمة باستخدام عامل التشغيل الخاص بالفهرس، مثلًا `T...[0]` للعنصر الأول. يؤدي هذا إلى رمز أنظف وأكثر قابلية للقراءة وأداء أفضل في وقت التجميع. على الرغم من عدم دعم الفهرسة السالبة والتشريح بعد، إلا أن الميزة عملية للغاية بالفعل، وتحسّن تطوير C++ بشكل ملحوظ.

اقرأ المزيد

C++26: وصول مُوَضِّع الاسم المُسَمّى '_'

2025-01-11

يُدخِل C++26 ميزة ثورية: مُوَضِّع الاسم غير المُسَمّى '_'. يُعالِج هذا مشكلة قائمة منذ زمن طويل في C++: معالجة المتغيرات غير المُستخدَمة. في السابق، كان على المُطوِّرين استخدام `[[maybe_unused]]` أو `std::ignore` لتجنُّب تحذيرات المُجمِّع، خاصةً مع الربط المُبَنّى. يمكن إعلان مُوَضِّع الاسم '_' عدة مرات دون حدوث تضارب، وهو يحمل بشكل ضمني سمة `[[maybe_unused]]`، مما يُبَسِّط الشفرة ويُحسِّن القابلية للقراءة. تم تنفيذ هذه الميزة بالفعل في GCC 14 و Clang 18.

اقرأ المزيد