Je crois que je comprends (en général) ce shift
et reset
moyenne de. Cependant, je ne comprends pas pourquoi ils sont nommés ainsi ? Que dois - shift
et reset
Délimité Continuation primitives ont à voir avec la "maj" et "reset" des mots en anglais?
Réponses
Trop de publicités?Ils sont appelés ainsi en raison de la façon dont ils sont mis en œuvre (en général).
Cité de la 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
de 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 d'
reset
, définir une marque reset de la pile- Lors de l'appel d'
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 une marque reset de la pile et de la copie de la cadres correspondants dans le tas pour le haut de la pile.Une marque reset est inséré lors de l'
k
est appelé, parce que capturé continuations sont exécutées dans un vide continuation.
Parce que Danvy & Filinski appelé ces deux opérateurs dans le premier document où ils ont exposé que le modèle de la continuation passing style (voir aussi ici), et c'est ce que Scala met en œuvre.
La mise en œuvre de la Scala est décrit dans ce 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)