scala continuations delimited-continuations

scala - ¿Por qué las primitivas de continuación delimitadas se llaman "shift" y "reset"?



continuations delimited-continuations (2)

Se llaman así por la forma en que se implementan (en general).

Citado de Implementación directa de Shift y Reset en el compilador MinCaml

Al interpretar un programa utilizando la semántica de continuación, podemos considerar el estado del programa como una pila de continuación. Entonces, se puede pensar que el reset marca la pila de continuación y shift capturando la pila de continuación hasta la marca más cercana creada por reset . Aquí está la descripción general de la implementación:

  • Cuando llame a reset , configure una marca de reinicio en la pila
  • Cuando llame a shift (fun k -> M) , mueva una parte de los cuadros de pila hasta la marca de restablecimiento más cercana al montón
  • Al invocar una k continuación, establezca una marca de restablecimiento en la pila y copie los marcos correspondientes del montón a la parte superior de la pila.

Se inserta una marca de restablecimiento cuando se invoca k , porque las continuidades capturadas se ejecutan en una continuación vacía.

Creo que entiendo (en general) qué significa shift y reset . Sin embargo, no entiendo por qué se nombran así? ¿Qué shift y reset como las primitivas de Continuación delimitada tienen que ver con las palabras "cambiar" y "reiniciar" en inglés?


Porque esa es la forma en que Danvy y Filinski llamaron a esos dos operadores en el primer documento donde expusieron ese modelo de estilo de continuación de paso (ver también aquí ), y es lo que Scala implementa.

La implementación en Scala se describe en este otro documento . La referencia a Danvy & Filinski es clara:

En este documento, estudiamos la adición de operadores de control que cambian y restablecen a este marco de lenguaje, que juntos implementan continuaciones delimitadas estáticas (Danvy y Filinski 1990, 1992)