Почему примитивы продолжения с разделителями называются «shift» и «reset»? - PullRequest
32 голосов
/ 13 мая 2011

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

Ответы [ 2 ]

23 голосов
/ 13 мая 2011

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

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

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

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

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

5 голосов
/ 09 июля 2011

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

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

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

...