English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

ضيف
1 / ?

البرمجة بالبرنامج الثنائي المطلق

كتب أول المبرمجين بالبرنامج الثنائي المطلق: كل تعليمة و كل عنوان في أرقام ثنائية خام. قد تبدو تعليمة واحدة مثل 01100101 00001010 — كود التعليمة و عنوان الذاكرة بالبرنامج الثنائي.

مشكلة أكواد السباغيتي

عندما تطلبت الأخطاء إدراج تعليمة جديدة، واجه المبرمجون معضلة. الإدراج في موضعه يعني أن كل عنوان تعليمة لاحقة ينزاح بمقدار واحد — مما يتطلب من المبرمج تحديث كل مرجع عنوان في البرنامج بأكمله. مكلف جداً.

الحل: استبدال التعليمة مباشرة قبل نقطة الإدراج بقفزة إلى ذاكرة فارغة. في تلك الموقع الفارغ: اكتب التعليمة المستبدلة، أضف التعليمات الجديدة، ثم قفز للخلف. عندما ظهرت أخطاء في التصحيحات، طبق نفس الحيلة مرة أخرى باستخدام ذاكرة فارغة أخرى.

النتيجة: مسار التنفيذ عبر البرنامج قفز إلى مواقع تبدو عشوائية. أطلق هامينج على هذا 'علبة من السباغيتي.' مسار التدفق التحكمي، المرسوم على الورق، بدا تماماً مثل السباغيتي المتشابك.

طرق الهروب

تحسينان فوريان: التدوين الثماني (تجميع أرقام ثنائية في مجموعات من 3) والسادس عشر (مجموعات من 4، باستخدام A–F للقيم خارج 9). هذا قلل أخطاء الكتابة لكن لم يحل المشكلة الأساسية للعنوان.

برنامج التجميع الرمزي (مثل SAP من IBM — Symbolic Assembly Program — و SOAP — Symbolic Optimizing Assembly Program على IBM 650) سمح للمبرمجين بكتابة أسماء التعليمات (ADD, MOVE) و علامات العناوين الرمزية بدلاً من البرنامج الثنائي. قام المُجمِّع بالترجمة إلى ثنائي عند وقت الإدخال، مع إدارة تعيينات العناوين تلقائياً.

قام SOAP بتحسين إضافي: ترتيب التعليمات على الأسطوانة الدوارة بحيث تصل التعليمة التالية إلى رأس القراءة تماماً عندما تكتمل التعليمة السابقة — ترميز الحد الأدنى من الكمون. حتى SOAP جمع نفسه: البرنامج A معالج كبيانات لإنتاج B، B تم تشغيله على A لقياس مقدار تحسين النسخ الذاتي.

Parse Tree & Language Hierarchy

المكتبات والأكواد القابلة للنقل

لاحظ هامينج أن فكرة البرامج القابلة لإعادة الاستخدام (المكتبات الرياضية) جاءت في وقت مبكر جداً — كان بابيج قد تصورها. المشكلة: مكتبة عنوان مطلق تطلبت أن تحتل كل روتين نفس مواقع الذاكرة في كل مرة يتم استخدامها. عندما كبرت المكتبة الإجمالية جداً، تنافست البرامج على نفس العناوين.

الحل: أكواد قابلة للنقل. ينتج المُجمِّع تعليمات تُشير إلى الذاكرة نسبياً — إزاحات من عنوان أساسي — بدلاً من العناوين المطلقة. يحل رابط نهائي العناوين في وقت التحميل.

وصفت تقارير فون نيومان غير المنشورة (التي تم توزيعها على نطاق واسع) الحيل البرمجية اللازمة. أول كتاب برمجة منشور (Wilkes و Wheeler و Gill و EDSAC و 1951) دون هذه التقنيات.

اشرح لماذا أنشأت مكتبات العنوان المطلق مشكلة قابلية التوسع، وكيف حلت الأكواد القابلة للنقل المشكلة. ما الخاصية المحددة للعناوين المطلقة التي تسببت في التصادم، وماذا يعني 'قابل للنقل' من الناحية التقنية؟

