ما هو الفرق بين استمرار (كما هو الحال في من Smalltalk) ومقاطعة (كما هو الحال في مجمع)؟

StackOverflow https://stackoverflow.com/questions/815431

سؤال

وأنا تكافح من أجل فهم مفهوم الإستمرار (كما هو مستخدم في البحر مع من Smalltalk). مقتطف من ويكيبيديا يقول:

<اقتباس فقرة>   

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

وليس هذا مجرد وسيلة أخرى للتعبير عن ما مبرمج المجمع ستفعل عندما البرمجة مقاطعة؟ أو أن يكون فاتني تماما هذه النقطة!

هل كانت مفيدة؟

المحلول

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

ومقاطعة أشبه coroutine، حيث هناك نوعان من المواضيع تنفيذ مختلفة (رمز التطبيق، معالج المقاطعة) التي تعشيق بعضها البعض.

نصائح أخرى

والإستمرار تعادل تقريبا setjump / longjump في C. هل يمكن أن نتوقع السياق الخاص بك أن تكون سليمة عند استدعاء استمرار (كومة، والأعلام، والسجلات، مؤشر التعليمة وهلم جرا) بعد تركها. لذلك هو مماثل لدعوة مقاطعة برامج إلا لم يكن لديك للعودة (أو بشكل أكثر دقة، استدعاء تابع) بعد انتهاء معالج واستمرار ليس الضمني.

في بعض الطرق كانت متشابهة. ومع ذلك، دعا استمرارا من قبل البرنامج في حد ذاته، والمقاطعات تتولد عادة من قبل وحدة المعالجة المركزية أو الأجهزة على الكمبيوتر. أيضا، مقاطعة أشبه إشارة C، ويسمى فقط ومن ثم السيطرة العودة إلى البرنامج. المقاطعة هي المسؤولة عن توفير الدولة واستعادتها بعد ذلك.

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

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