Menu
flag Ar iconالعربيةdown icon

ما هي لغة C++؟ اللغة وسرعتها وأين تعمل

ما هي C++ في حقيقتها، ولماذا تُترجَم مباشرةً إلى كود الآلة الأصلي، وأنواع البرمجيات عالية الأداء التي تُبنى بها.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

C++ في جملة واحدة

‏C++ لغة برمجة ذات أنواع ثابتة (statically typed) ومترجَمة، تحوّل شيفرتك المصدرية مباشرةً إلى كود آلة أصلي. هذا الخيار التصميمي الواحد - لا مفسِّر ولا آلة افتراضية تقف بين برنامجك والمعالِج - هو السبب في أن C++ من أسرع اللغات التي يمكنك الكتابة بها، وهو السبب في أنها تُشغِّل البرمجيات التي لا يمكن إطلاقًا أن تكون بطيئة.

وها هو البرنامج الأول المعتاد. شغّله هنا مباشرةً:

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

لماذا تكون C++ سريعة

تُشغّل معظم اللغات السكربتية شيفرتك عبر مفسِّر أو آلة افتراضية تقرأ التعليمات وتنفّذها وقت التشغيل. أما C++ فتتخطّى كل ذلك:

  1. يقرأ المترجِم (مثل g++ أو clang++) ملف مصدرك .cpp ويترجمه إلى تعليمات آلة لمعالِج ونظام تشغيل محدَّدين.
  2. والنتيجة ملف تنفيذي قائم بذاته يشغّله المعالِج مباشرةً - لا شيء يقف بين شيفرتك والعتاد.

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

المقابل: أن كود الآلة هذا مبنيّ لمنصّة واحدة. الملف التنفيذي المترجَم على Windows لن يعمل على Mac - فتعيد ترجمة المصدر لكل هدف. (قارِن هذا بـ Java، التي تُترجَم إلى بايت كود محمول يعمل على أي JVM.)

ذات أنواع ثابتة ومتعدّدة النماذج

ثمة خاصيّتان تشكّلان مظهر شيفرة C++ وإحساسها.

تعني الأنواع الثابتة أن لكل متغيّر نوعًا معروفًا وقت الترجمة، وأن المترجِم يفحص أنواعك قبل أن يعمل البرنامج أصلًا:

يبقى count من نوع int طوال حياته؛ ومحاولة تخزين "hello" فيه لن تُترجَم. هذا يلتقط صنفًا كاملًا من الأخطاء مبكرًا، مقابل مزيد من الكتابة في البداية.

تعني تعدّدية النماذج أن C++ لا تفرض عليك أسلوبًا واحدًا. يمكنك كتابة شيفرة إجرائية بسيطة، أو تنظيم المنطق في أصناف (كائنية التوجّه)، أو استخدام القوالب لشيفرة عامة قابلة لإعادة الاستخدام. ومعظم البرامج الحقيقية تمزج الثلاثة جميعًا. هذه المرونة قوية، لكنها تعني أيضًا أن لـ C++ مساحة كبيرة للتعلّم - وسنتناولها مفهومًا تلو الآخر.

فيمَ تُستخدم C++

تظهر C++ حيثما يكون الأداء والتحكّم غير قابلين للمساومة:

  • محرّكات الألعاب - Unreal Engine، ونواة Unity، ومعظم شيفرة ألعاب الـ AAA.
  • برمجيات الأنظمة - أنظمة التشغيل، ومشغّلات الأجهزة، والمتصفّحات مثل Chrome وFirefox.
  • الخدمات عالية الأداء - قواعد البيانات، وأنظمة التداول، وبنية البحث التحتية حيث تهمّ الميكروثواني.
  • المضمَّنات والعتاد - البرامج الثابتة (firmware) للسيارات والطائرات المسيَّرة والأجهزة الطبية وإنترنت الأشياء.

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

C++ ليست C (لكنها بدأت هناك)

نمت C++ من C في ثمانينيات القرن الماضي باسم "C مع الأصناف"، وما زالت في معظمها مجموعة فائقة - فكثير من شيفرة C الصحيحة يُترجَم على أنه C++. لكن اللغة نمت نموًّا هائلًا منذ ذلك الحين.

تضيف C++ البرمجة كائنية التوجّه، والقوالب للشيفرة العامة، والمراجع، والاستثناءات، ومكتبة قياسية غنية مليئة بأدوات جاهزة. يستخدم هذا المقطع واحدة منها، vector - مصفوفة قابلة لتغيير الحجم تدير ذاكرتها بنفسها، وهو شيء كان عليك بناؤه يدويًا في C:

تعتمد C++ الحديثة (معايير C++11 وC++17 وC++20) اعتمادًا كبيرًا على أدوات كهذه لجعل اللغة أكثر أمانًا وتعبيرًا من جذورها في C. ومن الأخطاء الشائعة لدى المبتدئين كتابة C++ بأسلوب C - إدارة يدوية للذاكرة، ومصفوفات خام في كل مكان - في حين أن المكتبة القياسية تحلّ المشكلة لك أصلًا. وسنفضّل الأسلوب الحديث في كامل هذه الوثائق.

التالي: تثبيت C++

لكي تكتب C++ وتشغّلها على جهازك تحتاج إلى مترجِم - عادةً g++ (جزء من GCC) أو clang++ أو سلسلة أدوات MSVC على Windows. تشرح الصفحة التالية خطوات تثبيت أحدها والتأكّد من أنه يعمل من طرفيّتك.

الأسئلة الشائعة

فيمَ تُستخدم لغة C++؟

تُشغِّل C++ البرمجيات التي تهمّ فيها السرعة والتحكّم: محرّكات الألعاب (Unreal، ونواة Unity)، وأنظمة التشغيل، والمتصفّحات (Chrome وFirefox)، وقواعد البيانات، وأنظمة التداول، والأجهزة المضمَّنة. تكمن قوّتها في العمل قريبًا من العتاد مع توفير ميزات عالية المستوى مثل الأصناف (classes) والقوالب (templates) والمكتبة القياسية.

هل C++ مترجمة أم مفسَّرة؟

C++ مترجَمة. يقوم مترجِم مثل g++ أو clang++ بترجمة شيفرتك المصدرية مباشرةً إلى كود آلة أصلي لمعالِج ونظام تشغيل محدَّدين، منتجًا ملفًا تنفيذيًا قائمًا بذاته. لا يوجد مفسِّر ولا آلة افتراضية بين برنامجك والمعالِج، ولهذا السبب تكون C++ بهذه السرعة.

ما الفرق بين C وC++؟

بدأت C++ باسم "C مع الأصناف"، وهي في معظمها مجموعة فائقة (superset) من C، لذا يُترجَم معظم شيفرة C على أنها C++. الإضافات الكبرى هي البرمجة كائنية التوجّه (الأصناف والوراثة)، والقوالب، والمكتبة القياسية (حاويات مثل vector وmap)، والمراجع، والاستثناءات، وكثير من ميزات الأمان والراحة التي تفتقر إليها C.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن