استمرار يمر على غرار مباراة مكدس الاستدعاءات قلص بقوة؟

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

سؤال

وأنا النظر في شيء من هذا القبيل CPS للاستخدام في مترجم للغة تستند الفاعل.

يتم تمرير

والحجج وظيفة في مجموعة من المتغيرات، واستمرار عاد في نفس مجموعة، وبالتالي فإن وظيفة بسيطة

def add (x,y) => x + y

وذلك مكالمة من القراءة / وحدة التقييم / حلقة ستكون

print( add(7, 5) )

وسيكون على الدخول يكون

[&add, x, y, &print, _, &repl, ...]

وحيث _ هو فتحة فارغة حيث هو مكتوب قيمة الدالة العودة.

وفي الخطوة التالية من التنفيذ، والحجج تصبح

[&print, 12, &repl, ...]

ثم

[repl, ...]

ووهلم جرا. تنفيذ في C هو في الأساس

for (;;)
   args = (args[0].function_pointer)(args);

ومع الشيكات ليلوذ بالفرار نهاية مجموعة وسائط وتخصيص مساحة أكبر.

والحجج هي متجاورة، و "استمرار" ككائن هو مجرد مجموعة فرعية من الحجج.

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

وعلى الرغم من أن استلهم هذا المخطط من خلال التفكير CPS، فإنه ليس CPS تماما، وتشبه الى حد بعيد ما قد تبدو كومة C قلص بقوة مثل - فقط المتغيرات الحية، ونقاط مقابل كل وظيفة.

هل هناك اسم لهذا النمط، وخاصة مجموعة حجة؟ انه نوع من الترامبولين + كومة، على الرغم من ما أنا معتاد على الدعوة 'كومة' هو أكثر التاريخ بدلا من مستقبل التنفيذ.

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

المحلول

وهذا هو الرابع تقريبا. وجود كومة من الدرجة الأولى هو الى حد كبير مثل وجود استمرارا.

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