C++ في المشاريع الحقيقية: حالات من Google إلى الألعاب

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

C++ في المشاريع الحقيقية: حالات شركات ستفاجئك

\n\n

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

\n\n

لماذا لا تزال C++ ذات صلة؟ (نبذة مختصرة)

\n\n

قبل الغوص في الحالات، دعنا نتذكر الميزات الرئيسية لـ C++ التي تجعلها لا غنى عنها في المشاريع الحقيقية:

\n
    \n
  • أداء بدون تنازلات — إدارة الذاكرة اليدوية والتجريدات ذات التكلفة الصفرية تسمح باستخراج أقصى أداء من العتاد.
  • \n
  • وصول مباشر إلى العتاد — مثالي للأنظمة المضمنة وبرامج التشغيل وأنظمة التشغيل.
  • \n
  • تعدد الخيوط وعدم التزامن — C++ الحديثة (11/14/17/20) توفر أدوات قوية للتوازي.
  • \n
  • قاعدة كود ضخمة — ملايين الأسطر من الكود القديم الذي لن يعيد أحد كتابته بلغة Rust أو Go.
  • \n
\n\n

الآن ننتقل إلى الجزء الأكثر إثارة — كيف يبدو هذا في الشركات الحقيقية.

\n\n

الحالة 1: Google — البحث وما بعده

\n\n

أين يُستخدم C++ في Google؟

\n

ستندهش، لكن Google هي واحدة من أكبر مستهلكي C++ في العالم. بلغة C++ كُتبت:

\n
    \n
  • نظام البحث الأساسي (Google Search).
  • \n
  • Chrome (محرك Blink، V8).
  • \n
  • TensorFlow (جزء من الخلفية).
  • \n
  • نظام ملفات Google وBigtable.
  • \n
\n\n

كود حقيقي من Google: المؤشرات الذكية والأداء

\n

تستخدم Google بنشاط مؤشراتها الذكية الخاصة (مثل std::unique_ptr و absl::StatusOr المخصصة). إليك مثال مبسط لكيفية معالجة الأخطاء في Google بدون استثناءات (الاستثناءات محظورة في معظم الكود):

\n\n
#include <absl/status/statusor.h>\n#include <iostream>\n\n// دالة قد تُرجع خطأ\nabsl::StatusOr<int> Divide(int a, int b) {\n    if (b == 0) {\n        return absl::InternalError("القسمة على صفر ممنوعة!");\n    }\n    return a / b;\n}\n\nint main() {\n    auto result = Divide(10, 2);\n    if (result.ok()) {\n        std::cout << "النتيجة: " << *result << std::endl;\n    } else {\n        std::cerr << "خطأ: " << result.status().message() << std::endl;\n    }\n    return 0;\n}
\n\n

لماذا هكذا؟ في الأنظمة عالية التحميل، يمكن أن تكون الاستثناءات مكلفة. تفضل Google التحقق الصريح من الأخطاء عبر StatusOr — وهذا يعطي أداءً يمكن التنبؤ به.

\n\n

الحالة 2: Facebook (Meta) — شبكة اجتماعية بلغة C++

\n\n

أين C++ في Facebook؟

\n

تستخدم Facebook لغة C++ في عدة مكونات رئيسية:

\n
    \n
  • HHVM — آلة افتراضية لـ PHP (مكتوبة بلغة C++).
  • \n
  • Folly — مكتبة لـ C++ عالي الأداء.
  • \n
  • Proxygen — إطار عمل HTTP.
  • \n
  • جزء من خلفية خلاصة الأخبار.
  • \n
\n\n

مثال: خادم HTTP غير متزامن مع Proxygen

\n

طورت Facebook Proxygen لمعالجة ملايين الطلبات في الثانية. إليك كيف يبدو خادم الصدى الأدنى:

\n\n
#include <proxygen/httpserver/HTTPServer.h>\n#include <proxygen/httpserver/RequestHandler.h>\n#include <proxygen/httpserver/ResponseBuilder.h>\n\nusing namespace proxygen;\n\nclass EchoHandler : public RequestHandler {\npublic:\n    void onRequest(std::unique_ptr<HTTPMessage> headers) noexcept override {}\n    \n    void onBody(std::unique_ptr<folly::IOBuf> body) noexcept override {\n        body_ = std::move(body);\n                

المدونات

توصيات الكتب