Wishes for new ClassBuilder (toon?)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Wishes for new ClassBuilder (toon?)

Mariano Martinez Peck
Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
3) Do the same as 2 but validating and installing the class in the system.

For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.

For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...

ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.

Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(

Thanks in advance,

--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Toon Verwaest-2
The PlayOut classbuilder indeed separates this nicely. We have the
distinction between the "installer" and the "builder". The builder uses
an "installer" as a client and notifies it about stuff that happens.

For example we have an "anonymous subclass builder" that's implemented
like that. It basically just ignores most of the notifications of the
builder since it doesn't really do anything.

... but of course this means that you need PlayOut ;) You can get an
image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz

caveats:
- At the moment that system doesn't validate everything yet like the old
classbuilder (since I wanted to freely change classes with any name)
- it doesn't handle obsolete subclasses yet. Oh well ;)
- it's still intertwined with our slots implementation, so it relies on
Helvetia. But that can/should/will be fixed without changing the API.

cheers,
Toon

On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:

> Hi guys. As part of the Fuel project, one of the things we want to do
> (in fact, it is done) is to serialize classes. There want to have 3
> possibilities:
> 1) Do something like DiskProxy where you only save its global name and
> some selector to run when deserialing it
> 2) Really searialize the whole class (following method dictionary,
> compiled methods, class pools and friend, etc) so that you can
> deserialize it in another image where such class is not present.
> 3) Do the same as 2 but validating and installing the class in the system.
>
> For 2) what we want to do is just to serialize the class as any other
> object. As a result, we get a Class instance. Nothing is validated,
> nothing is added in Smalltalk globals, nothing is compiled. We do not
> use ClassBuilder at all.
>
> For 3) we want to do 2) plus validating and installing the class in
> the system. For validating I mean ALL the validations that the class
> builder does when creating or modifying a class. And for "installing
> in the system" I mean notify, put in Smalltalk globals, re compile
> what is needed, etc...
>
> ClassBuilder seems to do 2) and 3) together. So, what I would love to
> have in a new class builder is to have those two things separated. So
> that I can say to an object ClassManager validate: aClass or
> ClassManager installClassOnSystem: aClass.
>
> Do you think such thing is possible?  Right now going through
> ClassBuilder and understand all the validations it does is really
> complicated :(
>
> Thanks in advance,
>
> --
> Mariano
> http://marianopeck.wordpress.com
>


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Stéphane Ducasse
toon I looked at the code but do you have tests for the new class builder?
I could not find them.

Stef
On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:

> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>
> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>
> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>
> caveats:
> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
> - it doesn't handle obsolete subclasses yet. Oh well ;)
> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>
> cheers,
> Toon
>
> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>> 3) Do the same as 2 but validating and installing the class in the system.
>>
>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>
>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>
>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>
>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>
>> Thanks in advance,
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Toon Verwaest-2
Nope. That needs to be added. Sorry. If you have tests for the old
classbuilder we can port them. Otherwise I can take the time at the next
print I attend to do it; maybe together with somebody else.

Toon

On 05/18/2011 09:38 PM, Stéphane Ducasse wrote:

> toon I looked at the code but do you have tests for the new class builder?
> I could not find them.
>
> Stef
> On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:
>
>> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>>
>> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>>
>> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>>
>> caveats:
>> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
>> - it doesn't handle obsolete subclasses yet. Oh well ;)
>> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>>
>> cheers,
>> Toon
>>
>> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>>> 3) Do the same as 2 but validating and installing the class in the system.
>>>
>>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>>
>>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>>
>>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>>
>>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>>
>>> Thanks in advance,
>>>
>>> --
>>> Mariano
>>> http://marianopeck.wordpress.com
>>>
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Stéphane Ducasse
I'm planning to be at bern the friday 30 of june after tools so I would be happy to do that.

Stef

On May 18, 2011, at 10:31 PM, Toon Verwaest wrote:

