نماذج البرمجة
نماذج البرمجة هي الأساليب الأساسية التي تنظم كيفية التعبير عن الحوسبة، بدءًا من تغيير الحالة الأمرية (imperative state mutation) وصولًا إلى النماذج الوظيفية والمنطقية والتصريحية.
Definition
نموذج البرمجة هو مجموعة متماسكة من المفاهيم ومبادئ الهيكلة لتنظيم الحوسبة داخل اللغة، ويحدد الوحدات الأساسية للبرنامج (العبارات، التعبيرات، الكائنات، العلاقات) وكيفية تركيبها.
Scope
يغطي هذا المجال النماذج الرئيسية للغات البرمجة والنماذج الحسابية التي تقوم عليها: البرمجة الأمرية والشيئية المبنية على الحالة القابلة للتغيير وتمرير الرسائل؛ البرمجة الوظيفية المبنية على تقييم التعبيرات والدوال عالية الرتبة؛ البرمجة المنطقية والمقيدة المبنية على العلاقات والبحث؛ والبرمجة الوصفية (metaprogramming)، حيث تعالج البرامج البرامج. ويتناول هذا المجال كيفية تشكيل النماذج لتصميم اللغة، والمقايضات التي تجسدها، وكيف تجمع اللغات الحديثة متعددة النماذج بينها.
Sub-topics
Core questions
- ما الذي يميز نموذجًا عن آخر، وهل هذه الفروق حادة أم مجرد مسائل تركيز؟
- كيف تؤثر النماذج على صحة البرنامج، نمطيته، والاستدلال فيه؟
- هل يمكن توحيد الأنماط الأمرية والتصريحية، وما الذي يُكتسب أو يُفقد بخلطهما؟
- كيف يؤثر النموذج الحسابي الأساسي (آلة فون نيومان، حساب التفاضل والتكامل اللامدا، الحل) على النموذج؟
Key theories
- البرمجة الوظيفية كجبر للبرامج
- جادل باكوس بأن البرمجة الوظيفية القائمة على المجمعات (combinator-based) تحرر اللغات من عنق الزجاجة الخاص بـ فون نيومان من خلال تزويد البرامج بجبر من القوانين المعادلة للاستدلال والتحويل.
- الخوارزمية = المنطق + التحكم
- فصل كوالسكي بين المواصفات المنطقية للمشكلة واستراتيجية التحكم المستخدمة لحلها، وهو ما يؤسس للنموذج التصريحي/المنطقي ويوضح ما يميزه عن الكود الإجرائي.
- إطار عمل اللغة الأساسية متعددة النماذج
- يقدم فان روي وهاريدي النماذج كامتدادات تدريجية للغة أساسية صغيرة، موضحين كيف يمكن إضافة أو إزالة مفاهيم مثل الحالة، التزامن، والكسل (laziness) لاستعادة كل نموذج.
Clinical relevance
يؤثر اختيار النموذج عمليًا على هندسة البرمجيات: فالأنماط الوظيفية والتصريحية تساعد في الاستدلال المعادل، وقابلية الاختبار، والموازاة، بينما يدعم التحلل الشيئي النمطية واسعة النطاق. تمزج اللغات الحديثة بشكل متزايد بين النماذج، لذا فإن فهم مقايضاتها يفيد في اختيار اللغة والتصميم الاصطلاحي.
History
تنحدر البرمجة الأمرية من بنية فون نيومان ذات البرنامج المخزن واللغات المبكرة مثل فورتران وألغول. قدمت لغة ليسب (1958) أفكارًا وظيفية متجذرة في حساب التفاضل والتكامل اللامدا (lambda calculus). شهدت السبعينيات ظهور البرمجة المنطقية (برولوغ) وصعود البرمجة الهيكلية ثم الشيئية (سيمولا، سمولتوك). بلورت محاضرة باكوس لجائزة تورينغ عام 1977 النقد الوظيفي للنمط الأمري، وأنتجت العقود اللاحقة لغات متعددة النماذج بشكل متزايد.
Debates
- الأمرية مقابل التصريحية كمبدأ تنظيمي أساسي
- يوازن نقاش طويل الأمد بين المباشرة والتحكم في الأداء للكود الأمري مقابل مزايا الاستدلال والتركيبية للأنماط التصريحية والوظيفية؛ وتحل معظم اللغات الحديثة هذه المسألة من خلال دعم كليهما.
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- هل البرمجة الشيئية نموذج منفصل عن البرمجة الأمرية؟
- تُعامل البرمجة الشيئية عادةً على أنها نظام هيكلي مُركّب فوق النموذج الأمري: فهي تنظم الحالة القابلة للتغيير في كائنات ذات سلوك مغلف، ولكنها لا تزال تعتمد على تغيير الحالة والتسلسل.
- هل النماذج حصرية متبادلة؟
- لا. العديد من اللغات المستخدمة على نطاق واسع هي لغات متعددة النماذج، تجمع بين الميزات الوظيفية والشيئية والأمرية بحيث يمكن للمبرمجين اختيار الأسلوب الأنسب لكل مهمة.