لغة سي++: مكامن القوة والضعف



Adrien Memel, CC BY-SA 4.0, via Wikimedia Commons


تعد لغة البرمجة ++C بلا جدال واحدة من أقدم لغات البرمجة وأكثرها فاعلية، وهي لا تزال تهيمن على عالم البرمجة حتى وقتنا هذا. تم تطوير هذه اللغة من قبل Bjarne Stroustrup في عام 1979، وذلك لتكون توسعة للغة البرمجة C من أجل الحصول على لغة كائنية التوجه بدلاً من اللغة الأم الموجهة بالإجرائيات، فقد أراد الوصول إلى شيء أكثر مرونة وغنى بالميزات، وبالتالي أكثر ديناميكية. مع تقدم السنين، تم تطوير إصدارات جديدة متعاقبة من ++C لتزويدها بالعديد من الميزات المتقدمة. وتحتل ++C حالياً المركز الرابع في الانتشار بعد C, Java, Python.

تتعرض ++C للانتقادات شأنها في ذلك شأن العديد من لغات البرمجة الأخرى، وخاصة من ناحية أنها صعبة التعلم، ولكن ما أن تمسك بناصيتها، فسوف تتمكن من تطوير برامج سريعة وفعالة للغاية مقارنة بما تستطيعه مع لغات البرمجة الأخرى، ورداً على مثل هذه الانتقادات يقول Bjarne Stroustrup: "هناك نوعان من اللغات: النوع الذي يشتكي الناس منه والنوع الذي لا يستخدمه أحد"، ليقول بأن الجميع يستخدم اللغة ++C رغم شكواهم منها.

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


نقاط قوة++C




1- قابلية النقل

توفر ++C ميزة قابلية النقل (Portability) ونقصد بها أنها لغة مستقلة عن المنصة التي تعمل عليها، وهذا من شأنه أن يسمح للمستخدم بتشغيل نفس البرنامج على نظم تشغيل مختلفة أو واجهات تخاطب مختلفة بكل سهولة. لنفرض مثلاً بأنك كتبت برنامجاً في نظام التشغيل Linux OS وأردت من ثم لسبب أو لآخر الانتقال إلى Windows OS، فسوف تكون عندها قادراً على تشغيل نفس البرنامج في Windows بنفس الجودة وبدون أي أخطاء. لقد أثبتت هذه الميزة بحد ذاتها أن ++C ملائمة جداً بالنسبة للمبرمجين الذين يعملون في بيئات مختلفة.

2- كائنية التوجه OOP

لعل من أهم ميزات ++C والتي كانت السبب في إنشائها أصلاً هي ميزة البرمجة كائنية التوجه (Object oriented programming)، وهي تشمل مفاهيم من قبيل الأصناف والوراثة وتعدد الأشكال وتجريد البيانات والتغليف وغيرها، وهذا يسمح بإعادة استعمال الشيفرة ويجعل البرنامج أكثر موثوقية.

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

3- تعدد أشكال البرمجة

تتمتع ++C بميزة كونها متعددة أشكال البرمجة (multi – paradigm)، ويشمل هذا المفهوم كلاً من المنطق والبنية والإجرائيات الخاصة بالبرنامج، وبهذا تستعمل ++C الأشكال التالية: العام (generic)، وإلزامي (imperative)، وكائني التوجه. نقصد بالشكل العام للبرمجة استعمال فكرة واحدة من أجل تحقيق عدة أغراض، في حين أن البرمجة الإلزامية تقضي باستعمال عبارات تغير حالة البرنامج.

4- التحكم على مستوى منخفض

بما أن ++C قريبة من C بشكل كبير، وهذه الأخيرة هي لغة مرتبطة عن كثب بلغة الآلة، فهذا يعني أن ++C تسمح بالتحكم بالبيانات على مستوى منخفض-قريب من الآلة. بناء على ذلك، يتم إنشاء النظم المبيتة (embedded systems) والمترجمات (compilers) بالاعتماد على ++C.

5- إدارة الذاكرة

توفر ++C للمبرمج القدرة على التحكم الكامل بإدارة الذاكرة. يمكن اعتبار هذه الميزة سلاحاً ذا حدين فهي تزيد مسؤولية المستخدم في إدارة الذاكرة بدلاً من ترك هذا الأمر لأداة جمع النفايات من الذاكرة. لقد تم تحقيق هذا المفهوم بمساعدة التخصيص الديناميكي للذاكرة DMA باستعمال المؤشرات (pointers).

