سي++11 (بالإنجليزية: C++11)‏ هي إصدار معاير للغة البرمجة سي++. تم التصديق عليها من المنظمة الدولة للمعاير في 12 أغسطس 2011 بدلا من سي++03، ثم استبدلت بسي++14 في 18 أغسطس 2014، وفيما بعد بسي++17 والتي ما زالت قيد التطوير. الاسم يتبع تقليد تسمية إصدارات اللغة بسنة نشر المواصفات، رغم أنها سميت سابقا C++0x لأنه كان من المتسقط حتى تنشر قبل عام 2010.

على الرغم من حتى أحد أهداف التصميم هي تفضيل التغيير في المخطات على التغيير في نواة اللغة، إلا حتى سي++11 تضمنت إضافات عديدة لنواة اللغة. أجزاء نواة اللغة التي تم تحسينها بشكل كبير تتضمن دعم الخيوط المتعددة ودعم  البرمجة العمومية والتهيئة الموحدة والأداء. تم عمل الكثير من التغييرات الجوهرية أيضا لمخطة سي++ القياسية، حيث تم دمج معظم مخطات تقرير سي++ الفني 1 فيما عدا مخطة الوظائف الرياضية الخاصة.

تم نشر سي++11 كـ ISO/IEC 14882:2011 في سبتمبر 2011 وهومتاح لقاء رسوم. مسودة العمل الأكثر شبها بمعيار سي++11 المنشور هي N3337 بتاريخ 16 يناير 2012  وهي تحتوي فقط على تصليحات تحريرية لمعيار سي++11.

أهداف التصميم

حاولت لجنة التصميم الالتزام بعدد من الأهداف عند تصميم سي++11:

  • الحفاظ على الاستقرار والتوافق مع سي++98 وقدر الإمكان مع سي
  • تفضيل إدخال الميزات الجديدة عن طريق المخطة القياسية بدلا من تطوير نواة اللغة
  • تفضيل التغيرات التي يمكنها تطوير طريقة البرمجة
  • تحسين سي++ لتسهيل تصميم المخطات والأنظمة بدلا من إدخال ميزات جديدة مفيدة فقط لنوع معين من التطبيقات
  • زيادة سلامة النوع بتوفير بدائل آمنة عن الطرق الغير آمنة السابقة
  • زيادة الأداء والقدرة على العمل مباشرة مع العتاد الصلب
  • توفير حلول مناسبة لمشاكل الواقع
  • تطبيق مبدأ بدون-نفقات (الدعم الإضافة اللازم لبعض الخدمات يجب استخدامه فقط إذا استخدمت تلك الخدمات)
  • جعل السي++ سهلة التعليم والتفهم بدون حذف اي خدمات يحتاجها المبرمجين ذوي الخبرة

اعتُبِر الاهتمام بالمبتدئين أمرا هاما، لأن معظم مبرمجين الحاسوب مبتدئين، ولأن الكثير منهم لا يوسعون معهدتهم أبدا مقيدين أنفسهم بالعمل باللغة المتخصصين بها فقط.[1]

الإضافات لنواة لغة السي++

أحد وظائف لجنة السي++ هي تطوير نواة اللغة. أجزاء نواة اللغة التي تم تحسينها بشكل كبير تتضمن دعم الخيوط المتعددة ودعم البرمجة العمومية والتهيئة الموحدة والأداء.

من أجل أهداف هذا الموضوع، فقد تم تجميع ميزات وتعديلات نواة اللغة إلى أربعة أقسام عاملة: تحسينات الأداء في وقت التطبيق، تحسينات الأداء في وقت البناء، التحسينات المتعلقة بسهولة الاستخدام، القدرات الوظيفية الجديدة. بعض الميزات يمكن حتى تتبع أكثر من قسم، لكنها ذكرت فقط في القسم الذي يمثل هذه الميزة بشكل رئيسي.

تحسينات أداء نواة اللغة لوقت التطبيق

ميزات اللغة هذه تتواجد بشكل رئيسي لتوفير بعض فوائد الأداء، سواء للذاكرة أوللسرعة الحاسوبية.

القيمة اليمنى المرجعية ومشيدات النقل

