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

Думаю, я понимаю (в целом), что означают shift и reset. Однако я не понимаю, почему они так названы? Какое отношение имеют shift и reset как примитивы продолжения с разделителями к словам "сдвиг" и "сброс" в английском языке?


person Michael    schedule 13.05.2011    source источник


Ответы (2)


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

Цитируется из Прямая реализация сдвига и сброса в MinCaml Компилятор

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

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

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

person Vasil Remeniuk    schedule 13.05.2011
comment
Стоит отметить, что ограниченные продолжения Scala не реализованы таким прямым способом - они не могут быть реализованы. JVM не предоставляет примитивы управления стеком. - person James Iry; 13.05.2011
comment
Напротив, Scheme-48 допускает прямую реализацию (Gasbichler / Sperber), как и любой язык, который предоставляет стек вызовов, например Squeak Smalltalk. - person Frank Shearar; 23.05.2011

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

Реализация в Scala описана в этом другом документе. Ссылка на Danvy & Filinski здесь ясна:

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

person Francois G    schedule 09.07.2011