[squeak-dev] Re: isKindOf: in Morphic code...

Eliot Miranda eliot.miranda at gmail.com
Mon Jul 4 23:30:36 UTC 2016


On Mon, Jul 4, 2016 at 1:58 PM, marcel.taeumel <Marcel.Taeumel at hpi.de>
wrote:

> Eliot Miranda-2 wrote
> > On Mon, Jul 4, 2016 at 1:59 PM, Tobias Pape &lt;
>
> > Das.Linux@
>
> > &gt; wrote:
> >
> >>
> >> On 04.07.2016, at 22:44, Eliot Miranda &lt;
>
> > eliot.miranda@
>
> > &gt; wrote:
> >>
> >> > Hi All, Hi Marcel,
> >> >
> >> >     when I see code like this, and there's a lot of it in Morphic,
> >> >
> >> > !Flaps class methodsFor: 'testing' stamp: 'mt 5/17/2016 14:17'!
> >> > anyFlapsVisibleIn: aWorld
> >> >
> >> >         aWorld submorphsDo: [:m |
> >> >                 (m isKindOf: FlapTab) ifTrue: [^ true]].
> >> >
> >> >         ^ false! !
> >> >
> >> > I think this is performance thrown on the floor (isKindOf: is awfully
> >> slow, especially in huge hierarchies like Morphic, and bad design,
> >> restricting one to a concrete class).  And I think that Morph provides a
> >> perfect place to put an extension that doesn't pollute Object.  So I
> >> would
> >> like to see
> >> >
> >> > anyFlapsVisibleIn: aWorld
> >> >
> >> >         aWorld submorphsDo:
> >> >                [:m| m isFlapTab ifTrue: [^true]].
> >> >         ^ false! !
> >> >
> >> > with the emphasis on isFlapTab ;-)
> >>
> >> Well, class testing seems to be a Morphic pattern, given #findA: (alias
> >> #submorphOfClass:)
> >>
> >
> > I don't care.  It's *WRONG*.  isKindOf: is a _bug_.
> >
> >
> >>
> >> Best regards
> >>         -Tobias
> >> PS: Not advocating anything just reporting what I found
> >>
> >
> >
> >
> > --
> > _,,,^..^,,,_
> > best, Eliot
>
> Hey Eliot,
>
> no, it's not a bug. ;-)


Yes, isKindOf: *is* a bug, at least in the usage of determining supported
messages.  Smalltalk has ad-hoc polymorphism that allows any class to
implement and set of messages, without having to inherit from a superclasss
that defines that set of messages.  isKindOf: breaks this property; it
restricts the designer to using a concrete class, in violation of the
language's flexibility.  isKindOf: is therefore most definitely a bug.

One might think there are valid uses when editing a class hierarchy
programmatically.  But for this there are messages understood by classes,
not instances, such as includesBehavior:, inheritsFrom: etc.  These are
legitimate.  But isKindOf: is not.  It is a horrible hack.

Although, there is room for improvement. #isFlapTab
> sounds good. Note that this is not even a critical piece of code because is
> only called if you open a system window, for example.
>
> Try [Flaps anyFlapsVisibleIn: ActiveWorld] bench. It's fast enough. A
> microsecond here, having around 30 windows open. So, you will not notice a
> delay. Still, you're right. We should reduce the usage of #isKindOf:.
>
> Not polluting Object means still polluting Morph.
>
> (Yeah, maybe we should use slower computers to program.)
>
> Checks we should consider to add or use more often if it is already there:
> #isCornerGripMorph
> #isProportionalSplitterMorph
> #isCompiledMethod
> #isColor
> #isInfiniteForm
>
> ... still, a quick look through the usage of #isKindOf: in Morphic code
> revealed no serious performance issues. We should refactor MenuMorph to not
> need #isKindOf: that often. This might also be true for other places.
>
> The pattern "isClass" is not always a good solution for many cases in the
> system.
>
> Best,
> Marcel
>
>
>
> --
> View this message in context:
> http://forum.world.st/isKindOf-in-Morphic-code-tp4904890p4904895.html
> Sent from the Squeak - Dev mailing list archive at Nabble.com.
>
>


-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160704/1a5be1c0/attachment.htm


More information about the Squeak-dev mailing list