[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Demystifying Continuations
>>>>> "DS" == David Simmons <David.Simmons@smallscript.net> writes:
DS> Continuations are usually talked about in Procedural language settings,
DS> not Object Oriented settings. Specifically because a continuation is
DS> easily implemented as a goto.
DS> One of the reasons the picture becomes complex in the OO world is
DS> because of all the throw/unwind logic. For historical purposes, I would
DS> say that a 'normal' continuation would NOT unwind, but would indeed
DS> replace.
Have you studied the interaction between
(dynamic-wind before thunk after)
and call-with-current-continuation in Scheme? Scheme is not
object-oriented, but of course has continuations and, more recently,
the notion of unwind protected blocks. The R5RS definition of Scheme
can be found at these fine websites:
http://www.schemers.org/Documents/Standards/R5RS/
http://www.cs.indiana.edu/scheme-repository/doc.standards.html
http://www.swiss.ai.mit.edu/~jaffer/r5rs_toc.html
Some of the relevant text is:
BEFORE is called whenever execution enters the dynamic extent of
the call to THUNK and AFTER is called whenever it exits that
dynamic extent. The dynamic extent of a procedure call is the
period between when the call is initiated and when it returns.
In Scheme, because of `call-with-current-continuation', the
dynamic extent of a call may not be a single, connected time
period. It is defined as follows:
* The dynamic extent is entered when execution of the body of
the called procedure begins.
* The dynamic extent is also entered when execution is not
within the dynamic extent and a continuation is invoked that
was captured (using `call-with-current-continuation') during
the dynamic extent.
* It is exited when the called procedure returns.
* It is also exited when execution is within the dynamic extent
and a continuation is invoked that was captured while not
within the dynamic extent.
--
Greg gregs@ai.mit.edu (617)253-5807
Sullivan http://www.ai.mit.edu/~gregs/