> Nope. That needs to be added. Sorry. If you have tests for the old classbuilder we can port them. Otherwise I can take the time at the next print I attend to do it; maybe together with somebody else.
>
> Toon
>
> On 05/18/2011 09:38 PM, Stéphane Ducasse wrote:
>> toon I looked at the code but do you have tests for the new class builder?
>> I could not find them.
>>
>> Stef
>> On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:
>>
>>> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>>>
>>> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>>>
>>> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>>>
>>> caveats:
>>> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
>>> - it doesn't handle obsolete subclasses yet. Oh well ;)
>>> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>>>
>>> cheers,
>>> Toon
>>>
>>> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>>>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>>>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>>>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>>>> 3) Do the same as 2 but validating and installing the class in the system.
>>>>
>>>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>>>
>>>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>>>
>>>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>>>
>>>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>>>
>>>> Thanks in advance,
>>>>
>>>> --
>>>> Mariano
>>>> http://marianopeck.wordpress.com
>>>>
>>>
>>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Tudor Girba
We should organize a Sprint :)

Cheers,
Doru


On 18 May 2011, at 23:01, Stéphane Ducasse wrote:

> I'm planning to be at bern the friday 30 of june after tools so I would be happy to do that.
>
> Stef
>
> On May 18, 2011, at 10:31 PM, Toon Verwaest wrote:
>
>> Nope. That needs to be added. Sorry. If you have tests for the old classbuilder we can port them. Otherwise I can take the time at the next print I attend to do it; maybe together with somebody else.
>>
>> Toon
>>
>> On 05/18/2011 09:38 PM, Stéphane Ducasse wrote:
>>> toon I looked at the code but do you have tests for the new class builder?
>>> I could not find them.
>>>
>>> Stef
>>> On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:
>>>
>>>> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>>>>
>>>> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>>>>
>>>> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>>>>
>>>> caveats:
>>>> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
>>>> - it doesn't handle obsolete subclasses yet. Oh well ;)
>>>> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>>>>
>>>> cheers,
>>>> Toon
>>>>
>>>> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>>>>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>>>>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>>>>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>>>>> 3) Do the same as 2 but validating and installing the class in the system.
>>>>>
>>>>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>>>>
>>>>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>>>>
>>>>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>>>>
>>>>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>> --
>>>>> Mariano
>>>>> http://marianopeck.wordpress.com
>>>>>
>>>>
>>>
>>
>>
>
>

--
www.tudorgirba.com

"Value is always contextual."




Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Stéphane Ducasse
> We should organize a Sprint :)

I may be able to stay the saturday.
so what day?

>
> Cheers,
> Doru


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Toon Verwaest-2
In reply to this post by Stéphane Ducasse
I'll be at tools as well, so if we have time we can already do some
stuff there.

On 05/18/2011 11:01 PM, Stéphane Ducasse wrote:

> I'm planning to be at bern the friday 30 of june after tools so I would be happy to do that.
>
> Stef
>
> On May 18, 2011, at 10:31 PM, Toon Verwaest wrote:
>
>> Nope. That needs to be added. Sorry. If you have tests for the old classbuilder we can port them. Otherwise I can take the time at the next print I attend to do it; maybe together with somebody else.
>>
>> Toon
>>
>> On 05/18/2011 09:38 PM, Stéphane Ducasse wrote:
>>> toon I looked at the code but do you have tests for the new class builder?
>>> I could not find them.
>>>
>>> Stef
>>> On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:
>>>
>>>> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>>>>
>>>> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>>>>
>>>> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>>>>
>>>> caveats:
>>>> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
>>>> - it doesn't handle obsolete subclasses yet. Oh well ;)
>>>> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>>>>
>>>> cheers,
>>>> Toon
>>>>
>>>> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>>>>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>>>>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>>>>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>>>>> 3) Do the same as 2 but validating and installing the class in the system.
>>>>>
>>>>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>>>>
>>>>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>>>>
>>>>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>>>>
>>>>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>> --
>>>>> Mariano
>>>>> http://marianopeck.wordpress.com
>>>>>
>>
>


