Thu Aug 27 14:32:29 CEST 2009
Concatenative languages and Full continuations
From a discussion with Dominikus I come to conclude that it's
important to distinguish different kinds of continuations:
* Full state continuations, that capture the entire machine state:
both parameter and context stack.
* Context-only full/partial continuations, that capture marked
segments of the control stack and view the whole data stack as the
value to be passed.
Note that marking the data stack is ill-defined, as it may be popped
``beyond the mark'' before it is captured.
Can both be unified?
Rephrasing one of the solutions Dominikus proposed, one could wrap the
stack as a quotation, and concatenate it onto the remainder of the
current program being evaluated, yielding a new program that
encapsulates the full continuation.
Let's implement this in PF and see where it takes us.
OK. After doing this it seems that
* You still want partial continuations in this context: in most cases
you're not interested in the toplevel drivers, just in the control
that's part of the program.
* The operation factors out into two steps: ordinary continuation
operators that ignore the parameter stack, and a separate operation
that appends the stack as a quotation to the resulting
Thinking a bit further and keeping an eye on how it's implemented in
Scheme, it seems that this generalizes to any kind of threaded state
mechanism (i.e. FP-style matrices, Monads, Arrows, ...?)