[squeak-dev] The Trunk: System-ul.253.mcz

Levente Uzonyi leves at elte.hu
Wed Feb 17 21:22:11 UTC 2010


On Tue, 16 Feb 2010, Juan Vuletich wrote:

> Levente Uzonyi wrote:
>> Why is MessageTally using the class variable Timer instead of an instance 
>> variable?
>
> I really don't know. Perhaps to make it clear that nested tallies are not 
> supported? BTW, I've just looked in Squeak 1.1, and it uses the Timer 
> variable the same way. Hey, I even opened Apple Smalltalk-80, and it is the 
> same too :).
>

Thanks for the research, it's good to know the original design decision. 
Too bad the class comment doesn't tell anything about it. We should fix 
that.

>> Levente
>> 
>> P.S.:
>> I added a new instance variable timer to MessageTally, replaced all 
>> occurence of Timer to timer, removed the #ifNotNil: checks and successfully 
>> profiled the tests. Is anything wrong with this approach?
>
> I just tried the same. It seems to work. But  it seems whoever wrote 
> MessageTally knew what he was doing. Using an instance variable would have 
> been the obvious choice. But they decided to use a class variable. Mhhh. I 
> looked at the old books and found nothing. Looking at Squeak 1.1. and 
> Smalltalk-80, I believe it was because at that time there was no #ensure: and 
> they wanted to be sure to kill the process, as it won't stop if you got a 
> walkback or pressed alt-.. So I guess your proposal is ok. But on the other 
> hand, I see no value in supporting nested tallies, and your proposal would 
> require some testing.
>
> So, if you're willing to see how it works, and perhaps revert it if some 
> problem arises, I'd say go ahead with it.
>

I agree there's no value in nested tallies, MessageTally doesn't give 
meaningful results even if timer is an instance variable in this case.
And I think you're right, MessageTally should raise an error if a timer 
process is already running, but the error should be raised when the 
second process is about to be created, not when the first is about to be 
terminated.

I realized that the timer process is terminated by Debugger >> 
#process:controller:context: and not nested tallies when running all the 
tests profiled, since no MessageTally is created directly by tests.
So replacing Timer with an instance variable is not a good idea, since the 
debugger has to stop the timer process somehow, but maybe 
suspending/resuming is enough.


Levente

> Cheers,
> Juan Vuletich
>




More information about the Squeak-dev mailing list