6- الدعم الكبير

تملك C++ مجتمعاً ضخماً من المبرمجين، وهذا من شأنه أن يساعد في توفير الدروس والمحاضرات على الإنترنت سواء بشكل مجاني أو مدفوع. وإذا ما تحدثنا بلغة الإحصائيات، فإن ++C تحتل المركز السادس لأكثر اللغات استعمالاً ومتابة في كل من StackOverflow, GitHub.

7- التوافق مع C

من الطبيعي أن تكون C++ متوافقة بشكل كبير مع C، ويمكن القول بثقة إن كل برنامج C خال من العيوب هو برنامج صالح في ++C. تبعاً للمترجم الذي تستعمله، يمكن لكل برنامج ++C أن يعمل مع ملف باللاحقة .cpp

8- قابلية القياس

نقصد بقابلية القياس (Scalability) قدرة البرنامج على العمل بحسب قياس البيانات التي يتعامل معها، نقصد هنا أن برناج ++C يستطيع عادة العمل مع بيانات صغيرة القياس وبيانات كبيرة القياس بنفس الجودة. و بناء على ذلك يمكننا بناء تطبيقات هائلة.


نقاط ضعف سي++




1- استعمال المؤشرات

يعتبر مفهوم المؤشرات في كل من C و ++C مفهوماً صعباً نوعاً ما، وهو يستهلك الكثير من الذاكرة. سوف يفضي سوء استعمال المؤشرات إلى العديد من المشكلات أهمها حالات توقف للنظام عن العمل أو التصرف بشكل شاذ.

2- قضايا الأمان




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

3- عدم توفر جامع نفايات

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

4- عدم توفر المسالك المبيتة

لا تدعم ++C المسالك المبيتة (built–in threads). تعتبر المسالك مفهوماً جديداً نسبياً في ++C فهو لم يكن موجوداً في أصل اللغة. ويمكن للغة ++C حالياً دعم توابع لامبدا.

5- التعقيد وضعف المرونة

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


التطبيقات المناسبة للغة سي++



لعل من أهم ميزات لغة ++C أنها تتمتع بطيف واسع من التطبيقات المناسبة لها، ونذكر منها:

a- تطبيقات AR/VR: تعتبر ++C رائجة للغاية في تطبيقات إنشاء الواقع المعزز(Augmented Reality) والواقع الافتراضي (Virtual Reality)، وهذه التطبيقات تتعامل مع كمية هائلة من البيانات التي تتغير ويجب ضبطها بشكل منتظم. تعتبر ++C الخيار الأنسب لمثل هذه التطبيقات لأنها تستطيع معالجة البيانات وتحقيق تجارب افتراضية خالية من العيوب.

b- الألعاب: هل تعلم أن ألعابك المفضلة من قبيل World Warcraft, Counter Strike وغيرهما مصممة باستعمال ++C؟ الحقيقة أن ++C واسعة الانتشار في حقل تطبيقات الألعاب.

c- نظم التشغيل: يتم استعمال ++C في العديد من نظم التشغيل الشائعة من قبيل MacOs, Windows ناهيك عن نظم التشغيل المتنقلة من قبيل iOS، وذلك بفضل قدراتها على العمل بمستوى منخفض قريب من لغة الآلة.

d- أجهزة إنترنت الأشياء IoT: يتم تصميم الأجهزة الذكية من قبيل الساعات والأجهزة الطبية والسيارات باستعمال نظم مبيتة مبنية باستعمال ++C.

e- قواعد البيانات: تسمح لك ++C بالحصول على قواعد بيانات بنيوية بشكل فعال، ولقد تم بناء MySQL, MongoDB مثلاً باستعمال ++C.

f- مستعرضات الويب: تعتبر ++C ضالعة في تطوير مستعرضات الويب أيضاً مثل Google, Chrome, Firefox وغيرها.

g- أدوات تعلم الآلة: تساعد ++C في تنفيذ الحسابات الرئيسية لأدوات تعلم الآلة.

h- الأدوات المالية: لقد تم استعمال C++ من قبل المصارف وغيرها من المؤسسات المالية من أجل إنشاء تطبيقات الصرافة والتجارة والتطبيقات المالية، وذلك لكونها لغة قوية بما يكفي لمعالجة ملايين التحويلات المالية اليومية.

i- الأجهزة الطبية

j- الاتصالات


الخلاصة

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