معظم لغات البرمجة الشائعة هي لغات عالية المستوى. على سبيل المثال ، Java أو Python أو C #. بالطبع ، يمكنك البرمجة عليها وتخيل كيفية عمل مستويات التجريد المختلفة بشكل سيئ. ولكن بالنسبة لمتخصص جيد في تكنولوجيا المعلومات ، من المهم فهم كيفية بناء النظام الأساسي الذي يتفاعل معه ، وكيف تعمل بيئة التطوير ، والمترجم ، ووظيفة المصحح. هذا يقودنا إلى الحديث عن البرمجة منخفضة المستوى.
تعد LLP (البرمجة منخفضة المستوى) طريقة مناسبة لمعرفة كيفية كتابة برامج موثوقة وسريعة ومدمجة وفعالة. يتعلم طلابنا المجمع و C في المقام الأول للتعرف بشكل أفضل على كيفية عمل البرنامج.
صور بابلو BD CC BY-SAلماذا تريد ان تعرف
تتطور صناعة تكنولوجيا المعلومات بشكل سريع وهي تخضع لأسلوب التكنولوجيا واللغات. تتغير المفاهيم الأساسية - على سبيل المثال ، النماذج الحسابية والذاكرة الافتراضية والتجميع وتجميع البرنامج - بشكل أقل تكرارًا. سيساعدك فهم كيفية ظهور المبادئ الأساسية لمثل هذه المفاهيم في لغة برمجة واحدة على تعلم لغة مماثلة بسرعة إذا كنت بحاجة إليها للعمل. يوضح LLP في هذه الحالة كيف يصبح البرنامج من النص المصدر مجموعة من إرشادات الجهاز ، وكيف يتم تنفيذها على الكمبيوتر. في المقابل ، تساعدك الإلمام بآليات إدارة الذاكرة ومبادئ المترجم على كتابة تعليمات برمجية أقل طلبًا على موارد الحوسبة.
توضيح: غالبًا ما يتعين علينا أن نصل إلى أطروحة مفادها أن LLP تقوم فقط ببرمجة الحديد والمهام المماثلة. الأمر ليس كذلك.
أين يمكنني أن أجد LLP عمليًا:
- التداول يجعل التداول في البورصة برامج ذات متطلبات عالية بشكل لا يصدق لوقت رد الفعل لتقلبات السوق. بسبب "بُعد" اللغات عالية المستوى من "الحديد" ، من الصعب جدًا التنبؤ بوقت استجابة البرنامج لحدث خارجي. لذلك ، تشارك LLP هنا لتوفير التحكم في سرعة المعاملات.
- الروبوتات . موارد الحوسبة محدودة هنا ، لذا فإن متطلبات جودة البرامج وضغط الشفرة عالية. لا تعمل الأساليب المقبولة عمومًا لإنشاء البرامج هنا دائمًا ، وغالبًا ما يمكن أن يتم التطوير بلغة C أو لغة نظام أخرى.
- برنامج النظام . هذه هي أنظمة التشغيل ، المجمعات (JIT ، AOT) ، والمتصفحات (أصبحت اليوم منصة لإنشاء تطبيقات معقدة). لا يلاحظ عمله دائمًا للشخص العادي ، ولكنه يخلق بنية تحتية لبرمجيات التطبيق.
كيف نستعد لهذا؟
يدرس طلابنا في التوجيهات 09.03.01 "المعلوماتية وهندسة الكمبيوتر" و 09.03.04 "هندسة البرمجيات" عددًا من التخصصات المتعلقة بالبرمجة منخفضة المستوى. هذه هي أنظمة التشغيل ، وبرمجيات النظام (بما في ذلك في Unix) ، وتطوير المترجم ، وتقنيات المحاكاة الافتراضية ، إلخ.
نقطة البداية - دورة "البرمجة منخفضة المستوى". هنا ينتظر الطلاب للعمل مع المجمع و C. بالتوازي - يدرسون عملية تجميع البرامج وتنفيذها. الدورة التدريبية بتنسيق "من تعيين المهمة إلى البرنامج النهائي". الهدف الرئيسي من الدورة هو الحصول على فكرة عن كيفية تغير عرض البرنامج خلال التحولات بين:
- كتابة التعليمات البرمجية
- المعالجة المسبقة والتجميع ؛
- ربط
- التنفيذ والتصحيح.
الصورة hackNY.org CC BY-SAمن الطلاب الذين يأتون إلى الدورة ، نتوقع الحد الأدنى من خبرة البرمجة بلغات عالية المستوى (على سبيل المثال ، Java أو C #). نوصي الدورات التالية عبر الإنترنت:
يتم تدريس دورة "البرمجة منخفضة المستوى" بشكل أساسي من
كتاب مكتوب خصيصًا لطلابنا. يُنشر الكتاب باللغة الإنجليزية ويُترجم إلى اليابانية والبرتغالية. غالبًا ما نعمل أيضًا مع دليل مطور برامج Intel64 و System V AMD64 ABI.
ماذا يوجد داخل الدورة
بكلمات بسيطة ، يمكن تفصيل هذه الدورة على النحو التالي (فيما يتعلق بالمواضيع التي تم تحديدها أعلاه):
- كود الهجاء . افترض لغة تجميع مجانية لـ Intel 64 (NASM و Linux) و C11. هنا ندرس النماذج الحسابية ، ونقدم توصيات متقدمة حول أسلوب كتابة التعليمات البرمجية.
- المعالجة والتجميع . تتم دراسة معالجات NASM و C ، والقواعد الرسمية ، وتحسينات الشفرة الشائعة من قبل المترجم ، وآليات التنفيذ النموذجي لتراكيب لغة C على مستوى المجمع (وبعبارة أخرى ، يتم تناول عرض لفكرة "C عبارة عن مجمع عالي المستوى").
- ربط (ربط) . ثابت وديناميكي. من الناحية العملية ، يتم دراسة تنسيق ELF - يستكشف الطلاب ما يفعله الرابط والمحمل الديناميكي. بالمناسبة ، تم تخصيص دورة مصغرة منفصلة لهذا الغرض.
- تشغيل البرنامج وتصحيحه . نحن نفهم هنا كيفية ارتباط هذه المهام ببنية الكمبيوتر ، وجهاز الذاكرة الافتراضية ووضع الامتياز ، والمقاطعات ، وآلية استدعاء النظام. بالإضافة إلى ذلك ، فإننا نأخذ في الاعتبار كيفية استخدام gdb (مصحح أخطاء قوي يسمح لك "بالنظر تحت غطاء أي برنامج").
الفروق التنظيمية الهامة
نكسر المحاضرات من خلال المشاركة في كتابة التعليمات البرمجية ودراسة الملفات المجمعة باستخدام أدوات من binutils (objdump ، readelf) أو gdb. أثناء المحاضرة (وليس فقط) ، يطرح الطلاب أسئلة شفهيًا وفي قناة الدورة التدريبية في رسول معروف ، ويجيب المعلمون عليها في أقرب وقت ممكن.
كدرس عملي ، يقوم الطلاب بعمل المختبر. في بعض الأحيان يرغب الطلاب في عملية التعلم في تطوير شيء خاص بهم يثير اهتمامهم الشخصي (لعبة ، برنامج للتحكم في الروبوت ، مترجم ، وما إلى ذلك).
لذلك ، كبديل للاختبار ، يمكن للطلاب إنشاء مشروع فردي حول موضوع يتفق عليه مع المعلم. بعد مراجعة التعليمات البرمجية ونشرها على GitHub ، يسجلون
مقطع فيديو يوضح المشروع (تحتوي هذه القناة على مشاريع تم تنفيذها منذ 2014 ، روابط إلى GitHub في الوصف).
مثال على عمل الطالب: الليفيترون التناظري ( قصة مفصلة عن المشروع على هبر )تم الانتهاء من بعض المشاريع الأخرى في نهاية الدورة:
عن المعلم
في الدورة ، يتفاعل فريق كامل من المعلمين مع الطلاب الذين يلقيون المحاضرات ، ويأخذون العمل المخبري ، ويقدمون المشورة للطلاب. يشارك الطلاب الكبار في المناقشات ويساعدون طلاب الدورة الحالية على فهم تعقيدات البرمجة منخفضة المستوى.
قام إيغور زيركوف ، مؤلف كتاب دراسي عنها ، بالعمل الرئيسي لإعداد المواد للدورة. درس إيغور في جامعة ITMO والجامعة الأكاديمية ، وحصل على درجة الماجستير في ITMO في عام 2016. مجال اهتمامه هو نظرية النوع والمنطق الرياضي ولغات البرمجة والبرمجة ذات المستوى المنخفض. يتعلق مشروعه الحالي الرئيسي بالتحقق الرسمي من إعادة بناء لغة C باستخدام Coq ومترجم CompCert الذي تم التحقق منه لـ C.
تساعدك هذه الدورة التدريبية على تعلم كيفية النظر إلى مشكلة من مستوى ملائم من التجريد ، ولنفترض بشكل مشروط ، عدم محاولة "كتابة تطبيقات الويب في المجمّع". نحن نحاول الاقتراب من دراسة C و المجمع من حيث فهم المفاهيم المرتبطة بهذه "الأدوات" وبيئتها - أنظمة التشغيل ووحدات المعالجة المركزية.
بالمناسبة ، هنا يمكنك العثور على كتاب ، مستوحى من كتابته من خلال تدريس هذه الدورة (تم نشره باللغة الإنجليزية واليابانية والبرتغالية).