I wouldn't be entirely opposed to having an abstract configuration class, but I hate to switch the configuration structure in midstream again... it is very nice that a config can be loaded into any old smalltalk image without any prerequisites....
The #ensureMetacello method should simply load ConfigurationOfMetacello and go from there ...
To require an abstract configuration class, I would want that class to be in the core for Pharo, GemStone and Squeak ... Metacello is already bundled with the core in GemStone so that leaves Squeak ... I really don't want to have to preface all of the install instructions with "Before loading the configuration, make sure that you've done X, Y and Z"
If bootstrapping is the only consideration, I don't think it is worth making the change ... there isn't a lot protocol that I would want to put into the Abstract configuration class ... project instance variable and method ...
If there are enough other arguments for an Abstract configuration class, then it would be good to make the switch sooner rather than later.
Being able to view the configurations using a hierarchy browser is an advantage, but that's more of a tools issue.
As I think about it, most of the advantages that come to mind are tools related. Even bootstrapping is a tools issue of sorts...
What do others think?
Mariano,
Would you be in favor of the abstract class, if the abstract class itself had to be booted into the image?
It's just a practical issue for me ... if we can count on the abstract class being preloaded in all dialects, then an abstract class makes sense.
If we can count on Metacello being preloaded in some of the dialects, then the ensureMetacello method need only be present for portability to platforms in which Metacello is not preloaded.
I don't disagree with the oddity of copy and paste.
Earlier versions of Metacello configurations did rely on a superclass, but booting the superclass into the image was problematic. Granted bootstrapping would only be hard in Squeak, but it isn't supposed to be hard!
The ensureMetacello method is only there for ease of bootstrapping software that is supposed to make it easy to boostrap software, but can't do the bootstrapping until it is bootstrapped itself:)
I just hate the idea of making it harder to share configurations with Squeak...
Mariano,
So in essence you are proposing that there be a "portable configuration" and a "semi-portable" configuration (requiring abstract superclass, but portable between GemStone and Pharo)....
Hmmm, I would think that this could be done ... the current configuration scheme would suffice for the "portable configuration"... if one has been using the "semi-portable" scheme and want's a portable version, it would easy to convert it to a portable version (some copying required:)...
Any other opinions?