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
_______________________________________________
help-smalltalk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-smalltalk