سي++ (تنطق: سي بلس بلس) (بالإنجليزية: ++C) هي لغة برمجة كائنية، متعددة أنماط البرمجة، مصرفة، سكونية الأنماط. وتضم العديد من ميزات لغات البرمجة عالية المستوى ومنخفضة المستوى. بدأ تطوير هذه اللغة امتدادًا للغة سي تحت اسم (سي مع الأصناف) من قبل بيارن ستروستروب في مختبرات بل عام 1979 وتم إضافة العديد من الميزات الأخرى لاحقاً وتغير الاسم عام 1983 ليصبح سي++ من باب الدعابة عبر استخدام معامل الزيادة لجانب اسم لغة سي تأكيداً على أنها «التالي للغة سي».
تعتبر سي++ إحدى اللغات الأكثر شيوعاً وقد استخدمت على نطاق واسع في بناء أنظمة التشغيل والتعامل مع البنية الصلبة للحاسوب ابتداءً من الأنظمة البرمجية وبرامج المستخدم، مروراً بمشغلات الأجهزة والأنظمة المضمنة وانتهاءً بالخوادم عالية الأداء وبرامج التسلية كالألعاب الفيديو نظراً لقدرة تصريفها إلى كود لغة تجميع شديد الفعالية. أحد أكثر استخدامات سي++ إثارةً للإعجاب حسب رأي ستروستروب هو استخدام سي++ في كتابة قسم كبير من أنظمة القيادة الأوتوماتيكية للعربات التي تجولت على سطح المريخ (مارس روفر).
يوجد العديد من المصرفات التجارية والمفتوحة المصدر لـسي++، من هذه المصرفات مشروع جنو، مصرفات إنتل، مصرفات مايكروسوفت، مصرفات استديو أوراكل سولاريس، مصرفات ديجيتال مارس، ومصرفات إيمباركاديرو تكنولوجيز. لقد أثرت لغة سي++ في العديد من لغات البرمجة الشائعة مثل سي شارب وجافا. في حين تستخدم لغات أخرى مثل لغة سي-الكائنية نحواً شديد الاختلاف ومقاربة مختلفة في إضافة الأصناف إلى سي.
بدأت سي++ بصفتها تحسينا للغة سي، أولاً عبر إضافة الأصناف ومن ثم التوابع الظاهرية وتحميل المعاملات الحسابية والوراثة المتعددة والقوالب ومعالجة الاستثناءات بالإضافة إلى ميزات الأخرى. بعد سنوات من التطوير تم تصديق سي++ عام 1998 معيار آيزو ذو الاسم ISO/IEC 14882:1998. وفي عام 2003 تم تعديل المعيار وفقاً لوثيقة التصحيح التقنية ISO/IEC 14882:2003. يتضمن المعيار الحالي ISO/IEC 14882:2011 مجموعة من الميزات التي تم الاتفاق عليها ونشرها مثل معيار جديد من المنظمة الدولية للمعايير في أيلول 2011 والذي عُرف سابقاً باسم سي++ 11.
التاريخ
بدأ بيارن ستروستروب العمل على مشروعه سي مع الأصناف (C with Classes) عام 1979، وقد استلهم فكرة هذا المشروع أثناء عمله على أطروحة الدكتوراه حيث قضى وقتاً طويلاً بالبرمجة. لقد اكتشف ستروستروب أن العديد من ميزات لغة سيمولا ملائمة في الحقيقة لتطوير برمجيات ضخمة إلا أن بطء أداء التطبيقات المكتوبة بهذه اللغة كان يحول دون استخدامها بشكل عملي، وفي الوقت نفسه كانت لغة البرمجة الأساسية المختلطة تتمتع بأداء جيد إلا أنها منخفضة المستوى، وبالتالي يصعب استخدامها في تطوير برمجيات ضخمة. قاد هذا الاكتشاف ستروستروب إلى فكرة تطوير لغة برمجة جديدة تجمع المزايا الحسنة من هاتين اللغتين.
واجه ستروستروب لاحقاً مشكلة تحليل نواة نظام يونكس فيما يتعلق بالحوسبة الموزعة خلال عمله في مختبرات بل. وتذكر المعضلات التي واجهته خلال عمله على أطروحته، فعقد العزم على تحسين لغة سي بإضافة ميزات شبيهة بتلك الموجودة في لغة سيمولا. اختار ستروستروب لغة سي لكونها لغة عمومية، سريعة، محمولة، وشائعة الاستخدام. لقد ألهمت ستروستروب -بالإضافة إلى سي وسيمولا- عدد من اللغات الأخرى وهي ألغول68 ولغة معرِّفة (ML) وكلو (لغة برمجة) وأيدا.
عمل ستروستروب على تطوير مصرف اسمه «سي فرونت» (بالإنجليزية: Cfront) يقوم بتصريف مصدر سي++ إلى مصدر سي مكافئ، وقد قام من خلاله بإضافة بعض الميزات الجديدة إلى لغة سي مثل الأصناف، الأصناف المشتقة، التنميط القوي (بالإنجليزية: strong typing)، التضمين (بالإنجليزية: inlining)، والقيم الافتراضية. تم طرح أول إصدار تجاري من سي++ في 14 تشرين الأول 1985.
في عام 1983 تم تغيير اسم اللغة من «سي مع الأصناف» إلى سي++ (حيث أن ++ هو معامل الزيادة بلغة سي) كما تم إضافة مجموعة من الميزات متل التوابع الظاهرية، التحميل الزائد للمعاملات والتوابع، المراجع (بالإنجليزية: references)، الثوابت، التحكم بالذاكرة المدار من قبل المستخدم، تحقق محسن من الأنماط، والتعليقات السطرية باستخدام خطين مائلين (//) على نمط لغة البرمجة الأساسية المختلطة. في عام 1985 نُشر الإصدار الأول من كتاب لغة البرمجة سي++ ليُزَود المبرمجين بأحد أهم المراجع عن هذه اللغة في وقت لم توصّف فيه اللغة بعد معيارا رسميا. عام 1989 نُشر الإصدار 2.0 من الكتاب وعام 1991 نٌشر الإصدار الثاني المحدّث منه. اشتملت الميزات الجديدة على الوراثة المتعددة، الأصناف المجردة (بالإنجليزية: abstract classes)، التوابع الأعضاء السكونية (بالإنجليزية: static member functions)، التوابع الأعضاء الساكنة (بالإنجليزية: const member functions)، والأعضاء المحمية. عام 1990 نُشر دليل سي++ المرجعي التفصيلي (The Annotated C++ Reference Manual) وكان حجر الأساس لمعيار اللغة المستقبلي. اشتملت الميزات اللاحقة على القوالب (بالإنجليزية: templates) والاستثناءات وفضاءات الأسماء وتحويلات جديدة بين الأنماط والنمط البولياني.
ترافق تطور لغة سي++ مع تطور المكتبة المعيارية. إن مكتبة الإدخال والإخراج (I/O stream) هي أولى الإضافات إلى المكتبة المعيارية، توفر هذه المكتبة بدائلاً لتوابع الإدخال والإخراج المعتادة في لغة سي مثل printf
وscanf
. تعتبر مكتبة القوالب القياسية (Standard Template Library) إحدى أهم الإضافات إلى المكتبة المعيارية من بين الإضافات اللاحقة الكثيرة المتتالية. تتميز لغة سي++ عن باقي اللغات بقلة عدد الكلمات المفتاحية حيث أن الوظيفية الأساسية تم إدراجها في المكتبة المعيارية على غرار لغة سي.
تسمى سي++ أحياناً لغة هجينة وذلك بسبب توفيرها العديد من النماذج البرمجة المختلفة وإتاحتها استخدام هذه النماذج مع بعضها البعض مثل استخدام النموذج الإجرائي والنموذج الغرضي التوجه أثناء كتابة نفس البرنامج. لقد أثارت إمكانية كتابة برامج إجرائية باستخدام سي++ بعض الجدل على اعتبار أنه من المفترض كتابة برامج غرضية التوجه لدى استخدام سي++ (وإلا لتم استخدام سي مثلاً). في كل الأحوال فإنه من المعتاد دمج النموذجين الإجرائي والغرضي التوجه لدى كتابة برنامج ما. وغالباً ما يسبب هذا بعض المشاكل أثناء فحص المصدر أو إتمام كتابة المصدر من قبل مبرمج آخر .
لا تزال سي++ قيد الاستخدام بشكل واسع وتعتبر إحدى اللغات المفضلة في تطوير التطبيقات الاحترافية.
أصل تسمية سي++
يقول ستروستروب: «يؤكد الاسم الطبيعة التطورية للتغيرات المُحْدَثة على لغة سي». أثناء مرحلة التطوير تم تسمية سي++ بصفة غير رسمية بِـ«سي الجديدة» (بالإنجليزية: new C)، ثم تغيَّر الاسم إلى «سي مع الأصناف» (بالإنجليزية: C with classes). يعود الفضل في التسمية النهائية (سي++) إلى ريك ماسيتي (أواسط عام 1983)، وقد استخدم هذه التسمية لأول مرة في كانون الأول عام 1983. عندما سُئل ماسيتي عام 1992 عن سبب تسمية اللغة بهذا الاسم أجاب أنه قام بذلك من باب المزاح. ويعود أصل الاسم إلى استخدام معامل الزيادة (++) من لغة سي والذي يقوم بزيادة قيمة المتغير المسند له والاستخدام الشائع لرمز (+) للدلالة على حصول تحسين في برنامج حاسوبي. الدعابة تكمن في أن الاسم نفسه يحتوي على خطأ: ذلك أن استخدام الزيادة اللاحقة (بالإنجليزية: post-increment) يسبب زيادة المتحول بعد تقييم قيمة المتحول السابقة (على عكس الزيادة السابقة (بالإنجليزية: pre-increment)) بمعنى أن لغة سي++ ليست أفضل من لغة سي، وإلا فقد كان من الأجدر استخدام الزيادة السابقة بحيث يصبح اسم اللغة سي++ بدلاً من استخدام الزيادة اللاحقة كما في الاسم الحالي.
لا توجد لغة باسم «سي+» علماً أنه توجد لغة مختلفة تماماً اسمها +ABCL/c. وهنالك بعض اللغات التي سميت بشكل قريب من سي++ أشهرها لغة سي– ولغة سي شارب.
المعايير
قامت لجنة تعيير ++C (مجموعة عمل ISO/IEC JTC1/SC22/WG21) عام 1998 بتعيير لغة ++C ونشرت المعيار ISO/IEC 14882:1998 (المعروف بشكل غير رسمي باسم C98). بعد نشر المعيار ببعض السنوات تفحصت اللجنة تقارير عن أخطاء ومشاكل المعيار السابق ونشرت عام 2003 إصداراً مصححاً من معيار ++C اسمه ISO/IEC 14882:2003. نُشر تقرير تقني عام 2005 اسمه (التقرير التقني 1 (بالإنجليزية: Technical Report 1)، أو اختصاراً TR1) . وصّف التقرير مجموعة من الامتدادات للمكتبة المعيارية -على الرغم من أنه ليس جزءاً من معيار اللغة- بحيث يتم اعتماد هذه الامتدادات في الإصدار التالي من ++C.
C++11 هو المراجعة الأحدث لمعيار ++C وقد عرف سابقاً باسم C++0x وتمت المصادقة عليه من قبل ISO/IEC في 12 آب 2011 ونشر باسم 14882:2011. وهنالك خطط لمراجعة طفيفة (C++14) وأخرى رئيسية (C++17) في المستقبل.
فلسفة اللغة
في كتاب «تصميم وتطوير لغة ++C» (ستروستروب، 1994) يصف بيارن ستروستروب بعض القواعد التي استلهم منها تصميم ++C:
إن دمج كود C مع كود ++C يتطلب أن يسبق تصريح أي تابع يتم التعامل معه من اللغتين معلومةً تشير إلى ضرورة استخدام C للقيام بربطه مع بقية البرنامج (يتم ذلك عبر استخدام {*...*} "extern "C
) تفادياً لاستخدام تقنية ربط ++C التي تغير اسم التابع (بهدف تمييز التوابع المحملة بشكل زائد عن بعضها).
اترك تعليق