Reply | Threaded
Open this post in threaded view
|

Re: Wishes for new ClassBuilder (toon?)

Stéphane Ducasse
excellent!

Stef

On May 19, 2011, at 9:51 AM, Toon Verwaest wrote:

> I'll be at tools as well, so if we have time we can already do some stuff there.
>
> On 05/18/2011 11:01 PM, Stéphane Ducasse wrote:
>> I'm planning to be at bern the friday 30 of june after tools so I would be happy to do that.
>>
>> Stef
>>
>> On May 18, 2011, at 10:31 PM, Toon Verwaest wrote:
>>
>>> Nope. That needs to be added. Sorry. If you have tests for the old classbuilder we can port them. Otherwise I can take the time at the next print I attend to do it; maybe together with somebody else.
>>>
>>> Toon
>>>
>>> On 05/18/2011 09:38 PM, Stéphane Ducasse wrote:
>>>> toon I looked at the code but do you have tests for the new class builder?
>>>> I could not find them.
>>>>
>>>> Stef
>>>> On May 18, 2011, at 6:17 PM, Toon Verwaest wrote:
>>>>
>>>>> The PlayOut classbuilder indeed separates this nicely. We have the distinction between the "installer" and the "builder". The builder uses an "installer" as a client and notifies it about stuff that happens.
>>>>>
>>>>> For example we have an "anonymous subclass builder" that's implemented like that. It basically just ignores most of the notifications of the builder since it doesn't really do anything.
>>>>>
>>>>> ... but of course this means that you need PlayOut ;) You can get an image at http://pinocchio.unibe.ch/~tverwaes/PlayOut.tar.gz
>>>>>
>>>>> caveats:
>>>>> - At the moment that system doesn't validate everything yet like the old classbuilder (since I wanted to freely change classes with any name)
>>>>> - it doesn't handle obsolete subclasses yet. Oh well ;)
>>>>> - it's still intertwined with our slots implementation, so it relies on Helvetia. But that can/should/will be fixed without changing the API.
>>>>>
>>>>> cheers,
>>>>> Toon
>>>>>
>>>>> On 05/18/2011 03:18 PM, Mariano Martinez Peck wrote:
>>>>>> Hi guys. As part of the Fuel project, one of the things we want to do (in fact, it is done) is to serialize classes. There want to have 3 possibilities:
>>>>>> 1) Do something like DiskProxy where you only save its global name and some selector to run when deserialing it
>>>>>> 2) Really searialize the whole class (following method dictionary, compiled methods, class pools and friend, etc) so that you can deserialize it in another image where such class is not present.
>>>>>> 3) Do the same as 2 but validating and installing the class in the system.
>>>>>>
>>>>>> For 2) what we want to do is just to serialize the class as any other object. As a result, we get a Class instance. Nothing is validated, nothing is added in Smalltalk globals, nothing is compiled. We do not use ClassBuilder at all.
>>>>>>
>>>>>> For 3) we want to do 2) plus validating and installing the class in the system. For validating I mean ALL the validations that the class builder does when creating or modifying a class. And for "installing in the system" I mean notify, put in Smalltalk globals, re compile what is needed, etc...
>>>>>>
>>>>>> ClassBuilder seems to do 2) and 3) together. So, what I would love to have in a new class builder is to have those two things separated. So that I can say to an object ClassManager validate: aClass or ClassManager installClassOnSystem: aClass.
>>>>>>
>>>>>> Do you think such thing is possible?  Right now going through ClassBuilder and understand all the validations it does is really complicated :(
>>>>>>
>>>>>> Thanks in advance,
>>>>>>
>>>>>> --
>>>>>> Mariano
>>>>>> http://marianopeck.wordpress.com
>>>>>>
>>>
>>
>
>