انقسام تصميم اللغة

تمثل FORTRAN (1957, IBM) و ALGOL (1958, لجنة دولية) فلسفتي تصميم أنتجتا نتائج مختلفة جذرياً.

FORTRAN

قاد جون باكوس مشروع FORTRAN (FORmula TRANslation) في IBM. الهدف الأساسي للتصميم: جعل اللغة سهلة الاستخدام للعلماء والمهندسين. قبلت FORTRAN التدوين الرياضي الذي بدا طبيعياً لمستخدميها: A = B + C * D بدلاً من ADD B, C; STORE T; MULTIPLY T, D; STORE A.

بقيت FORTRAN على قيد الحياة لأكثر من 60 سنة. إنها لا تزال قيد الاستخدام النشط في الحوسبة العلمية والديناميكا السائلة والنمذجة المناخية والفيزياء الحاسوبية. لاحظ هامينج هذا الثبات كدليل على التصميم الناجح.

ALGOL

تم تصميم ALGOL (ALGOrithmic Language) من قبل لجنة من المنطقيين وعلماء الحاسوب يهدفون إلى الدقة الرياضية: لغة نظيفة منطقياً وقابلة للتعريف رسمياً. تم اختراع تدوين Backus-Naur Form (BNF) لوصف القواميير لتحديد ALGOL.

فشلت ALGOL في الممارسة العملية. على الرغم من أناقتها المنطقية وتأثيرها الهائل على تصميم اللغات اللاحقة (Pascal و C و تقريباً كل لغة حديثة تنحدر من مفاهيم قواميير ALGOL)، لم يتم نشر ALGOL نفسها على نطاق واسع. قضى حكم هامينج: مصممة منطقياً، غير قابلة للاستخدام من الناحية الإنسانية.

التسلسل الهرمي للغات

وصف هامينج التسلسل الهرمي الطبيعي من كود الآلة عبر التجميع ولغات أعلى مستوى وفي النهاية لغة 'موجهة المشكلة' قريبة من كيفية تفكير الممارسين حول مشكلتهم. يضيف كل مستوى قابلية القراءة البشرية على حساب كفاءة الآلة.

معايير هامينج الأربعة لتصميم اللغة

استخلص هامينج درس FORTRAN مقابل ALGOL إلى أربعة معايير للغة برمجية ناجحة:

1. سهلة التعلم — يمكن للمبتدئ أن يصبح منتجاً بسرعة

2. سهلة الاستخدام — تتطلب المهام الروتينية الحد الأدنى من الطقوس

3. سهلة التصحيح — الأخطاء تنتج رسائل ذات معنى وقابلة للتحديد

4. سهل استخدام الروتينات الفرعية — إعادة الاستخدام والتجريد لا تتطلب جهداً بطولياً

أضاف ملاحظة هيكلية: اللغة البشرية تحمل حوالي 60٪ زيادة؛ اللغة المكتوبة حوالي 40٪. اللغات منخفضة الزيادة (مثل APL) تنتج سطوراً واحدة أنيقة يجدها الخبراء جميلة والمبتدئين غير مفهومة — وتحتوي على أخطاء لا يمكن اكتشافها عندما يغير حرف واحد المعنى.

الدلالة: لغة مصممة للأناقة المنطقية تحسّن للقارئ الخاطئ. المبرمج إنسان؛ يحتاج البشر إلى الزيادة للقبض على الأخطاء وللتواصل النية.

طبّق معايير هامينج الأربعة على لغة برمجية تعرفها جيداً. سجّل كل معيار 1–5 (5=ممتاز). ثم حدد أي معيار، إذا تم تقويته، سيحسّن اللغة أكثر — اشرح ما سيبدو عليه التغيير المحدد.

تصميم اللغة النفسي مقابل المنطقي

عاد هامينج إلى تباين FORTRAN/ALGOL كدرس في الديناميكيات المؤسسية والبشرية، وليس فقط تصميم اللغة.

