Pourquoi sont délimitées continuation primitives nommé “shift” et “reset”?
-
13-11-2019 - |
Question
Je crois que je comprends (en général) ce qui shift
et reset
veux dire.Cependant, je ne comprends pas pourquoi ils sont nommés ainsi ?Ce n' shift
et reset
Délimité Continuation primitives ont à voir avec la "maj" et "reset" des mots en anglais?
La solution
Ils sont appelés ainsi en raison de la façon dont ils sont mis en œuvre (en général).
Cité de Mise en Œuvre directe de Changement et de Réinitialisation dans le MinCaml Compilateur
Par l'interprétation d'un programme à l'aide de la la poursuite de la sémantique, on peut considérer l'état du programme la poursuite de la pile.Ensuite,
reset
peut être considéré comme marquant la poursuite pile, etshift
la capture de l' la poursuite de la pile jusqu'à la plus proche marque créée parreset
.Ici, c'est le vue d'ensemble de la mise en œuvre:
- Lors de l'appel
reset
, définir un marque reset pour la pile- Lors de l'appel
shift
(fun k -> M)
, déplacer une partie de la pile d'images le plus proche de réinitialisation de la marque sur le segment- Lors de l'appel d'une poursuite
k
, définir un marque reset pour la pile, et la copie de la cadres correspondants dans le tas pour le haut de la pile.Une marque reset est inséré lorsque
k
est appelé, parce que capturé continuations sont exécutées dans un vide continuation.
Autres conseils
Parce que Danvy & Filinski appelé ces deux opérateurs le premier document où ils ont exposé que le modèle de la continuation, passant du style (voir aussi ici), et c'est ce que Scala met en œuvre.
La mise en œuvre de la Scala est décrit dans cet autre papier.Le renvoi à Danvy & Filinski est clair:
Dans ce papier, nous étudions l'ajout d'opérateurs de contrôle des maj et de réinitialiser les paramètres de ce langage, qui, ensemble, de mettre en œuvre statique délimité par des continuations (Danvy et Filinski 1990, 1992)