انتقل إلى المحتوى
Topos Uranos

ملخص

يختتم هذا الدرس الوحدة الأولى من الدورة، المخصّصة للخطوات الأولى في البرمجة بلغة C++. وهو يعيد بناء سلسلة المفاهيم التي تمتد من المسألة المحدَّدة المواصفات إلى الخطأ المصنَّف بحسب لحظة ظهوره، مرورًا بالخوارزمية والشيفرة المصدرية والترجمة والربط والملف التنفيذي وتواصل البرنامج مع العالم الخارجي؛ ويفصل ما يصحّ من ذلك كله في أي لغة عمّا يخصّ C++؛ ويجمع السلوك غير المعرَّف الذي أظهرته الوحدة وقاعدة الدورة التي تلزم عنه، وهي الترجمة دائمًا مع التحذيرات، ومع الكواشف (sanitizers) أثناء التطوير؛ ويعيد في تقييم الخروج مهارات تقييم الدخول؛ وينتهي بستة تحدّيات تجمع الوحدة كلها: الباقي بأقل عدد من القطع النقدية، وجدول محاذى دون حلقات، وبرنامج فيه خمسة عيوب من خمسة أنواع، وتجربة على المخزن المؤقت للإخراج، وتاريخ بتنسيق ثابت، وشرح المترجم لمن لا يعرف إلا لغة مفسَّرة.

أهداف التعلم

  1. أن يقطع المتعلّم دون مساعدة الطريق من نصّ المسألة إلى البرنامج المنفَّذ: أن يحدّد المواصفات، ويكتب الخوارزمية، ويتتبعها يدويًا، ويكتبها بلغة C++، ويترجمها بخيارات الدورة، وينفّذها، ويتحقق من نتيجتها.
  2. أن يشرح أي أداة تعمل في كل خطوة من ذلك الطريق (المحرر، والمعالج المسبق، والمترجم، والرابط، والكواشف) وما تتلقاه كل منها وما تسلّمه.
  3. أن يتعرّف نوع الخطأ (في الترجمة، أو في الربط، أو في التنفيذ، أو خطأ منطقي) من طريقة ظهوره، وأن يصحّح عدة أخطاء بالترتيب الذي تنكشف به.
  4. أن يشرح بمثال ما السلوك غير المعرَّف، ولماذا تترجم الدورة مع التحذيرات والكواشف.
  5. أن يفصل، فيما تعلّمه في الوحدة، ما يصحّ في أي لغة عمّا يخصّ C++.

ما حقّقته الوحدة

وضعت الوحدة لنفسها غاية أن تقود من لم يبرمج قط من مسألة مصوغة باللغة الجارية إلى برنامج يُترجَم ويُنفَّذ ويقرأ البيانات ويكتب النتائج، مع معرفة ما فعلته كل أداة في الطريق. وقد حقّقت ذلك مستندة فقط إلى ما أعلنته المقدمة معلومًا: الحساب المدرسي، والاعتياد على اتباع التعليمات المكتوبة، والتعامل مع الملفات والمجلدات.

من المسألة إلى الخوارزمية

أرسى درس من المسألة إلى الخوارزمية أن المسألة تتعيّن بمواصفاتها، وهي عقد يعد بالشرط اللاحق لكل مُدخل يستوفي الشرط المسبق ولا يعد بشيء خارجه. والخوارزمية إجراء محدود ودقيق وعام، يُكتب في خطوات مرقّمة، ويُتتبَّع يدويًا بجدول التتبع، ويتألف من التسلسل والقرار والتكرار؛ ويصحب كلَّ تكرار متغايرٌ، وهو كمية طبيعية تتناقص في كل جولة وتضمن أن التكرار يتوقف.

البرامج والمترجمات ولغة C++

بيّن درس البرامج والمترجمات ولغة C++ أن نص برنامج C++ لا يُنفَّذ كما هو: فالمعالج المسبق والمترجم والرابط يحوّلونه إلى ملف تنفيذي. ولزم عن ذلك التمييز الذي يسري في الوحدة كلها: ما يتوقف على النص وحده يُكتشف عند الترجمة أو الربط، وما يتوقف على البيانات لا يُكتشف إلا عند التنفيذ. وقارن الدرس النموذج المترجَم بالنموذج المفسَّر، وعلّل استعمال الدورة لمعيار C++23 وطلبه بالخيار -std=c++23.

تثبيت بيئة العمل

ثبّت درس تثبيت بيئة العمل على Windows و macOS و Linux مترجمًا قادرًا على C++23 وبرنامج Visual Studio Code مع إضافته الخاصة بـ C++. والعبرة المنهجية فيه أن المحرر لا يترجم، بل يستدعي مترجمًا يجب أن تعثر عليه الطرفية، وأن النص الدقيق للرسالة يميّز عطل التثبيت من عطل الاستدعاء.

الترجمة والتنفيذ والإعداد

ثبّت درس الترجمة والتنفيذ والإعداد دورة التحرير والحفظ والترجمة والتنفيذ والقراءة، وأمر الدورة. وميّز الخطأ، الذي يمنع الملف التنفيذي، من التحذير، الذي يسمح به لكنه ينبّه إلى شيفرة مريبة؛ وفعّل الكواشف (كاشف أخطاء الذاكرة، AddressSanitizer، وكاشف السلوك غير المعرَّف، UndefinedBehaviorSanitizer)، التي تراقب التنفيذ، وبيّن حدودها؛ وشرح أن الملف والمترجم ووحدة التحكم يجب أن تتفق على UTF-8.

تشريح البرنامج

شرّح درس تشريح البرنامج البرنامج الأدنى: ملفات الترويسة، التي تصرّح بكل اعتمادية؛ وmain، نقطة الدخول التي قيمتها رمز الخروج؛ وفضاء الأسماء std؛ والتعليمات والكتل والتعليقات. وعلّم قراءة الرسائل بدءًا من أولها، وثبّت دليل الأسلوب الخاص بالدورة.

المدخلات والمخرجات والأخطاء

وضع درس المدخلات والمخرجات والأخطاء البرنامج في تماسّ مع العالم الخارجي: std::println تكتب المطلوب بالضبط، مع مواصفات التنسيق، وstd::cin تقرأ وتتوقف عند أول محرف لا يصلح. والقراءة التي تتعثر بمحرف لا يمكنه أن يكوّن العدد تجعل المتغير صفرًا وتترك المجرى في حالة الخطأ، بصمت (فالعدد الذي لا يتسع له النوع أو المدخلات المستنفدة تتركان في المتغير قيمة أخرى، ويعدّد الدرس هذه الحالات)؛ ولذلك يُتحقَّق من القراءة. وختم الدرس الوحدة بتصنيف الأخطاء بحسب لحظة ظهورها: في الترجمة، وفي الربط، وفي التنفيذ، والمنطقية.