سؤال

ال مقالة ويكيبيديا عن نظام التأثير حاليًا مجرد كعب قصير وأنا أتساءل منذ فترة عن ما هو نظام التأثير.

  • هل هناك لغات لها نظام تأثير بالإضافة إلى نظام الكتابة؟
  • ما هو التدوين المحتمل (الافتراضي) في أ التيار اللغة التي تعرفها وتبدو وكأنها تأثيرات؟
هل كانت مفيدة؟

المحلول

لا يصف "نظام النوع والتأثير" أنواع القيم في البرنامج فحسب، بل يصف التغييرات في تلك القيم.التحقق من "حالة النوع" هو فكرة ذات صلة.

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

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

File open(String name) [+File]; // open creates a new file handle
void close(File f)     [-f]   ; // close destroys f 

إذا كنت تريد معرفة المزيد، فقد تكون الأوراق التالية مثيرة للاهتمام (تحذير عادل:الأوراق نظرية تماما).

نصائح أخرى

(هذه ليست إجابة موثوقة؛أحاول فقط أن أعبث بذاكرتي.)

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

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

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

يمكنك إلقاء نظرة على http://www.haskell.org/haskellwiki/DDC

إنها نسخة من تطبيق هاسكل لنظام التأثير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top