[squeak-dev] SystemEditor (was: Re: Instance variable access in superclasses)

Andreas Raab andreas.raab at gmx.de
Wed Nov 26 07:21:45 UTC 2008


Matthew Fulmer wrote:
> Most of the time recompiling a class is not in the compiler. It
> is in the three full image scans necessary to swap all object
> instances. All three are within ClassBuilder >> update:to:

That assumes that the majority of time being spent in class reshapes is 
spent in these memory scans. This certainly didn't used to be the case - 
the majority of time when dealing with real class hierarchies like 
Morphic or MVC was spent recompiling (i.e., parsing). Since the compiler 
is still the same I'm surprised you see that much of a speedup. Unless 
SystemEditor doesn't recompile but rather relink (update ivar mapping 
only without parsing)? This would certainly give it a serious boost.

> 1. allInstances in ClassDescription >> updateInstancesFrom:
> 2. elementsExchangeIdentityWith: in ClassDescription >>
>    updateInstancesFrom:to:isMeta:
> 3. becomeForward: or elementsForwardIdentityTo: in
>    ClassBuilder >> update:to:
> 
> ClassBuilder thus does 3n full memory scans (where n is the
> number of classes to recompile)

Yes. Partly to preserve space (since you only need to deal with all the 
instance of a single class instead of an entire class hierarchy like 
Morphic). The other reason is ... ClassBuilder>>update:to: which is one 
nasty set of constraints that it's hard to believe (and even harder to 
get right).

> SystemEditor does n + 2 full memory scans. It does the
> allInstances search once per class, then groups all the becomes
> into two becomes at the end of the commit (which is most of the
> reason why SystemEditor is truly atomic). I've tried to collapse
> the n allInstance scans into one, but have been unable so far to
> do it without crashing the VM. I think one should be able to
> compile any number of classes with just two memory scans (one to
> find all instances, one to becomeForward: them)

Holy cow. If that actually works, it's impressive as hell. Given the 
complexity in ClassBuilder (all of which is the direct result of people 
actually using it and running into issues) it'll be no small feat to get 
this right in SystemEditor. I've spent a few years on it ;-)

I'm looking forward to test-drive SystemEditor a little more.

Cheers,
   - Andreas



More information about the Squeak-dev mailing list