في سي++03 وما قبلها وكما هوالحال في السي، فإن المؤقتات temporaries (تسمى القيم اليمنى rvalues حيث أنها تكون عادة على الجانب الأيمن من معامل التخصيص) لا تكون قابلة للتعديل أبدا ولا يمكن تمييزها من الانواع &const T، ومع ذلك ففي بعض الحالات يمكن تعديل المؤقتات، وهوسلوك كان يعتبر مخرجا مفيدا. في سي++11 تم إضافة نوع مرجعي حديث غير ثابت يسمى قيمة يمينية مرجعية وتعهد بـ&&T. وهذا يشير إلى المؤقتات التي يسمح بتعديلها بعد تهيئتها، بغرض السماح "بدلالات النقل".

المشكلة المزمنة في الأداء في سي++03 هي النسخ العميق deep copy المكلف والغير ضروري والذي يحدث ضمنيا عند تمرير الكائنات بالقيمة. لتوضيح ذلك اعتبر أن <std::vector<T غلافاً حول مصفوفة داخلية ذات حجما ما. إذا تم إنشاء كائن <std::vector<T مؤقت وإرجاعه من دالة، فسيمكن تخزينه فقط بإنشاء كائن <std::vector<T جديد ونسخ بيانات جميع القيم اليمنى إليه. ثم يتم تدمير الكائن المؤقت وكل الذاكرة المخصصة له (لتبسيط هذا النقاش تم إهمال عملية تحسين القيمة المرجعة).

مشيد النقل move constractor في سي++11 للصنف <std::vector<T والذي يأخذ قيمة يمنى مرجعية من <std::vector<T يمكنه نسخ مؤشر المصفوفة الداخلية من القيمة اليمنى إلى الكائن <std::vector<T الجديد، ثم تغيير المؤشر داخل القيمة اليمنى إلى القيمة لا شيء (Null). وبما حتى الكائن المؤقت لن يُستخدَم مرة أخرى أبدا فليس هناك أي أوامر ستحاول الوصول إلى ذلك المؤشر الداخلي، ولأن المؤشر يشير على لا قيمة فإن الذاكرة لن تُحذَف عند الخروج من مجال الدالة. وبالتالي فإن هذه العملية لا تستغني عن نفقات النسخ العميق فقط لكنها أيضا آمنة ومخفية.

يمكن للقيم اليمنى المرجعية حتى توفر فوائد الأداء للأوامر البرمجية الموجودة دون الحاجة لعمل أي تعديلات خارج المخطة القياسية. نوع القيمة المرجعة من الدالة التي تعيد <std::vector<T مؤقت لا بحاجة التغيير الصريح إلى && <std::vector<T لاستنادىء مشيد النقل، حيث تعتبر المؤقتات قيم يمينية تلقائياً (ومع ذلك إذا كان <std::vector<T في الإصدار سي++03 بدون مشيد النقل فسيتم استنادىء مشيد النسخ بـ& <const std::vector<T مسبباً استهلاك مساحة كبيرة من الذاكرة).

لأسباب متعلقة بالسلامة فقد تم فرض بعض القيود. فالمتغيرات المسماة لا يتم اعتبارها أبداً قيمة يمينية، حتى لوتم تعريفها كذلك. وللحصول على قيمة يمينية فيجب استخدام نطقب الدالة ()std::move. ولا يمكن تعديل القيم اليمنى المرجعية إلا في ظروف معينة، حيث أنها معدة بشكل رئيسي للاستخدام مع مشيدات النقل.

بسبب طبيعة صياغة القيم اليمنى المرجعية وبسبب بعض التعديلات في صياغة القيم اليسرى المرجعية (المراجع العادية) فإن القيم اليمنى المرجعية تسمح للمطورين بتوفير إعادة توجيه أفضل للدوال function forwarding. وعند الجمع مع القوالب متغيرة المعطيات variadic templates فإن هذه القدرة تسمح للدوال ذات القوالب بإعادة توجيه المعطيات لدالة أخرى يمكنها أخذ تلك المعطيات. تعد الاستفادة الأكبر لإعادة توجيه معطيات المشيد هي إنشاء دوال مُصنّعة factory functions والتي ستستدعي تلقائياً المشيد السليم لتلك المعطيات. وقد تم رؤية ذلك في مجموعة emplace_back من دوال مخطة سي++ القياسية.

التعبيرات الثابتة المعممة - constexpr

دائما ما كان لدى السي++ مفهوم التعبيرات الثابتة constant expression. هذه التعبيرات مثل 3+4 تعطي نفس النتيجة دائماً، في وقت الترجمة compile time وفي وقت التطبيق run time. تعد التعبيرات الثابتة من فرص التحسين للمترجمات، حيث تقوم المترجمات غلباً بتطبيقها في وقت الترجمة وتضع النتيجة بدلاً من التعبير نفسه في البرنامج. أيضا في كثير من الأماكن تتطلب مواصفات سي++ استخدام التعبيرات الثابتة. فتعريف مصفوفة يحتاج تعبير ثابت وقيم القائمة العددية enumerator يجب حتى تكون تعبيرات ثابتة.

