Why are delimited continuation primitives named “shift” and “reset”?

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.

Leave a Comment

tech