الدلالات التشغيلية
| الدلالات | ||||||||
|---|---|---|---|---|---|---|---|---|
|
||||||||
|
دلالات لغات البرمجة | ||||||||
|
||||||||
الدلالات التشغيلية هي فئة من دلالات لغات البرمجة الرسمية حيث يتم التحقق من بعض الخصائص المرغوبة للبرنامج ، مثل الصحة أو السلامة أو الأمان، من خلال بناء أدلة من البيانات المنطقية حول تنفيذه وإجراءاته، بدلاً من ربط المعاني الرياضية بمصطلحاته ( الدلالات الإشارية ). يتم تصنيف الدلالات التشغيلية في فئتين: الدلالات التشغيلية البنيوية (أو دلالات الخطوات الصغيرة ) تصف رسميًا كيف تتم الخطوات الفردية للحساب في نظام قائم على الكمبيوتر؛ من خلال الدلالات الطبيعية المعارضة (أو دلالات الخطوات الكبيرة ) تصف كيف يتم الحصول على النتائج الإجمالية للتنفيذات. تشمل الأساليب الأخرى لتوفير دلالات رسمية للغات البرمجة الدلالات البديهية والدلالات الإشارية .
تصف الدلالات التشغيلية للغة البرمجة كيفية تفسير برنامج صالح على أنه تسلسلات من الخطوات الحسابية. هذه التسلسلات هي إذن معنى البرنامج. في سياق البرمجة الوظيفية ، تعيد الخطوة الأخيرة في التسلسل النهائي قيمة البرنامج. (بشكل عام، يمكن أن يكون هناك العديد من قيم الإرجاع لبرنامج واحد، لأن البرنامج قد يكون غير حتمي ، وحتى بالنسبة للبرنامج الحتمي، يمكن أن يكون هناك العديد من تسلسلات الحساب لأن الدلالات قد لا تحدد بالضبط أي تسلسل من العمليات يصل إلى تلك القيمة.)
ربما كان أول تجسيد رسمي للدلالات التشغيلية هو استخدام حساب لامدا لتحديد دلالات لغة ليسب . [1] كما أن الآلات المجردة في تقليد آلة SECD وثيقة الصلة أيضًا.
تاريخ
تم استخدام مفهوم الدلالات التشغيلية لأول مرة في تحديد دلالات AlGOL 68. العبارة التالية هي اقتباس من تقرير ALGOL 68 المنقح:
يتم تفسير معنى البرنامج في اللغة الصارمة من حيث جهاز كمبيوتر افتراضي يقوم بمجموعة الإجراءات التي تشكل إعداد هذا البرنامج. (Algol68، القسم 2)
يعود أول استخدام لمصطلح "الدلالات التشغيلية" بمعناه الحالي إلى دانا سكوت (Plotkin04). وفيما يلي اقتباس من ورقة سكوت الرائدة حول الدلالات الرسمية، والتي يذكر فيها الجوانب "التشغيلية" للدلالات.
من الجيد جدًا أن نسعى إلى اتباع نهج "أكثر تجريدًا" و"أكثر نظافة" في التعامل مع الدلالات، ولكن إذا كان من المقرر أن تكون الخطة جيدة، فلا يمكن تجاهل الجوانب التشغيلية تمامًا. (Scott70)
النهج
قدم جوردون بلوتكين الدلالات البنيوية التشغيلية، وماتياس فيليزن وروبرت هيب الدلالات الاختزالية، [2] وجيلز كان الدلالات الطبيعية.
دلالات الخطوات الصغيرة
الدلالات التشغيلية البنيوية
تم تقديم الدلالات التشغيلية البنيوية (SOS، وتسمى أيضًا الدلالات التشغيلية المنظمة أو دلالات الخطوة الصغيرة ) بواسطة جوردون بلوتكين في (Plotkin81) كوسيلة منطقية لتحديد الدلالات التشغيلية. الفكرة الأساسية وراء SOS هي تحديد سلوك البرنامج من حيث سلوك أجزائه، وبالتالي توفير وجهة نظر هيكلية، أي موجهة نحو بناء الجملة واستقرائية ، حول الدلالات التشغيلية. تحدد مواصفات SOS سلوك البرنامج من حيث (مجموعة) علاقات الانتقال (العلاقات). تأخذ مواصفات SOS شكل مجموعة من قواعد الاستدلال التي تحدد التحولات الصالحة لقطعة مركبة من بناء الجملة من حيث انتقالات مكوناتها.
على سبيل المثال البسيط، نأخذ في الاعتبار جزءًا من دلالات لغة برمجة بسيطة؛ وتوجد أمثلة توضيحية مناسبة في Plotkin81 وHennessy90، وكتب مدرسية أخرى. لنفترض أن range يغطي برامج اللغة، ولنفترض أن range يغطي الحالات (على سبيل المثال، الوظائف من مواقع الذاكرة إلى القيم). إذا كان لدينا تعبيرات (محددة بـ )، وvalues ( ) وlocations ( )، فإن أمر تحديث الذاكرة سيكون له دلالات:
بشكل غير رسمي، تنص القاعدة على أنه " إذا تم تقليص التعبير في الحالة إلى قيمة ، فسيقوم البرنامج بتحديث الحالة بالتعيين ".
يمكن إعطاء دلالات التسلسل من خلال القواعد الثلاث التالية:
بشكل غير رسمي، تنص القاعدة الأولى على أنه إذا انتهى البرنامج في الحالة في الحالة ، فإن البرنامج في الحالة سيُختزل إلى البرنامج في الحالة . (يمكنك التفكير في هذا على أنه إضفاء الطابع الرسمي على "يمكنك تشغيل ، ثم تشغيل باستخدام مخزن الذاكرة الناتج.) تنص القاعدة الثانية على أنه إذا كان البرنامج في الحالة يمكن اختزاله إلى البرنامج الذي يحتوي على الحالة ، فإن البرنامج في الحالة سيُختزل إلى البرنامج في الحالة . (يمكنك التفكير في هذا على أنه إضفاء الطابع الرسمي على مبدأ المترجم الأمثل: "يُسمح لك بالتحويل كما لو كان مستقلاً، حتى لو كان مجرد الجزء الأول من البرنامج.") الدلالات هيكلية، لأن معنى البرنامج المتسلسل ، يتم تعريفه من خلال معنى ومعنى .
إذا كان لدينا أيضًا تعبيرات منطقية على الحالة، والتي يتراوح نطاقها بواسطة ، فيمكننا تحديد دلالات أمر while :
يسمح هذا التعريف بإجراء تحليل رسمي لسلوك البرامج، مما يسمح بدراسة العلاقات بين البرامج. تشمل العلاقات المهمة ترتيبات المحاكاة المسبقة والمحاكاة الثنائية . وهي مفيدة بشكل خاص في سياق نظرية التزامن .
بفضل مظهرها البديهي وبنيتها سهلة المتابعة، اكتسبت SOS شعبية كبيرة وأصبحت معيارًا فعليًا في تحديد الدلالات التشغيلية. وكدليل على النجاح، اجتذب التقرير الأصلي (ما يسمى بتقرير آرهوس) حول SOS (Plotkin81) أكثر من 1000 استشهاد وفقًا لـ CiteSeer [1]، مما يجعله أحد أكثر التقارير الفنية استشهادًا في علوم الكمبيوتر .
دلالات الاختزال
الدلالات الاختزالية هي عرض بديل للدلالات التشغيلية. تم تطبيق أفكارها الرئيسية لأول مرة على المتغيرات الوظيفية البحتة للاستدعاء بالاسم والاستدعاء بالقيمة لحساب لامدا بواسطة جوردون بلوتكين في عام 1975 [3] وتم تعميمها على اللغات الوظيفية ذات الترتيب الأعلى مع ميزات الأمر بواسطة ماثياس فيليسين في أطروحته عام 1987. [4] تم تطوير الطريقة بشكل أكبر بواسطة ماثياس فيليسين وروبرت هيب في عام 1992 في نظرية معادلة كاملة للتحكم والحالة . [ 2 ] تم صياغة عبارة "دلالات الاختزال" نفسها لأول مرة بواسطة فيليسين ودانييل ب. فريدمان في ورقة بحثية في PARLE عام 1987. [5]
يتم تقديم دلالات الاختزال كمجموعة من قواعد الاختزال التي تحدد كل منها خطوة اختزال محتملة واحدة. على سبيل المثال، تنص قاعدة الاختزال التالية على أنه يمكن اختزال عبارة التعيين إذا كانت موجودة مباشرة بجوار إعلان المتغير الخاص بها:
للحصول على عبارة تعيين في مثل هذا الموضع، يتم "تجميعها" من خلال تطبيقات الوظائف والجانب الأيمن من عبارات التعيين حتى تصل إلى النقطة المناسبة. نظرًا لأن التعبيرات المتداخلة قد تعلن عن متغيرات مميزة، فإن حساب التفاضل والتكامل يتطلب أيضًا قاعدة إخراج للتعبيرات. تحدد معظم الاستخدامات المنشورة لدلالات الاختزال مثل هذه "قواعد الفقاعة" مع ملاءمة سياقات التقييم. على سبيل المثال، يمكن إعطاء قواعد سياقات التقييم في لغة استدعاء بسيطة بالقيمة على النحو التالي
حيث تشير إلى تعبيرات عشوائية وتشير إلى قيم مخفضة بالكامل. يتضمن كل سياق تقييمي ثقبًا واحدًا فقط يتم فيه إدخال مصطلح بطريقة التقاط. يشير شكل السياق من خلال هذه الثقب إلى المكان الذي قد يحدث فيه الاختزال. لوصف "الفقاعات" بمساعدة سياقات التقييم، يكفي بديهية واحدة:
إن قاعدة التخفيض الفردية هذه هي قاعدة الرفع من حساب لامدا لفيلسن وهيب لعبارات التعيين. تقيد سياقات التقييم هذه القاعدة بمصطلحات معينة، ولكنها قابلة للتطبيق بحرية في أي مصطلح، بما في ذلك تحت لامدا.
وعلى غرار بلوتكين، فإن إظهار فائدة حساب التفاضل والتكامل المشتق من مجموعة من قواعد الاختزال يتطلب (1) مبرهنة تشيرش-روسر للعلاقة ذات الخطوة الواحدة، والتي تحث على دالة تقييم، و(2) مبرهنة كاري-فاي للتوحيد القياسي للإغلاق المتعدي الانعكاسي للعلاقة ذات الخطوة الواحدة، والذي يحل محل البحث غير الحتمي في دالة التقييم ببحث حتمي في أقصى اليسار/الخارج. وقد أظهر فيليزن أن الامتدادات الإلزامية لهذا الحساب تلبي هذه النظريات. وتتمثل عواقب هذه النظريات في أن النظرية المعادلة - الإغلاق المتعدي الانعكاسي المتماثل - هي مبدأ منطقي سليم لهذه اللغات. ومع ذلك، في الممارسة العملية، تستغني معظم تطبيقات دلالات الاختزال عن الحساب وتستخدم الاختزال القياسي فقط (والمقيِّم الذي يمكن اشتقاقه منه).
تعد دلالات الاختزال مفيدة بشكل خاص نظرًا لسهولة نمذجة سياقات التقييم لحالة أو بنيات التحكم غير العادية (على سبيل المثال، الاستمرارية من الدرجة الأولى ). بالإضافة إلى ذلك، تم استخدام دلالات الاختزال لنمذجة اللغات الموجهة للكائنات ، [6] وأنظمة العقود ، والاستثناءات، والمستقبلات، والاستدعاء حسب الحاجة، والعديد من ميزات اللغة الأخرى. يقدم ماثياس فيليزن وروبرت بروس فيندلر وماثيو فلات معالجة شاملة وحديثة لدلالات الاختزال التي تناقش العديد من هذه التطبيقات بالتفصيل في هندسة الدلالات مع PLT Redex . [7]
دلالات الخطوة الكبيرة
الدلالات الطبيعية
تُعرف الدلالات التشغيلية البنيوية ذات الخطوة الكبيرة أيضًا باسم الدلالات الطبيعية والدلالات العلائقية ودلالات التقييم . [8] تم تقديم الدلالات التشغيلية ذات الخطوة الكبيرة تحت اسم الدلالات الطبيعية بواسطة جيلز كان عند تقديم Mini-ML، وهي لهجة نقية من ML .
يمكن للمرء أن ينظر إلى تعريفات الخطوة الكبيرة باعتبارها تعريفات للوظائف، أو بشكل عام للعلاقات، وتفسير كل بنية لغوية في المجال المناسب. تجعلها بديهيتها خيارًا شائعًا لمواصفات الدلالات في لغات البرمجة، ولكنها تعاني من بعض العيوب التي تجعل استخدامها غير مريح أو مستحيل في العديد من المواقف، مثل اللغات ذات الميزات التي تتطلب التحكم المكثف أو التزامن. [9]
يصف علم الدلالات ذو الخطوة الكبيرة بطريقة تقسيم وغزو كيف يمكن الحصول على نتائج التقييم النهائية لهياكل اللغة من خلال الجمع بين نتائج تقييم نظيراتها النحوية (التعبيرات الفرعية، والعبارات الفرعية، وما إلى ذلك).
مقارنة
هناك عدد من الفروق بين دلالات الخطوة الصغيرة والخطوة الكبيرة التي تؤثر على ما إذا كانت إحداهما أو الأخرى تشكل أساسًا أكثر ملاءمة لتحديد دلالات لغة البرمجة.
تتمتع دلالات الخطوة الكبيرة بميزة كونها غالبًا ما تكون أبسط (تحتاج إلى قواعد استدلال أقل) وغالبًا ما تتوافق بشكل مباشر مع تنفيذ فعال لمترجم للغة (ومن هنا أطلق عليها كاهن اسم "طبيعية"). يمكن أن يؤدي كلاهما إلى إثباتات أبسط، على سبيل المثال عند إثبات الحفاظ على الصحة في ظل بعض تحويلات البرنامج . [10]
العيب الرئيسي لدلالات الخطوة الكبيرة هو أن العمليات الحسابية غير المنتهية ( المتباعدة ) لا تحتوي على شجرة استدلال، مما يجعل من المستحيل تحديد وإثبات خصائص مثل هذه العمليات الحسابية. [10]
تمنح الدلالات ذات الخطوات الصغيرة مزيدًا من التحكم في تفاصيل وترتيب التقييم. وفي حالة الدلالات التشغيلية الآلية، يسمح هذا للدلالات التشغيلية بالتتبع وللدلالي بذكر وإثبات نظريات أكثر دقة حول سلوك وقت تشغيل اللغة. تجعل هذه الخصائص الدلالات ذات الخطوات الصغيرة أكثر ملاءمة عند إثبات سلامة النوع لنظام نوع مقابل دلالات تشغيلية. [10]
انظر أيضا
مراجع
- ^ McCarthy, John . "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". مؤرشف من الأصل في 2013-10-04 . تم الاسترجاع في 2006-10-13 .
- ^ ab Felleisen, M.; Hieb, R. (1992). "التقرير المنقح عن النظريات النحوية للتحكم المتسلسل والحالة". علوم الكمبيوتر النظرية . 103 (2): 235–271. doi :10.1016/0304-3975(92)90014-7.
- ^ بلوتكين، جوردون (1975). "Call-by-name, call-by-value and the λ-calculus" (PDF) . علوم الكمبيوتر النظرية . 1 (2): 125–159. doi : 10.1016/0304-3975(75)90017-1 . تم الاسترجاع في 22 يوليو 2021 .
- ^ فيليزن، ماتياس (1987). حسابات تحويل لامدا إلى سي إس: نظرية نحوية للتحكم والحالة في لغات البرمجة ذات الترتيب الأعلى الإلزامي (ملف PDF) (دكتوراه). جامعة إنديانا . تم الاسترجاع في 22 يوليو 2021 .
- ^ فيليزن، ماتياس؛ فريدمان، دانييل ب. (1987). "الدلالات الاختزالية للغات الأمرية ذات الترتيب الأعلى". وقائع مؤتمر أوروبا للهندسة المعمارية واللغات المتوازية . المؤتمر الدولي للهندسة المعمارية واللغات المتوازية في أوروبا. المجلد 1. دار نشر سبرينغر. ص 206-223. doi :10.1007/3-540-17945-3_12.
- ^ Abadi, M.; Cardelli, L. (8 September 2012). نظرية الأشياء. ISBN 9781441985989.
- ^ Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew (2009). Semantics Engineering with PLT Redex. The MIT Press. ISBN 978-0-262-06275-6.
- ^ جامعة إلينوي CS422
- ^ نيبكو، توبياس؛ كلاين، جيرفين (2014). الدلالات الملموسة (PDF) . ص. 101-102. doi : 10.1007/978-3-319-10542-0 . تم الاسترجاع في 13 مارس 2024 .
- ^ abc Xavier Leroy . "دلالات العمليات المتزامنة ذات الخطوات الكبيرة".
قراءة إضافية
- جيلز كاهن . "الدلالات الطبيعية". وقائع الندوة السنوية الرابعة حول الجوانب النظرية لعلوم الكمبيوتر . دار نشر سبرينغر. لندن. 1987.
- جوردون د. بلوتكين. نهج هيكلي للدلالات التشغيلية. (1981) Tech. Rep. DAIMI FN-19، قسم علوم الكمبيوتر، جامعة آرهوس، آرهوس، الدنمارك. (أعيد طبعه مع التصحيحات في J. Log. Algebr. Program. 60-61: 17-139 (2004)، طبعة أولية).
- جوردون د. بلوتكين. أصول الدلالات التشغيلية البنيوية. مجلة الجبر اللوجيستية. 60-61:3-15، 2004. (طبعة أولية).
- دانا إس سكوت. مخطط لنظرية حسابية رياضية، مجموعة أبحاث البرمجة، دراسة تقنية PRG-2، جامعة أكسفورد، 1970.
- أدريان فان فيجنجاردن وآخرون. تقرير منقح عن اللغة الخوارزمية ALGOL 68 . إيفيب. 1968. ([2] [ الرابط الميت الدائم ] )
- ماثيو هينيسي . دلالات لغات البرمجة. وايلي، 1990. متاح على الإنترنت.