ومع ذلك فإن التعبيرات الثابتة لم تسمح أبداً باستنادىء دالة أومشيد لكائن. لذلك فإن مجموعة الأوامر البسيطة التالية غير مقبولة:

int get_five() {return 5; 

int some_value[get_five() + 7]; // إنشاء مصفوفة من 12 عنصر، غير مقبول في السي بلس بلس

ذلك لم يكن مقبول في سي++03 لأن get_five() + 7 ليست تعبير ثابت. مترجم سي++03 لم يكن قادراً على فهم ما إذا كان ()get_five ثابت عملا في وقت التطبيق. نظرياً هذه الدالة يمكن حتى تؤثر على متغير كوني global variable أواستنادىء دوال أخرى غير ثابتة في وقت التطبيق، إلخ.

قدمت سي++11 الحدثة المفتاحية constexpr والتي تسمح للمستخدم في وقت الترجمة حتى يضمن حتى الدالة أومشيد الكائن ثابتاً. المثال السابق يمكن إعادة كتابته كالتالي:

constexpr int get_five() {return 5; 

int some_value[get_five() + 7]; // إنشاء مصفوفة من 12 عنصر، مقبول في السي++11

هذا يسمح للمترجم من الفهم والتأكد من حتى ()get_five ثابتة وقت الترجمة.

استخدام constexpr مع الدالة يفرض بعض القيود على ما يمكن للدلة حتى تعمله. أولا يجب حتىقد يكون نوع البيانات المرجع من الدالة غير فارغ void. ثانيا داخل جسم الدالة لا يمكن الإعلان عن متغيرات أوتعريف أنواع بيانات جديدة. ثالثا جسم الدالة يمكن فقط حتى يحتوي على إعلانات أوجمل فارغة null وجملة إرجاع واحدة. يجب حتى يتواجد قيم معطيات بحيث أنه بعد ابدال المعطيات فإن التعبير في جملة الإرجاع ينتج تعبير ثابت.

قبل سي++11 كان يمكن استعمال قيم المتغيرات في التعبيرات الثابتة فقط إذا كانت المتغيرات معلن عن أنها ثابتة بـconst وتم تهيئتها بتعبير ثابت ونوعها أرقم سليمة أوقائمة عددية. في سي++11 تم حذف القيد المتعلق بأنقد يكون نوع المتغيرات أرقام سليمة أوقائمة عددية إذا تم تعريفها باستخدام الحدثة المفتاحية constexpr:

constexpr double earth_gravitational_acceleration = 9.8;
constexpr double moon_gravitational_acceleration = earth_gravitational_acceleration / 6.0;

هذه المتغيرات ثابتة ضمنياً const ويجب حتى تهيأ بتعبير ثابت.

لإنشاء قيم بيانات تعبير ثابت من أنواع بيانات فهم من قبل المستخدم فإن المشيدات يمكن أيضا الإعلان عنها بـconstexpr. جسم دالة مشيد المعلن عنه كتعبير ثابت يمكن حتى يحتوى على إعلانات وجمل فارغة فقط، ولا يمكن الإعلان عن متغيرات أوتعهد أنواع بيانات كما هوالحال مع الدوال المعلن عنها بـconstexpr. يجب حتى تتواجد قيم معطيات بحيث أنه بعد ابدال المعطيات فإن تهيئة عناصر الصنف سينتج تعبيرات ثابتة. المهدمات لهذه الأنواع يجب حتى تكون بسيطة.

عادة يجب تعريف مشيد النسخ لصنف لديه مشيدات تعبيرات ثابتة بأنقد يكون هوأيضا تعبير ثابت، وذلك للسماح للكائنات من هذا صنف حتى يتم إرجاعها بالقيمة من دالة تعبير ثابت. يمكن الإعلان عن أي دالة عضوفي الصنف مثل مشيدات النسخ والتحميلات الزائدة للمعاملات وغيرهم كتعبير ثابت طالما أنها مستوفية لشروط الدوال ثابتة التعبير. وهذا يسمح للمترجم حتى ينسخ الكائنات في وقت الترجمة ويؤدي العمليات عليهم، إلخ.

إذا تم استنادىء دالة أومشيد تعبير ثابت بمعطيات غير ثابتة التعبير، فإن الاستنادىء يتصرف كما لوحتى الدالة ليست تعبير ثابت، وقيمة النتيجة لا تكون تعبير ثابت كذلك. بالمثل إذا كان تقييم التعبير في جملة الإرجاع لدالة تعبير ثابت لا ينتج تعبيراً ثابتاً فإن النتيجة لن تكون تعبير ثابت.

تعديلات مخطة سي++ القياسية

تم إدخال عددا من الميزات الجديدة في المخطة القياسية لسي++11. الكثير منها يمكن تطبيقها تحت المعيار القديم، لكن البعض يعتمد على الميزات الجديدة للنواة في سي++11.

جزء كبير من المخطات الجديدة تم تعريفه في ملف التقرير الفني لمخطة لجنة معايير السي++ (يسمى التقرير الفني 1 أواختصارا TR1)، والذي نُشِر في عام 2005. الكثير من التطبيقات الكاملة والجزئية للتقرير متاحة حاليا باستخدام النطاق الاسمي std::tr1. وقد تم نقلهم في سي++11 إلى النطاق الاسمي std. ومع ذلك فلاضافة ميزات التقرير الفني 1 إلى المخطة القياسية لسي++11 فقد تم تحديثها بحيث تلائم ميزات لغة سي++11 والتي لم تكن متاحة عند الإصدارة المبدئية للتقرير الفني. وأيضا يمكن حتى تكون محسنة مع الميزات الممكنة تحت سي++03 ولكن لم تكن جزء من المواصفات الأصلية للتقرير الفني.

اللجنة تعتزم الآن عمل تقرير فني ثاني (سيسمى التقرير الفني 2 أواختصارا TR2) حيث اكتملت معايير سي++11. اقتراحات المخطة التي لم تكن جاهزة في وقتها لسي++11 ستوضع في التقرير الفني 2 أوأي تقارير فنية إضافية.

تحسين التوافق مع اللغة سي

للتوافق مع اللغة سي (من سي99) تم إضافة التالي:

  • Preprocessor:
  • Headers:

انظر أيضاً

  • سي++
  • سي++03

المراجع

  1. ^ (باللغة الإنجليزية). مؤرشف من الأصل في 11 ديسمبر 2018. اطلع عليه بتاريخ 12 أغسطس 2011. Invalid |script-title=: missing prefix (مساعدة)
  2. ^ استشهاد فارغ (مساعدة)CS1 maint: ref=harv (link)
  3. ^ (باللغة الإنجليزية). مؤرشف من الأصل فيستة أكتوبر 2018. اطلع عليه بتاريخ 27 يناير 2020. الوسيط |firstالأول= يفتقد |lastالأول= في الأول (مساعدة); Invalid |script-title=: missing prefix (مساعدة)
  4. ^ (باللغة الإنجليزية). مؤرشف من الأصل في 31 يناير 2019. اطلع عليه بتاريخ 27 يناير 2020. Invalid |script-title=: missing prefix (مساعدة)
  5. ^ (PDF) https://web.archive.org/web/20160617024131/https://www.research.ibm.com/arl/seminar/media/stroustrup.pdf. مؤرشف من الأصل (PDF) في 17 يونيو2016. اطلع عليه بتاريخ 30 يونيو2011. مفقود أوفارغ |title= (مساعدة)
  6. ^ (باللغة الإنجليزية). مؤرشف من الأصل في 30 يناير 2017. اطلع عليه بتاريخ 03 سبتمبر 2011. Invalid |script-title=: missing prefix (مساعدة)
  7. ^ (PDF) https://web.archive.org/web/20190121141340/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf. مؤرشف من الأصل (PDF) في 21 يناير 2019. مفقود أوفارغ |title= (مساعدة)
  8. ^ . مؤرشف من الأصل في 13 مايو2019. اطلع عليه بتاريخ 02 نوفمبر 2012. Invalid |script-title=: missing prefix (مساعدة)
  9. ^ Sutter, Alexandrescu "C++ coding standards"  #15
  10. ^ Gabriel Dos Reis; Bjarne Stroustrup (22 March 2010). "General Constant Expressions for System Programming Languages, Proceedings SAC '10" (PDF). مؤرشف من الأصل (PDF) في 13 يونيو2018.
  11. ^ . مؤرشف من الأصل في 28 مايو2019. اطلع عليه بتاريخعشرة يونيو2013. Invalid |script-title=: missing prefix (مساعدة)

وصلات خارجية

  • The C++ Standards Committee
  • C++0X: The New Face of Standard C++
  • Herb Sutter's blog coverage of C++11
  • Anthony Williams' blog coverage of C++11
  • A talk on C++0x given by Bjarne Stroustrup at the University of Waterloo
  • The State of the Language: An Interview with Bjarne Stroustrup (15 August 2008)
  • Wiki page to help keep track of C++ 0x core language features and their availability in compilers
  • Online C++11 standard library reference
  • Online C++11 compiler
  • Bjarne Stroustrup's C++11 FAQ
تاريخ النشر: 2020-06-02 14:02:20
التصنيفات: سي++, أخطاء CS1: script parameters, صفحات بها مراجع بالإنجليزية (en), صفحات مع استشهادات فارغة, CS1 maint: ref=harv, أخطاء CS1: مؤلف أو محرر مفقود, صفحات تحتوي مراجع ويب بدون عنوان, صفحات تحتوي مراجع ويب برابط تشعبي فقير, مقالات يتيمة منذ يناير 2017, جميع المقالات اليتيمة, جميع المقالات التي بحاجة لصيانة, مقالات تحتوي نصا بالإنجليزية, جميع المقالات التي بها عبارات بحاجة لمصادر, مقالات ذات عبارات بحاجة لمصادر منذ أغسطس 2013, بوابة برمجة الحاسوب/مقالات متعلقة, جميع المقالات التي تستخدم شريط بوابات

مقالات أخرى من الموسوعة

سحابة الكلمات المفتاحية، مما يبحث عنه الزوار في كشاف:

آخر الأخبار حول العالم

لمواجهة “الأزمة ”..خفض صبيب الماء الشروب في الدار البيضاء

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:30
مستوى الصحة: 35% الأهمية: 46%

درك إمنتانوت يطيح بمجرم مبحوث عنه على الصعيد الوطني

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:29
مستوى الصحة: 39% الأهمية: 47%

ارتفاع أسعار إنتاج الصناعات الغذائية وصناعة الملابس

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:33
مستوى الصحة: 42% الأهمية: 43%

جماعة الرباط تمنع بيع تذاكر السفر خارج المحطة الطرقية الجديدة

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:32
مستوى الصحة: 42% الأهمية: 44%

المغرب يرصد 184 إصابة جديدة دون وفيات بـ”كورونا” خلال 24 ساعة

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:37
مستوى الصحة: 35% الأهمية: 41%

تونس تودع المونديال رغم الفوز على فرنسا

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:28
مستوى الصحة: 41% الأهمية: 46%

جامعة نجران تدشن منصة "NUx" للتعلم

المصدر: اليوم - السعودية التصنيف: سياسة
تاريخ الخبر: 2022-11-30 15:26:36
مستوى الصحة: 50% الأهمية: 64%

وهبي يدعو المحامين إلى الحوار غداً الخميس

المصدر: الأول - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 15:26:35
مستوى الصحة: 46% الأهمية: 53%

عاجل.. تنظيم “داعش” يعلن مقتل زعيمه وتعيين خليفة له

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:31
مستوى الصحة: 39% الأهمية: 48%

كأس العالم/ أستراليا تهزم الدنمارك (1-0) وترافق فرنسا إلى ثمن النهائي

المصدر: البطولة - المغرب التصنيف: رياضة
تاريخ الخبر: 2022-11-30 18:16:11
مستوى الصحة: 55% الأهمية: 69%

الصين: إجراء تعديلات على قيود كورونا في تشنجتشو

المصدر: اليوم - السعودية التصنيف: سياسة
تاريخ الخبر: 2022-11-30 15:26:37
مستوى الصحة: 47% الأهمية: 53%

رئيس مجلس مقاطعة جليز يخرج عن صمته بشأن ضجة حفل المسيرة الخضراء

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:29
مستوى الصحة: 36% الأهمية: 46%

 تقرير: مقتل 15 شخصا في انفجار مدرسة بشمال أفغانستان

المصدر: اليوم - السعودية التصنيف: سياسة
تاريخ الخبر: 2022-11-30 15:26:32
مستوى الصحة: 52% الأهمية: 67%

مدرب كندا : مباراتنا أمام المغرب فرصتنا للاحتفال وكتابة التاريخ

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:38
مستوى الصحة: 31% الأهمية: 37%

إيقاف تونسي حاول إضرام النار في مقر للشرطة

المصدر: كِشـ24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2022-11-30 18:15:35
مستوى الصحة: 35% الأهمية: 39%

تحميل تطبيق المنصة العربية