Overriding #class

Bert Freudenberg bert at freudenbergs.de
Tue Nov 13 10:35:34 UTC 2007


On Nov 13, 2007, at 11:28 , Martin Beck wrote:

> Hello,
>
> we have a little problem while implementing a CodA meta-object  
> protocol. The facility we try to implement now (or first :) ) is  
> that every instance should have the possibility to add behaviour  
> (i.e. methods) to it, but not to the class. Our first approach,  
> which was also advised in Jeff McAffer's papers, was to insert  
> 'anonymous' classes, which implement these methods and change the  
> objects class to that new foo-class.
>
> However, to retain normal behaviour, we want to override the #class  
> method to return the real class of the object, not the inserted  
> one. The CodA metastructure will be accessed through a #meta message.
>
> As you might have expected, our problem is now, that the compiler  
> optimizes the #class send and therefore the code only works in the  
> debugger. Our question is now, whether there is an easy and  
> shareable (Monticello, etc.) way to disable these optimizations and  
> whether this idea could work with the current VM implementation? If  
> the VM doesn't use the #class method to bind messages to an object  
> to the methods of its class, we think that it could be possible,  
> but if this lookup is not built into the VM but rather into the ST  
> system, we have to go another way...

Wouldn't overriding #class break more things than it solves? After  
all, your object's class is not what it would claim to be.

Which "normal behavior" would you like to "retain"?

- Bert -





More information about the Squeak-dev mailing list