[squeak-dev] Continuations
Andrew P. Black
black at cs.pdx.edu
Wed Mar 11 05:21:35 UTC 2009
I have what may be a silly question about continuations. First, some
background.
I'm about to give a lecture on Continuations. I'm trying to model
what the "functional people" do, just to show off the flexibility of
Smalltalk. I'm working in the Seaside one-click image, because,
having introduced continuations, I want to talk about the way that
they are used in Seaside to implement natural control flow. So, I'm
not trying to solve any particular programming problem
Here is a little example that I wrote to illustrate a continuations.
SeasideDemo >> countUpTo: initialInterruptValue
"demonstrate resumable continuations"
| interruptValue |
interruptValue := initialInterruptValue.
1 to: 1000
do: [:i |
Transcript show: 'i = '.
Transcript show: i.
Transcript cr.
i = interruptValue
ifTrue: [interruptValue := Continuation
currentDo: [:cc | ^ cc]]]
If I execute
d := SeasideDemo new.
c := d countUpTo: 7
in a workspace, I get
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
in the Transcript, as you would expect. Then the method returns, with
a continuation, which I name c
I can then resume that continuation:
c value: 12
and the count in the transcript goes
i = 8
i = 9
i = 10
i = 11
i = 12
as I would expect. However, if I "doit" c value:12 a second time, the
count resumes from 13, not from 8. This surprised me.
Strangely, if instead of assigning the result of d countUpTo:7 to c, I
just inspect it, and doIt
self value: 12
in the inspector, then the count continues from 8 to 12. I can doIt
multiple times, and each time the count goes from 8 to 12.
However, what is strange is that I get a new inspector on a new
continuation each time I doIt. I can only infer that the initial
"inspect It" has somehow been captured as part of the continuation.
I'm also confused to find that the result of
c2 := c value: 15
is not a new continuation, that will count up from 15 but ... nil.
Are my expectations wrong? Are there bugs in the Seaside
implementation of Continuations? Or what?
Andrew
____________________________
Prof. Andrew P. Black
Department of Computer Science
Portland State University
Oregon, USA
http://www.cs.pdx.edu/~black
Telephone: +1 503 725 2411
More information about the Squeak-dev
mailing list
|