More Exceptional C++
More Exceptional C++
ملخص:
مقدمة
كتاب «More Exceptional C++» (2001) هو تكملة لمجموعة المسائل والحلول الشهيرة من هيرب ساتر (Herb Sutter)، أحد الخبراء الرائدين في لغة C++. إذا كان الكتاب الأول «Exceptional C++» قد وضع الأساس للفهم العميق للاستثناءات وإدارة الذاكرة وتصميم الفئات، فإن الجزء الثاني يرفع المستوى إلى أعلى. هنا، يقدم المؤلف 40 مسألة جديدة (Items)، مقسمة إلى أقسام موضوعية، تغطي كلاً من المشكلات الكلاسيكية (أمان الاستثناءات، RAII، الأنماط البرمجية) والمواضيع الأكثر تقدماً: تحسين STL، تفاصيل الوراثة، القوالب، وحتى مسائل تعدد الخيوط (في سياق C++98/03). الكتاب مكتوب بصيغة «سؤال وجواب»: أولاً تُطرح المسألة، ثم يُقدم تحليل مفصل مع كود وتحليل واستنتاجات. هذا ليس كتاباً دراسياً للمبتدئين - بل هو مجموعة من الألغاز لأولئك الذين يكتبون بالفعل بلغة C++ بثقة ويريدون تجنب الأخطاء الشائعة.
عن ماذا يتحدث الكتاب
الموضوع الرئيسي هو أمان الاستثناءات والإدارة الصحيحة للموارد. يشرح ساتر باستمرار كيفية كتابة كود لا «يتسرب» عند حدوث استثناءات، وكيفية استخدام نمط RAII (Resource Acquisition Is Initialization) وكيفية تصميم فئات مقاومة للتنفيذ الجزئي للعمليات. يناقش الكتاب أيضاً:
- قواعد تحميل المعاملات الزائد (خاصة operator= و operator[]);
- تفاصيل العمل مع حاويات STL (std::vector, std::list, std::map);
- أنماط «pimpl» (pointer to implementation) و «copy-and-swap»;
- مشكلات الوراثة المتعددة والفئات الأساسية الافتراضية;
- تحسين الكود باستخدام القوالب والاستراتيجيات (policy-based design);
- معالجة الأخطاء في المنشئات والمدمّرات.
يحتوي كل فصل على أمثلة كود محددة يمكن تطبيقها فوراً في المشاريع الحقيقية. ساتر لا يقدم حلولاً جاهزة فحسب، بل يشرح أيضاً لماذا الأساليب الأخرى خاطئة، وما هي العواقب التي قد تترتب عليها.
لمن هذا الكتاب
الكتاب موجه لـ مطوري C++ ذوي الخبرة الذين هم بالفعل على دراية ببناء الجملة، والفئات، والوراثة، والقوالب. سيكون مفيداً لـ:
- المبرمجين الذين يعملون على أنظمة عالية الموثوقية (المالية، الاتصالات، الأنظمة المدمجة);
- مطوري المكتبات والأطر البرمجية حيث تكون استقرارية API مهمة;
- طلاب الدراسات العليا وطلاب السنة النهائية الذين يدرسون مفاهيم C++ المتقدمة;
- كل من يريد تطوير مهارات تصحيح الأخطاء وإعادة هيكلة الكود المعقد.
سيبدو الكتاب صعباً للمبتدئين - من الأفضل البدء بـ «Exceptional C++» أو «Effective C++» لسكوت مايرز.
ماذا سيتعلم القارئ
بعد القراءة، ستتمكن من:
- ضمان أمان الاستثناءات على ثلاثة مستويات (basic, strong, nothrow);
- تنفيذ معاملات الإسناد والنسخ بشكل صحيح;
- تجنب تسرب الذاكرة والموارد في المنشئات;
- تحسين استخدام حاويات STL (مثلاً، تجنب النسخ غير الضرورية);
- تطبيق نمط «copy-and-swap» لكتابة operator= موثوق;
- فهم متى تستخدم الوراثة الافتراضية، ومتى تستخدم التركيب;
- تصميم فئات مع مراعاة الاستثناءات المحتملة في المدمّرات.
نقاط القوة
الميزة الرئيسية للكتاب هي التوجه العملي. كل مسألة مصحوبة بكود حقيقي يمكن تجميعه واختباره. ساتر لا يخشى عرض الخيارات الخاطئة وشرح لماذا هي خطيرة. الميزة الثانية هي الهيكل: الكتاب مقسم إلى فصول صغيرة (2-5 صفحات)، مما يسمح بقراءته بشكل متقطع والعودة إلى المواضيع الصعبة. الميزة الثالثة هي التركيز على أمان الاستثناءات، والذي لا يزال ذا صلة حتى بعد 20 عاماً: أضافت لغة C++ الحديثة (C++11/14/17/20) أدوات جديدة (move-semantics, unique_ptr, optional)، لكن المبادئ الأساسية التي شرحها ساتر لم تصبح قديمة. أخيراً، أسلوب المؤلف - حيوي، مع لمسة من الفكاهة والسخرية الذاتية - يجعله