we really need help

Daniel Vainsencher daniel.vainsencher at gmail.com
Tue Oct 11 05:58:51 UTC 2005

Actually, this is exactly the kind of problem I was having with 
bootstrapping Traits. In that case it seemed like a pretty freak 
occurance (changing how methods are added), and wasn't worth 
implementing the general solutions, so Adrian and I went the route of 
creating several versions that load stuff in order.

But both I and Avi proposed general solutions, and from the case you're 
presenting now, it seems the problem might be common enough to warrant 
implementing one of them.

I'll describe the two solutions, since I'm not yet sure what the 
tradeoffs are.
1. Have the loader sort the methods.
2. Do an atomic change of the method dictionaries

The first: the loader already loads classes superclass-first, for the 
obvious reasons. So we can tell it to sort the methods also - if 
Foo>>bar calls #baz, load all implementations of #baz before loading 
Foo>>bar. Of course this won't always work, because two methods can be 
mutually recursive, but that's rare.
The second: have the loader apply all changes to copies of the method 
dictionaries of the classes. Then atomically swap in the modified copies 
instead of the old ones. I guess this means to purge all caches and do 
an array-become. This requires vm knowledge to know whether it will 
require anything else.

What do you guys think?


Marcus Denker wrote:
> Hi,
> Sadly I really have no time to work on Monticello... or even to look at
> the current state too much. So no idea for that problem.
> For sure, we need to get the whole mess working soon.... I will try  to 
> find
> some time, but I fear that this will need to wait till I'm settled in  
> Santiago,
> so maybe end of next week.
>> I tried to tweak a bit the script by loading first kernel-md.42.mcz
>> take a 6693 image
>>     - merge MC275
>>     - scriptloader-sd.8.mcz
>>     script 6
>>     - but now I get an error because Debugger does not know stepAt:in:
> This is caused by the fact that #stepAt:in: has been moved to the  morphic
> package, so just loading "kernel" will delete that method.
>      Marcus

More information about the Packages mailing list