[Pharo-dev] Slot class builder: Anonymous class modification

Camille Teruel camille.teruel at gmail.com
Fri Nov 22 10:38:47 EST 2013


On 22 nov. 2013, at 16:27, Igor Stasenko <siguctua at gmail.com> wrote:

> 
> 
> 
> On 22 November 2013 16:25, Igor Stasenko <siguctua at gmail.com> wrote:
> 
> 
> 
> On 22 November 2013 16:04, Camille Teruel <camille.teruel at gmail.com> wrote:
> Hi everyone,
> 
> With Esteban, we bumped into a problem with anonymous subclasses and the slot class builder.
> The problem is that once an anonymous class is created is not possible to modify it.
> Here is the problem:
> For creating an anonymous class with the new class builder API you do something like:
> 
> myAnonymousClass := AnonymousClassInstaller make: [ :classBuilder |
>         classBuilder
>                 superclass: Object;
>                 name: #MyAnonymousClass;
>                 .... ]
> 
> What happens is that the class builder asks the class installer if the class named #MyAnonymousClass exists or not to know if this a class to be created or to be modified.
> Here, the strategy of the anonymous class installer is to always answer no. So ok, now you have you're anonymous class.
> But what happens when you do something like:
> 
> myAnonymousClass addInstVarNamed: #newIV
> 
> Since the class has no clue of what class installer was used to create it, it instantiate a new one, and a PharoClassInstaller !
> This new class installer then says to the class builder that there is no class named MyAnonymousClass so it creates it! And it install it in the system dictionary!
> And myAnonymousClass is not modified.
> 
> So there is several problem here:
> - a class doesn't know which class installer was used to create it
> - even if the class would know that, the anonymous class installer would always say that it doesn't know it and a new class would be created
> 
> So one possible solution for that is to have one class installer per environment (so add one iv in SystemDictionary right now), like that a class would know what class installer was used to create it.
> What would happen then is that you don't create anonymous classes anymore, that is to say a class not installed in any environment, but instead you create a class that exist in an environment separated from the system dictionary.
> 
> What do you think?
> 
> 
> i think that this expression:
> 
> myAnonymousClass addInstVarNamed: #newIV
> 
> should create and answer new original class.
> And don't take me wrong a 'new class' means just a new class object, which is not installed/registered anywhere, because it is done at next step (if its necessary).
> 
> I'm not sure what this 'class installer' thingy comes from and it looks completely irrelevant. We must have clear separation between operations which creating new classes
> and installing/registering them inside environment.

The first is handled by the class builder, the second by the class installer

> Because anonymous class is not one which has no name, it is one which is not registered in any public place. For the rest , it should behave in same way as public one.
> 
> The fact that IDE tries to hide it and simulate as if you modified existing class is not really important here, because it is higher-level
> contracts and responsibilities.

+1 

> 
> 
> imo, a better term to use for it would be 'private class' , because anonymous is a bit fuzzy.

+ 1

> 
> 
>  
> -- 
> Best regards,
> Igor Stasenko.
> 
> 
> 
> -- 
> Best regards,
> Igor Stasenko.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20131122/647cb940/attachment-0002.html>


More information about the Pharo-dev mailing list