تم تصميم FORTRAN نفسياً — للبشر الذين سيستخدمونها، وخاصة العلماء الذين فكروا بالتدوين الرياضي. تم تصميم ALGOL منطقياً — للصحة الرسمية والأناقة النظرية.

المفارقة التي حددها هامينج: لغة منطقية صحيحة يقاومها البشر تفشل؛ لغة مصممة عملياً يتبناها البشر تنجح، حتى لو كانت أكثر فوضى منطقياً.

استشهد بـ APL كحالة متطرفة: أنيقة منطقياً، قابلة للتعبير في سطر واحد، مع مجموعة أحرف خاصة بها. أحبها الخبراء. وجدها المبرمجون العاديون غير مقروءة. يمكن لتغيير حرف واحد أن يحول معنى البرنامج بصمت. لـ APL مجتمع صغير مخصص و استخدام رئيسي قريب من الصفر.

حجة الزيادة البشرية: اللغة المنطوقة ~60٪ زيادة (سياق مكرر، كلمات توضيحية، بنية متوقعة). اللغة المكتوبة ~40٪ زيادة. تخدم هذه الزيادة الكشف عن الأخطاء — البشر غير موثوقين، لذا تطورت اللغة لحمل معلومات كافية مكررة للقبض على الأخطاء وتصحيحها. لغة منخفضة الزيادة تزيل هذه شبكة الأمان.

التسلسل الهرمي للمترجم

وصف هامينج الطبقات: برنامج يمكن أن يقرأ بلغة أعلى مستوى و يترجمها إلى لغة أقل. ركّز هذه الطبقات — كل واحدة ترجمة مستوى واحد أسفل. في الأعلى: لغة موجهة للمجال يكتبها الخبراء في مجال (البيولوجيا، المالية، الفيزياء) بطريقة طبيعية. في الأسفل: كود الآلة. كل انتقال هو مترجم أو مفسّر.

التنبؤ ببقاء اللغة

بحلول عام 1993، شاهد هامينج العديد من اللغات تنجح وتفشل. نجحت FORTRAN (1957). فشلت ALGOL (1958). بقيت COBOL (1959) عقوداً في الحوسبة التجارية. بقيت LISP (1958) في أبحاث الذكاء الاصطناعي. حاولت PL/I (1964) توحيد كل شيء و فشلت.

باستخدام تمييز هامينج بين تصميم اللغة النفسي و المنطقي و معاييره الأربعة، اشرح لماذا ازدهرت لغة واحدة تعرفها و فشلت أخرى (أو تفشل). يجب أن يحدد تفسيرك عوامل إنسانية محددة تحدد التبني أو الرفض — وليس فقط الخصائص التقنية.

النمط المتكرر

يحتوي فصل تاريخ البرامج في هامينج على بنية متكررة:

1. يوجد قيد مؤلم (عناوين مطلقة، تدوين ثنائي، أكواس غير قابلة للصيانة)

2. يخترع شخص ما طبقة تجريد تخفي القيد

3. يمكّن التجريد نطاق جديد، مما يخلق قيود مؤلمة جديدة

4. كرر

ثنائي → ثماني/سادس عشر → تجميع رمزي → FORTRAN → برمجة منظمة → لغات موجهة للأشياء → لغات موجهة للمجال. تحل كل طبقة ألم السلف بينما تقدم فئة جديدة من المشاكل.

انتهت محاضرة هامينج قبل هذه الانتقالات اللاحقة، لكن النمط يستمر.

درسه للمهندسين: تحل دائماً الألم الذي تكشف عنه التجريد السابق. فهم الطبقة التي تحتلها حالياً يتطلب معرفة لماذا توجد الطبقة أدناها.

حدد طبقة تجريد البرامج التي تعمل معها بانتظام. ما القيد المؤلم في الطبقة أدناها الذي تخفيه؟ و ما فئة المشاكل الجديدة التي تقدمها طبقتك الحالية — ما الألم الذي ستحتاج الطبقة التالية إلى حله؟