البرمجة على مستوى الوظائف

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

في محاضرته التي ألقاها عام 1977 بمناسبة حصوله على جائزة تورينج ، أوضح باكوس ما اعتبره ضرورة التحول إلى فلسفة مختلفة في تصميم لغات البرمجة: [ 1 ]

يبدو أن لغات البرمجة تواجه مشكلة. فكل لغة جديدة تتضمن، مع بعض التحسينات، جميع ميزات سابقاتها بالإضافة إلى بعض الميزات الإضافية. [...] كل لغة جديدة تدّعي امتلاكها ميزات جديدة وعصرية... لكن الحقيقة الواضحة هي أن قلة من اللغات تجعل البرمجة أرخص أو أكثر موثوقية بما يكفي لتبرير تكلفة إنتاجها وتعلم استخدامها.

قام بتصميم لغة البرمجة FP لتكون أول لغة برمجة تدعم على وجه التحديد أسلوب البرمجة على مستوى الوظائف.

البرنامج على مستوى الوظيفة خالٍ من المتغيرات (انظر البرمجة الخالية من النقاط )، حيث أن متغيرات البرنامج ، التي تعتبر ضرورية في تعريفات مستوى القيمة، ليست مطلوبة في البرامج على مستوى الوظيفة.

مقدمة

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

ونتيجةً لذلك، يدعو منهج البرمجة على مستوى الدوال إلى دراسة فضاء البرامج الخاضعة لعمليات تكوين البرامج ، بهدف استخلاص خصائص جبرية مفيدة لهذه العمليات. ويتيح هذا المنهج إمكانية تحويل مجموعة البرامج إلى فضاء رياضي من خلال التركيز على الخصائص الجبرية لعمليات تكوين البرامج في فضاء البرامج .

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

على النقيض من البرمجة الوظيفية

عندما قام باكوس بدراسة ونشر أسلوبه في البرمجة على مستوى الوظائف، تم فهم رسالته بشكل خاطئ في الغالب [ 2 ] على أنها تدعم لغات البرمجة الوظيفية التقليدية بدلاً من لغته الخاصة FP وخليفتها FL .

يُطلق باكوس على البرمجة الوظيفية اسم البرمجة التطبيقية ؛ وبرمجته على مستوى الوظائف هي نوع خاص ومقيد.

يتمثل أحد الفروق الرئيسية بين لغة باكوس واللغات الوظيفية في أن لغة باكوس تحتوي على التسلسل الهرمي التالي للأنواع:

  • الذرات
  • الدوال التي تنقل الذرات إلى ذرات
  • الدوال من الرتبة العليا (التي يسميها "الأشكال الوظيفية")، والتي تأخذ دالة واحدة أو دالتين إلى دوال

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

هذا القيد يعني أن الدوال في البرمجة الوظيفية تُشكل وحدة نمطية (مولدة بواسطة الدوال المدمجة) على جبر الأشكال الوظيفية، وبالتالي فهي قابلة للمعالجة الجبرية. على سبيل المثال، المسألة العامة المتعلقة بمساواة دالتين تُكافئ مسألة التوقف ، وهي غير قابلة للحسم، لكن مساواة دالتين في البرمجة الوظيفية هي ببساطة مساواة في الجبر، وبالتالي (كما يتصور باكوس) أسهل.

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

يرتبط أسلوب FP الخالي من القيم ارتباطًا وثيقًا بالمنطق المعادلاتي لفئة مغلقة ديكارتية .

لغات مثال

لغة البرمجة الأساسية على مستوى الوظائف هي FP . ومن اللغات الأخرى FL و J.

انظر أيضاً

مراجع

  1. باكوس، جون (1978). "هل يمكن تحرير البرمجة من أسلوب فون نيومان؟: أسلوب وظيفي وجبر برامجه" (ملف PDF) . مجلة اتصالات رابطة مكائن ​​الحوسبة . 21 (8): 613-641 . doi : 10.1145/359576.359579 .
  2. هوداك، بول (1989). "مفهوم لغات البرمجة الوظيفية وتطورها وتطبيقها". مجلة ACM Computing Surveys . 21 (3): 359-411 . doi : 10.1145/72551.72554 . S2CID 207637854 .