Подтвердить что ты не робот

Почему разделительные примитивы продолжения называются "shift" и "reset"?

Я думаю, что понимаю (в общем), что означают shift и reset. Однако я не понимаю, почему их так называют? Что делать shift и reset как примитивы с разделителями продолжения, связанные с словами "shift" и "reset" на английском языке?

4b9b3361

Ответ 1

Они называются так из-за того, как они реализованы (в общем).

Цитата из Прямая реализация Shift и Reset в компиляторе MinCaml

Интерпретируя программу, используя семантику продолжения, мы можем рассматривать состояние программы как продолжение стек. Тогда reset может быть как обозначение продолжения стек и shift, захватив стек продолжения до ближайшего метка, созданная reset. Здесь обзор реализации:

  • При вызове reset установите reset знак в стек
  • При вызове shift (fun k -> M), переместите часть фреймов стека до ближайший знак Reset в кучу
  • При вызове продолжения k установите метку reset в стек и скопируйте соответствующие кадры из кучи в верхняя часть стека.

Значок Reset вставлен, когда kтак как захваченные продолжения выполняются в пустом продолжении.

Ответ 2

Потому что так, как Данви и Филински назвали эти два оператора в первой статье, где они выставили эту модель стиля продолжения прохождения (см. также здесь), и это то, что реализует Scala.

Реализация в Scala описана в этой другой статье. Ссылка на Данви и Филински ясно:

В этой статье мы изучаем добавление сдвига операторов управления и reset к этой языковой структуре, которые вместе реализуют статические разделительные продолжения (Danvy and Filinski 1990, 1992)