Hey, I want some credit here - for coming to Squeak's possible defense :)

All I am saying is that there is a possible space/speed tradeoff with a twist.  
There was a fair amount written about these decisions, which is why I know 
anything at all about them.  Adding an instance variable for a rarely used 
sub-morph of a widely-instantiated morph might be an opportunity to fail to 
learn from history.  Most likely, the patterns Stef has noticed are simply 
mis-uses of sparse storage.  The best way to proceed would be to find an 
example of it that has many instances in the image, profile, fix, and profile 
again to see if the fix hurts performance (or perhaps helps it).  The usual 
caveats about benchmarking being really hard to do well apply, of course.

Bill


________________________________________
From: [email protected] 
[[email protected]] On Behalf Of Igor Stasenko 
[[email protected]]
Sent: Saturday, October 23, 2010 11:00 AM
To: [email protected]
Subject: Re: [Pharo-project] some patterns I would like to **kill**

On 23 October 2010 17:13, Schwab,Wilhelm K <[email protected]> wrote:
> Stef,
>
> Of course.  But in terms of avoiding unintended consequences, just consider 
> the points I raised.  Some of the avoidance of instance variables 
> (extensions, etc.) might have been a good idea with the gc at the time but is 
> now an ugly hack, or that sparse storage tricks were over-used.
>
Well, one way or another you have to tame the complexity somehow.
Be it extra instvar, or putting it into extensions doesn't changes the
model's concept: you need a reference to some object
which is responsible for some specific stuff.


> Bill
>
>
>
>
> ________________________________________
> From: [email protected] 
> [[email protected]] On Behalf Of Stéphane Ducasse 
> [[email protected]]
> Sent: Saturday, October 23, 2010 7:33 AM
> To: [email protected]
> Subject: Re: [Pharo-project] some patterns I would like to **kill**
>
> I think that if you have a container that contains morphs probably findA and 
> other queries are useful.
> Now for a button that is also at the same place a field is the best.
>
> Stef
>
>
> On Oct 22, 2010, at 11:14 PM, Schwab,Wilhelm K wrote:
>
>> Stef,
>>
>> #respondsTo: - no argument.  More defensive programming (aka masked bugs).  
>> Tests like this have their place, but are over-used in Squeak.
>>
>> Using #submorphs *might* be easier to defend.  Morphs were designed to be 
>> usable in large numbers, and one might argue (playing Devil's Advocate here) 
>> that lookups are cheaper than the additional gc load.  An instance variable 
>> could also cache stale information.  Of course, for something that is 
>> accessed frequently, an instance variable avoids the lookup and I agree that 
>> it is cleaner and easier to read.
>>
>> Bill
>>
>>
>>
>> ________________________________________
>> From: [email protected] 
>> [[email protected]] On Behalf Of stephane ducasse 
>> [[email protected]]
>> Sent: Thursday, October 21, 2010 4:47 PM
>> To: Pharo Development
>> Subject: [Pharo-project] some patterns I would like to **kill**
>>
>> Hi
>>
>> I was reading Pluggable and friends
>> I identified some patterns.
>>
>>
>> The respondsTo plague
>> Examples:
>>
>> color := self fillStyle asColor.
>>        (self labelMorph respondsTo: #enabled:)
>>                ifTrue: [self labelMorph enabled: self enabled].
>>        (self labelMorph respondsTo: #interactionState:)
>>                ifTrue: [self labelMorph interactionState: self 
>> interactionState]
>>
>> (self labelMorph respondsTo: #enabled:) ifTrue: [
>>        self labelMorph enabled: aBoolean].
>>
>> (self enabled not and: [self label isMorph and: [(self label respondsTo: 
>> #enabled:) not]])
>>
>>
>> by construction a labelObject should be a morph and it should answer 
>> enabled: and the case where this is not the case should be fixed.
>>
>>
>> Using submorphs to avoid one single inst var makes code quite ugly to read:
>>
>>
>> labelMorph
>>        "Answer the actual label morph."
>>
>>        self hasSubmorphs ifFalse: [^nil].
>>        self firstSubmorph hasSubmorphs ifFalse: [^nil].
>>        ^self firstSubmorph firstSubmorph
>>
>>
>>
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>



--
Best regards,
Igor Stasenko AKA sig.

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to