نظام التأثير
في مجال الحوسبة ، يُعد نظام التأثيرات نظامًا رسميًا يصف التأثيرات الحسابية لبرامج الحاسوب، مثل التأثيرات الجانبية . ويمكن استخدام نظام التأثيرات لإجراء فحص أثناء عملية الترجمة للتأثيرات المحتملة للبرنامج.
يُوسّع نظام التأثير مفهوم النوع ليشمل مكون "التأثير"، الذي يتألف من نوع التأثير والمنطقة . يصف نوع التأثير ما يتم تنفيذه، بينما تصف المنطقة المعايير (البارامترات) التي يتم من خلالها تنفيذه.
يُعدّ نظام التأثير عادةً امتدادًا لنظام النوع . ويُستخدم مصطلح " نظام النوع والتأثير " أحيانًا في هذه الحالة. غالبًا ما يُشار إلى نوع القيمة مع تأثيرها بالصيغة type ! effect ، حيث يُشير كلٌّ من مُكوّن النوع ومُكوّن التأثير إلى مناطق مُحدّدة (على سبيل المثال، يُحدّد نوع خلية ذاكرة قابلة للتغيير بواسطة تسمية منطقة الذاكرة التي تقع فيها الخلية). وينبثق مصطلح "التأثير الجبري" من نظام النوع.
يمكن استخدام أنظمة التأثير لإثبات نقاء التعريفات الداخلية غير النقية من الخارج: على سبيل المثال، إذا قامت دالة ما بتخصيص وتعديل منطقة من الذاكرة داخليًا، ولكن نوع الدالة لا يذكر هذه المنطقة، فيمكن حذف التأثير المقابل من تأثير الدالة. [ 1 ]
أمثلة
تتضمن بعض الأمثلة على السلوكيات التي يمكن وصفها بواسطة أنظمة التأثير ما يلي:
- عند قراءة الذاكرة أو كتابتها أو تخصيصها، يكون نوع التأثير إما قراءة أو كتابة أو تخصيص أو تحرير ، والمنطقة هي نقطة البرنامج التي تم فيها التخصيص (أي أن كل نقطة في البرنامج يتم فيها التخصيص تُخصص لها تسمية فريدة، وتُمرر معلومات المنطقة بشكل ثابت على طول مسار البيانات). معظم الدوال التي تتعامل مع الذاكرة تكون متعددة الأشكال في متغير المنطقة: على سبيل المثال، الدالة التي تبدل موقعين في الذاكرة يكون نوعها .
forall r1 r2, unit ! {read r1, read r2, write r1, write r2} - العمل مع الموارد، مثل الملفات: على سبيل المثال، قد يكون نوع التأثير فتحًا وقراءة وإغلاقًا ، ومرة أخرى، المنطقة هي نقطة البرنامج التي يتم فيها فتح المورد .
- عمليات نقل التحكم مع الاستمراريات والقفزات الطويلة: قد يكون نوع التأثير goto (أي أن جزء التعليمات البرمجية قد يقوم بالقفز) و comefrom (أي أن جزء التعليمات البرمجية قد يكون هدف القفز)، وتشير المنطقة إلى نقطة البرنامج التي يمكن من خلالها أو إليها تنفيذ القفزة.
من وجهة نظر المبرمج، تُعدّ التأثيرات مفيدة لأنها تسمح بفصل تنفيذ ( كيفية ) إجراءات محددة عن تحديد ماهية هذه الإجراءات. على سبيل المثال، يمكن لتأثير "طلب اسم" قراءة البيانات من وحدة التحكم، أو فتح نافذة، أو ببساطة إرجاع قيمة افتراضية. يمكن وصف تدفق التحكم بأنه مزيج من " الاستسلام" (حيث يستمر التنفيذ) و "الرمي" (حيث ينتشر التأثير غير المعالج إلى المستويات الأدنى حتى يتم التعامل معه). [ 2 ]
التطبيقات
الميزة الأساسية
- كوكا هي لغة برمجة وظيفية ذات كتابة ثابتة، وتتميز بمعالجات التأثيرات الجبرية كخاصية رئيسية. [ 3 ]
- Eff هي لغة برمجة وظيفية ذات كتابة ثابتة تتمحور حول معالجات التأثيرات الجبرية. [ 4 ] [ 5 ]
- Unison هي لغة برمجة وظيفية ذات كتابة ثابتة، وتتضمن معالجات التأثيرات الجبرية (تسمى "القدرات" في اللغة) كجزء أساسي من نظام النوع. [ 6 ]
- Effekt هي لغة بحثية تتمحور حول معالجات التأثيرات والتأثيرات متعددة الأشكال. [ 7 ]
دعم كامل
- هاسكل هي لغة برمجة وظيفية ذات كتابة ثابتة، وتضم العديد من الحزم التي تسمح بترميز التأثيرات. [ 8 ] ومع ذلك، تركز هاسكل بشكل عام على المونادات .
runSTعلى سبيل المثال، تحاكي المونادة نظام النوع والتأثير بشكل فعال، [ 9 ] مع "مناطق معزولة من البرمجة الإجرائية". على مستوى النوع، ينبع عزل الحالة أساسًا من التحديد الكمي الأعمق من الرتبة الثانية للحالة فيrunST.
- قدمت لغة OCaml دعمًا لعناصر معالجة التأثيرات التجريبية في الإصدار 5.0. [ 10 ] ، وتمت إضافة بناء الجملة عالي المستوى في OCaml 5.3. لاحظ أنه اعتبارًا من OCaml 5.4، لا يتم تتبع تأثيرات OCaml على مستوى النوع.
دعم جزئي ونماذج أولية
- Scala 3.1 هي لغة برمجة ثابتة النوع، وظيفية وموجهة للكائنات مع دعم تجريبي للتأثيرات يقتصر على الاستثناءات ، في شكل
CanThrowقدرة. [ 11 ] - جافا هي لغة برمجة كائنية التوجه ذات كتابة ثابتة؛ وتُعدّ استثناءاتها المُدققة مثالًا محدودًا نسبيًا لنظام التأثيرات.
throwsيتوفر نوع واحد فقط من التأثيرات، ولا توجد طريقة لاستئناف التنفيذ بقيمة، ولا يمكن استخدامها مع الدوال (فقط مع الطرق) إلا إذا كانت الدالة تُنفّذ استثناءً مُخصصًا@FunctionalInterface. [ 12 ]
انظر أيضاً
- الموناد – طريقة بديلة لتتبع التأثيرات
مراجع
- ↑ تورباك، فرانكلين ألبين؛ جيفورد، ديفيد ك.؛ شيلدون، مارك أ. (2010). مفاهيم التصميم في لغات البرمجة . دار نشر PHI Learning. رقم ISBN 978-81-203-3996-5. OCLC 1261053520 .
- ↑ أبراموف، دان (21 يوليو 2019). "التأثيرات الجبرية لبقية الناس" . overreacted.io . تم الاطلاع عليه في 20 أغسطس 2025 .
- ↑ ليجن، دان (22 يوليو 2025). "لغة برمجة كوكا" . koka-lang.github.io . مؤرشف من الأصل في 26 يوليو 2025. تم الاطلاع عليه في 20 أغسطس 2025 .
- ^ بريتنار، ماتيجا، “إيف” ، جيثب ، استرجاعها 11 ديسمبر 2021
- ↑ "لغة برمجة Eff" . eff-lang.org . تم الاطلاع عليه بتاريخ 20 أغسطس 2025 .
- ↑ "لغة يونيسون" . www.unisonweb.org . مؤرشف من الأصل في 5 ديسمبر 2021. تم الاطلاع عليه في 7 ديسمبر 2021 .
- ↑ فريق بحث Effekt. "لغة Effekt: المفاهيم والخصائص" . لغة Effekt . تم الاطلاع عليه بتاريخ 13 يونيو 2023 .
- ↑ فيرا، جوش (18 أبريل 2020). "معيار أداء الموناد الحر" . جيت هاب .
معيار يقارن أداء تطبيقات الموناد الحر المختلفة.
- ↑ موجي، إي.؛ صبري، عمرو (نوفمبر 2001). "التغليف الأحادي للتأثيرات: منهج منقح (نسخة موسعة)" . مجلة البرمجة الوظيفية . 11 (6): 591-627 . doi : 10.1017/S0956796801004154 . ISSN 0956-7968 .
- ↑ "الفصل 12: امتدادات اللغة" . v2.ocaml.org . مؤرشف من الأصل بتاريخ 13 يونيو 2023. تم الاطلاع عليه بتاريخ 13 يونيو 2023 .
- ↑ "قدرات الرمي" . وثائق سكالا . تم الاطلاع عليه بتاريخ 7 ديسمبر 2021 .
- ↑ بولي، روكي (12 أغسطس 2013). "دالة لامدا في جافا 8 تُطلق استثناءً؟" . ستاك أوفرفلو . تم الاطلاع عليه بتاريخ 25 ديسمبر 2021 .
فصول من كتاب مدرسي
- هانكين، كريس؛ نيلسون، فليمنج. نيلسون، هان ريس (1999). مبادئ تحليل البرامج . برلين: سبرينغر. رقم ISBN 978-3-540-65410-0.
- جيفورد، ديفيد؛ تورباك، فرانكلين أ.؛ شيلدون، مارك أ. (2008). "16". مفاهيم التصميم في لغات البرمجة . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-20175-9.
أوراق استعراضية
- نيلسون، فليمنج؛ نيلسون، هان ريس (1999). "أنظمة النوع والتأثير" . تصميم النظام الصحيح: رؤى وتطورات حديثة . سلسلة محاضرات في علوم الحاسوب . 1710. سبرينغر-فيرلاغ: 114-136 . doi : 10.1007/3-540-48092-7_6 . ISBN 978-3-540-66624-0.
للمزيد من القراءة
- مارينو، دانيال؛ ميلستين، تود (2009). "نظام عام للأنواع والتأثيرات". وقائع ورشة العمل الدولية الرابعة حول الأنواع في تصميم اللغات وتنفيذها (ملف PDF) . ACM . ص 39. CiteSeerX 10.1.1.157.8373 . doi : 10.1145/1481861.1481868 . ISBN 9781605584201. S2CID 14538045 .
- لوكاسن، جون م.؛ جيفورد، ديفيد ك. (1988). "أنظمة التأثير متعددة الأشكال". وقائع الندوة الخامسة عشرة لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة - POPL '88 . ACM . الصفحات 47-57 . CiteSeerX 10.1.1.73.4916 . doi : 10.1145/73560.73564 . ISBN 978-0897912525. S2CID 13015611 .
- تحليل البرامج
- نظرية الأنواع
