keith_hodges at yahoo.co.uk
Wed Mar 25 11:05:54 UTC 2009
Cross posted because I think others may find this discussion useful:
Chris Muller wrote:
> Hi Keith, I think the work you did on Level-Playing Field and MC 1.5
> has always sounded fantastic.
>> implemented it. Magma users use a variety of images and Magma needs you
>> to have MCConfigurations working. Thats what LevelPlayingField in LPF
>> gives you.
> So if it makes MC Configurations "work" why do *I* need to use it and
> not just those wanting to load Magma via MC Configurations?
You dont, but I kind of assume that you are a user too.
>> Also the issue of extensions to classes that don't exist in older images
>> is solved via the orphanage. MC1.5 doesnt complain like MC1 does.
> This is again something that happens for those *loading* Magma, so is
> there a reason it is needed by the person doing the deployment? And,
> if so, and I do, will others who want to load it require MC 1.5 and/or
> The reason I have not moved on it after all this time, and I'm almost
> ashamed to say it, it has never bubbled up into the realm of
> critical-need that exceeded other priorities. Is LPF and MC 1.5 "drop
> in and go?", completely compatible with existing mc packages?
It should be more so.
The original MC1 made no effort to make anything compatible with
anything else. It uses a simple binary storeOn: so save its binary data.
This means that if you add an instance variable to any class in MC1's
model, your packages are incompatible with past MC1's This is what
happened, the MC in 3.9 added support for traits, and so packages saved,
with that MC are incompatible with previous MC's.
MC1.5 knows about this, and if a model class is realised with have extra
data items, that it does not have inst vars for, it pops them into a
properties dictionary. Also, MC1.5 makes an effort to only save the
minimum amounts of instVars, so if your class does not have any Traits
it saves, only the non-trait oriented inst-vars, and in doing so in
theory the packages it generates should be compatible with even the
older non 3.9 MC's.
The original MC1 was very naive about handling errors. It would simply
retry anything that raised an error. There were a number of situations
that it did not handle well, such as renaming or re-ordering of inst vars.
MC1.5 takes a much more considered approach. It attempts to actually
make the class definition compatible with both the before and after
situations, when loading methods. Obviously this is not always possible.
In theory MC1.5 should handle more of the difficult cases, than MC1.0
did. However that doesn't stop people blaming MC1.5 if a package doesnt
load, and they may find that the old MC1.0 can handle it using its old
brute force approach.
Finally MC1.6 with atomic loading is really cool, its over 3 times
faster, which for something the size of Magma is a big deal. (However
last time I tried it there was a minor bug)
thanks for asking the relevant questions.
More information about the Magma