[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-smalltalk] DynamicVariable in a Continuation
From: |
Derek Zhou |
Subject: |
Re: [Help-smalltalk] DynamicVariable in a Continuation |
Date: |
Wed, 25 May 2011 15:29:30 -0700 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
On Wed, May 25, 2011 at 09:35:11AM +0200, Paolo Bonzini wrote:
> On 05/24/2011 08:20 AM, Derek Zhou wrote:
> >Hi All,
> >It looks like the sematic of DynamicVariable changed not very long ago; it
> >was based on Notification, but it now just uses a ProcessVariable. Here is a
> >simple testcase:
> >
> >DynamicVariable subclass: Seed [
> > ].
> >Eval [
> > |b g1 g2|
> > b := [:v | v + Seed value].
> > g1 := Generator on: [ :g |
> > |v|
> > v := 0.
> > Seed use: 2 during: [
> > [ g yield: v.
> > v := b value: v ] repeat ]].
> > g2 := Generator on: [ :g |
> > |v|
> > v := 0.
> > Seed use: 3 during: [
> > [ g yield: v.
> > v := b value: v ] repeat ]].
> > Transcript nextPutAll: '%1 %2 %3 %4' % {
> > g1 next.
> > g2 next.
> > g1 next.
> > g2 next}; nl.
> >]
> >
> >It used to yield "0 0 2 3" but yields "0 0 3 3" now. I'd think "0 0 2 3" is
> >the correct answer; the documantion specifically mentioned stackframes so
> >the stackframes hopping from the Continuation should affect the variable,
> >right?
>
> You are correct. The change was made because it was hundreds of
> time faster to use ProcessVariable, but I missed this use case. I
> have to think about it. Do you have any suggestion on how to name
> the classes to keep the current one available, and still provide
> "real" DynamicVariables?
I am not very good at naming, but can we keep DynamicVariable a subclass of
Notification, and provide 2 methods:
use_during_: for the fast way by making use a ProcessVariable
use_inside_: for the slow way of stackframe backtracing.
Derek