Getting rid of metaclasses (Was: Behaviors vs Modules)

Alan Kay Alan.Kay at squeakland.org
Mon Feb 25 17:24:44 UTC 2002


Henrik --

It would be great if you could make some of the postPIE work 
available (like the paper you mention below).

P.S. Actually there is a way to make this work for every object ...

Cheers,

Alan

------

At 4:32 PM +0000 2/25/02, Henrik Gedenryd wrote:
>  > Goldstein and Bobrow eventually found a very interesting way to
>>  implement these enriched objects: they used Smalltalk instances for
>>  each role/perspective. So a PIE object could be made from many
>>  Smalltalk objects.
>>  This allowed each role to have its own name space of instance
>>  variables. They decided that it was better to make dynamic relations
>>  to unify variables that were logically the same across perspectives
>
>I've tried both approaches to some extent (the same object and several
>objects). Several objects is much easier to implement and you can get some
>mileage from it, but I don't think it would hold up as a general language
>construct. If you really apply the perspectives idea consistently, every
>object in the system would have many perspectives, for example the whole
>meta-system would be replaced by several perspectives.
>
>When I did this I hadn't realized that you can use a kind of selector
>namespaces to do a simple version of multiple perspectives for the same
>object. Perhaps I had gotten longer along the way then.
>
>>  Note that this interesting organization is rather independant of the
>>  particular abstractions chosen for making types of instances. That
>>  is, it can be used with a class-based system, or a prototype-based
>>  system, or something in between (which is what I think we should
>>  invent).
>
>My tuppence would be that perspectives fruitfully may supersede both of
>these. I recently wrote a reflective algorithm that examines the structures
>of objects to find possible combinations, and realized that since this was
>perspectives-based, the reflective code wasn't "meta-level" programming as
>it would be with classes, but instead it was just the plain ol' object
>looking at a structural description itself, i.e. from a "structural" or
>"descriptive" perspective.
>
>In a more general example, to find out the names of all of an object's
>instvars you wouldn't go to its class, i.e. the meta-level, but ask the
>descriptive perspective of the object, which knows its structure.
>
>Another perspective would be the "prototype perspective", where you could
>e.g. ask for the "prototypical value" of some instvar, as in a default
>value, (which is what a prototype provides).
>
>I also began sketching what the Smalltalk meta-object implementation
>(Behavior, Class, Metaclass et al.) would look like if done in this way, and
>although I didn't complete it, it seemed to become _much_ more
>understandable. Everything that the headspinning metasystem does now would
>be done by the object itself, from a few different perspectives. No more of
>those "what's the class of the Object class' superclass class" riddles.
>
>>  Just one aspect of Self.  We would still have class objects that hold
>>  methods and instance variables names and a single superclass.  They
>>  just wouldn't be directly reachable from globals.  And we wouldn't
>>  have multiple inheritance via delegated parents.
>
>It seemed to me that perspectives provided a good way of getting away from
>the problems of multiple inheritance. There is an Oopsla paper that makes a
>similar argument. ("The Point of View notion for Multiple Inheritance",
>1990)
>
>By the way, there has been a fair bit of work done on perspectives after
>PIE. The work on "roles" is also related, and of course, all that on
>subjects and aspects, too, sometimes it is more relevant, sometimes less.
>
>Henrik


-- 



More information about the Squeak-dev mailing list