سي++11سي++11
سي++11 (بالإنجليزية: C++11) هي إصدار معاير للغة البرمجة سي++. تم التصديق عليها من المنظمة الدولة للمعاير في 12 أغسطس 2011 بدلا من سي++03،[2] ثم استبدلت بسي++14 في 18 أغسطس 2014،[3] وفيما بعد بسي++17 والتي ما زالت قيد التطوير. الاسم يتبع تقليد تسمية إصدارات اللغة بسنة نشر المواصفات، رغم أنها سميت سابقا C++0x لأنه كان من المتوقع أن تنشر قبل عام 2010.[4] على الرغم من أن أحد أهداف التصميم هي تفضيل التغيير في المكتبات على التغيير في نواة اللغة،[5] إلا أن سي++11 تضمنت إضافات عديدة لنواة اللغة. أجزاء نواة اللغة التي تم تحسينها بشكل كبير تتضمن دعم الخيوط المتعددة ودعم البرمجة العمومية والتهيئة الموحدة والأداء. تم عمل العديد من التغييرات الجوهرية أيضا لمكتبة سي++ القياسية، حيث تم دمج معظم مكتبات تقرير سي++ الفني 1 فيما عدا مكتبة الوظائف الرياضية الخاصة.[6] تم نشر سي++11 كـ ISO/IEC 14882:2011[7] في سبتمبر 2011 وهو متاح مقابل رسوم. مسودة العمل الأكثر شبها بمعيار سي++11 المنشور هي N3337 بتاريخ 16 يناير 2012 [8] وهي تحتوي فقط على تصليحات تحريرية لمعيار سي++11.[9] أهداف التصميمحاولت لجنة التصميم الالتزام بعدد من الأهداف عند تصميم سي++11:
اعتُبِر الاهتمام بالمبتدئين أمرا هاما، لأن معظم مبرمجين الحاسوب مبتدئين، ولأن الكثير منهم لا يوسعون معرفتهم أبدا مقيدين أنفسهم بالعمل باللغة المتخصصين بها فقط.[1] الإضافات لنواة لغة السي++أحد وظائف لجنة السي++ هي تطوير نواة اللغة. أجزاء نواة اللغة التي تم تحسينها بشكل كبير تتضمن دعم الخيوط المتعددة ودعم البرمجة العمومية والتهيئة الموحدة والأداء. من أجل أهداف هذا المقال، فقد تم تجميع ميزات وتعديلات نواة اللغة إلى أربعة أقسام عاملة: تحسينات الأداء في وقت التنفيذ، تحسينات الأداء في وقت البناء، التحسينات المتعلقة بسهولة الاستخدام، القدرات الوظيفية الجديدة. بعض الميزات يمكن أن تتبع أكثر من قسم، لكنها ذكرت فقط في القسم الذي يمثل هذه الميزة بشكل رئيسي. تحسينات أداء نواة اللغة لوقت التنفيذميزات اللغة هذه تتواجد بشكل رئيسي لتوفير بعض فوائد الأداء، سواء للذاكرة أو للسرعة الحاسوبية.[بحاجة لمصدر] القيمة اليمنى المرجعية ومشيدات النقلفي سي++03 وما قبلها وكما هو الحال في السي، فإن المؤقتات temporaries (تسمى القيم اليمنى rvalues حيث أنها تكون عادة على الجانب الأيمن من معامل التخصيص) لا تكون قابلة للتعديل أبدا ولا يمكن تمييزها من الانواع المشكلة المزمنة في الأداء في سي++03 هي النسخ العميق deep copy المكلف والغير ضروري والذي يحدث ضمنيا عند تمرير الكائنات بالقيمة. لتوضيح ذلك اعتبر أن مشيد النقل move constractor في سي++11 للصنف يمكن للقيم اليمنى المرجعية أن توفر فوائد الأداء للأوامر البرمجية الموجودة دون الحاجة لعمل أي تعديلات خارج المكتبة القياسية. نوع القيمة المرجعة من الدالة التي تعيد لأسباب متعلقة بالسلامة فقد تم فرض بعض القيود. فالمتغيرات المسماة لا يتم اعتبارها أبداً قيمة يمينية، حتى لو تم تعريفها كذلك. وللحصول على قيمة يمينية فيجب استخدام قالب الدالة بسبب طبيعة صياغة القيم اليمنى المرجعية وبسبب بعض التعديلات في صياغة القيم اليسرى المرجعية (المراجع العادية) فإن القيم اليمنى المرجعية تسمح للمطورين بتوفير إعادة توجيه أفضل للدوال function forwarding. وعند الجمع مع القوالب متغيرة المعطيات variadic templates فإن هذه القدرة تسمح للدوال ذات القوالب بإعادة توجيه المعطيات لدالة أخرى يمكنها أخذ تلك المعطيات. تعد الاستفادة الأكبر لإعادة توجيه معطيات المشيد هي إنشاء دوال مُصنّعة factory functions والتي ستستدعي تلقائياً المشيد الصحيح لتلك المعطيات. وقد تم رؤية ذلك في مجموعة emplace_back من دوال مكتبة سي++ القياسية. التعبيرات الثابتة المعممة - constexprدائما ما كان لدى السي++ مفهوم التعبيرات الثابتة constant expression. هذه التعبيرات مثل ومع ذلك فإن التعبيرات الثابتة لم تسمح أبداً باستدعاء دالة أو مشيد لكائن. لذلك فإن مجموعة الأوامر البسيطة التالية غير مقبولة: int get_five() {return 5;}
int some_value[get_five() + 7]; // إنشاء مصفوفة من 12 عنصر، غير مقبول في السي بلس بلس
ذلك لم يكن مقبول في سي++03 لأن قدمت سي++11 الكلمة المفتاحية constexpr int get_five() {return 5;}
int some_value[get_five() + 7]; // إنشاء مصفوفة من 12 عنصر، مقبول في السي++11
هذا يسمح للمترجم من الفهم والتأكد من أن استخدام
قبل سي++11 كان يمكن استخدام قيم المتغيرات في التعبيرات الثابتة فقط إذا كانت المتغيرات معلن عن أنها ثابتة بـ constexpr double earth_gravitational_acceleration = 9.8;
constexpr double moon_gravitational_acceleration = earth_gravitational_acceleration / 6.0;
هذه المتغيرات ثابتة ضمنياً لإنشاء قيم بيانات تعبير ثابت من أنواع بيانات معرفة من قبل المستخدم فإن المشيدات يمكن أيضا الإعلان عنها بـ عادة يجب تعريف مشيد النسخ لصنف لديه مشيدات تعبيرات ثابتة بأن يكون هو أيضا تعبير ثابت، وذلك للسماح للكائنات من هذا صنف أن يتم إرجاعها بالقيمة من دالة تعبير ثابت. يمكن الإعلان عن أي دالة عضو في الصنف مثل مشيدات النسخ والتحميلات الزائدة للمعاملات وغيرهم كتعبير ثابت طالما أنها مستوفية لشروط الدوال ثابتة التعبير. وهذا يسمح للمترجم أن ينسخ الكائنات في وقت الترجمة ويؤدي العمليات عليهم، إلخ. إذا تم استدعاء دالة أو مشيد تعبير ثابت بمعطيات غير ثابتة التعبير، فإن الاستدعاء يتصرف كما لو أن الدالة ليست تعبير ثابت، وقيمة النتيجة لا تكون تعبير ثابت كذلك. بالمثل إذا كان تقييم التعبير في جملة الإرجاع لدالة تعبير ثابت لا ينتج تعبيراً ثابتاً فإن النتيجة لن تكون تعبير ثابت. تعديلات مكتبة سي++ القياسيةتم إدخال عددا من الميزات الجديدة في المكتبة القياسية لسي++11. العديد منها يمكن تنفيذها تحت المعيار القديم، لكن البعض يعتمد على الميزات الجديدة للنواة في سي++11. جزء كبير من المكتبات الجديدة تم تعريفه في ملف التقرير الفني لمكتبة لجنة معايير السي++ (يسمى التقرير الفني 1 أو اختصارا TR1)، والذي نُشِر في عام 2005. العديد من التنفيذات الكاملة والجزئية للتقرير متاحة حاليا باستخدام النطاق الاسمي اللجنة تعتزم الآن عمل تقرير فني ثاني (سيسمى التقرير الفني 2 أو اختصارا TR2) حيث اكتملت معايير سي++11. اقتراحات المكتبة التي لم تكن جاهزة في وقتها لسي++11 ستوضع في التقرير الفني 2 أو أي تقارير فنية إضافية. تحسين التوافق مع اللغة سيللتوافق مع اللغة سي (من سي99) تم إضافة التالي:[12]
انظر أيضًاالمراجع
وصلات خارجية
|
Portal di Ensiklopedia Dunia