Search code examples
scalacontinuationsdelimited-continuations

Why are delimited continuation primitives named "shift" and "reset"?


I think I understand (in general) what shift and reset mean. However I do not understand why they are named so ? What do shift and reset as Delimited Continuation primitives have to do with "shift" and "reset" words in English?


Solution

  • They're called so because of the way they are implemented (in general).

    Quoted from Direct Implementation of Shift and Reset in the MinCaml Compiler

    By interpreting a program using the continuation semantics, we can regard the state of the program as a continuation stack. Then, reset can be thought of as marking the continuation stack, and shift capturing the continuation stack up to the nearest mark created by reset. Here is the overview of the implementation:

    • When calling reset, set a reset mark to the stack
    • When calling shift (fun k -> M), move a part of the stack frames up to the nearest reset mark to the heap
    • When calling a continuation k, set a reset mark to the stack and copy the corresponding frames from the heap to the stack top.

    A reset mark is inserted when k is called, because captured continuations are executed in an empty continuation.