[squeak-dev] Re: Scheme continuations vs Squeak continuations

Paolo Bonzini bonzini at gnu.org
Sun Feb 1 18:04:02 UTC 2009


Stéphane Rollandin wrote:
> Julian Fitzell a écrit :
>> I'm assuming this is caused by Squeak's lack of full block closures.
>>
>> Does it work if you make "y" an instance variable instead of a local?
>>
>> Julian
> 
> 
> actually, trying the following does work in a workspace or a method:
> 
> | y |
> y _ Continuation currentDo: [:c | c].
> Transcript show: 1.
> Continuation currentDo: [:c | y value: c].
> Transcript show: 2.
> Continuation currentDo: [:c | y value: c].
> Transcript show: 3.
> 
> 
> so the problem occurs when y is an instance variable, while it works
> fine with a local variable (although if you try the code above in a
> workspace without declaring the | y | in the first line, it fails)

Indeed in GNU Smalltalk I get Squeak's behavior if y is a global, while
I get the correct behavior if y is a local.  You get the latter with

 Eval [
  |y|
  y _ Continuation currentDo: [:c | c].
  1 printNl.
  Continuation currentDo: [:c | y value: c].
  2 printNl.
  Continuation currentDo: [:c | y value: c].
  3 printNl.
 ]

and the former by removing "|y|" (which makes y work across multiple
Evals) in GNU Smalltalk's REPL.



More information about the Squeak-dev mailing list