help-smalltalk
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]