[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Continuations with pictures

Aaah, too many analogies! :)  I've delved into the subject months ago, and
now understand how simple they are:

Instead of returning from a function and starting over, continuations simply
continue from where they left off.

add1() {
  loop {
    a += 1
    yield a  // return here, but also come back here

print add1() -> 1
print add1() -> 2

Continuations require a persistent stack since the variables don't go out of
scope like they do in a return.  Continuations are the basis for coroutines
(two functions calling each other) and user level threads.

~ Mike ~

"Kimberley Burchett" <kimbly@cybercom.net> wrote in message
> On Fri, 8 Aug 2003, Kevin Kelleher wrote:
> > So here is a picture -- maybe you can tell me what's wrong
> > with it:
> It seems like you're thinking of all the junk in the room as being part of
> the continuation.  But it would probably be more appropriate to think of
> the junk as global variables, that would still be wherever they were even
> after you invoked the continuation...
> I think it would be easier to offer a slightly different picture rather
> than try to fix up bit by bit the one that you illustrated.
> A continuation is more like a little envelope containing instructions
> about what to do next.
> Imagine that right after your daughter cleaned up her room, she wanted to
> go get some ice cream as a reward.  She knows that she's prone to forget
> these things so she decides to write a note to remind herself (yes, it's
> very odd for a child to not only forget the reward, but also have the
> foresight to write it down, but bear with me).  On the outside of the
> envelope, she writes "Do this next".
> Now her friends come over, and her room gets messed up again.  Time
> passes...
> The next morning, she wakes up and in the midst of the mess, she notices
> an envelope labeled "Do this next".  She opens it, and it tells her to go
> get ice cream.  She thinks this sounds like a good idea, so she does.
> Notice that she didn't put the room back in order first.  The room is all
> the global variables -- nothing happens to them simply by invoking the
> continuation.  Basically, you can think of the continuation as a "train of
> thought".  When she wrote down the note (created the continuation), she
> had intended to get ice cream.  She then promptly forgot this plan, so
> that train of thought disappeared.  But then she read the note (invoked
> the continuation) and the train of thought was resumed.  Notice also that
> the original motivation for getting ice cream was as a reward for having
> cleaned up the room -- but the fact that the room is now messed up again
> doesn't prevent her from getting ice cream anyway.
> The label on the envelope is arbitrary -- it's simply the name of the
> variable that holds the continuation.  You could label it anything you
> wanted, but it would still have the effect of changing your train of
> thought.
> There's no such thing as a future continuation, since nobody has yet had
> that train of thought, so they can't write it down.  There is a difference
> between upward and downward continuations, but the difference is mostly a
> matter of implementation and how you use them.
> I didn't address all the issues involved in continuations -- e.g. where
> they "return to", but I think this conveys the gist of the concept at the
> same level that you were originally asking about.
> --
> Kimberley Burchett
> http://www.kimbly.com/