Eliminating superclass lookup in the VM (and dynamic composition of behavior)
Andreas Raab
andreas.raab at gmx.de
Wed Dec 11 15:55:25 UTC 2002
Stephen,
Now there's an interesting idea! I think this should work pretty nicely
if every class can handle #doesNotUnderstand: appropriately (I believe
that's the only critical message here). You could try an experiment
along the lines of disabling superclass lookup for all but DNU and see
what happens ;-)
Efficiency-wise I would guess that you will be spending quite a number
of bytes on the method dictionaries of the classes since you'd have
everything from Object/Morph in each of the leaf classes. But other than
that I don't see anything problematic.
Cheers,
- Andreas
> -----Original Message-----
> From: squeak-dev-admin at lists.squeakfoundation.org
> [mailto:squeak-dev-admin at lists.squeakfoundation.org] On
> Behalf Of Stephen Pair
> Sent: Wednesday, December 11, 2002 4:41 PM
> To: squeak-dev at lists.squeakfoundation.org
> Subject: Eliminating superclass lookup in the VM (and dynamic
> composition of behavior)
>
>
> I've been messing with the idea of traits recently (I need them for
> adding transactional behavior to arbitrary classes in the system). To
> satisfy my immediates needs, I've built a "mini-traits" capability (to
> hold me over until Andrew and Nathanael gets their stuff
> out). Anyway,
> I've found myself managing the visibility of trait methods in my
> Smalltalk code.
>
> While doing this, a thought has occurred to me: does it even
> make sense
> to have the VM traverse a superclass chain when looking for a method?
> Why not just have the VM just look at the single method dictionary
> directly attached to a behavior and manage the visibility, etc of
> methods in Smalltalk? Primitive method dictionaries (those
> designed for
> consumption by the VM) would be nothing more than flattened
> views of the
> methods that are applicable to a given class. Methods that access
> instance variables should be the only ones that might need a
> physically
> different compiled form. This would also have a side benefit of
> allowing subclasses to have a different instance variable
> orderings than
> their superclasses...which in turn might facilitate more creative ways
> of composing behavior.
>
> I mean heck; we even have places in the Smalltalk code where
> we have to
> flush the VM method cache...these places would be exactly
> where we would
> want to reconstruct the primitive method dictionaries.
>
> I've found that I'm managing the visibility of trait methods by
> controlling what happens when adding an removing methods, etc. It
> occurred to me that if I can do this with relative ease with
> traits, why
> not do it with normal inheritance?
>
> Has this been done before?
>
> - Stephen
>
>
More information about the Squeak-dev
mailing list
|