a simple solution to Package, preinst/postinst/etc
stéphane ducasse
ducasse at iam.unibe.ch
Fri Feb 18 08:23:08 UTC 2005
Ned can you clarify why you want to have PI and packages?
I'm confused.
> On Thursday 17 February 2005 11:43 am, stéphane ducasse wrote:
>> On 17 févr. 05, at 20:02, Ned Konz wrote:
>>> On Thursday 17 February 2005 10:24 am, stéphane ducasse wrote:
>>>> Yes this is my mistake because we were talking about that with alex
>>>> and
>>>> I did not
>>>> check the latest version. If we use package instance this means that
>>>> we
>>>> should attacj
>>>> block like in VW. Was what your proposal?
>>>
>>> There may be issues with actually serializing and deserializing
>>> blocks,
>>> though.
>>
>> how did you see that in your approach because as soon as you have
>> package as instances of Packages
>> then you want a way to describe postload and preload. May be storing
>> block strings is enough?
>> but this requires to have the compiler at load-time (which for the
>> beginning can be ok).
>
> If we're talking about packages that contain source code, then we could
> reasonably assume that the compiler was available, right?
>
> I'd figured that the preload and postload could be handled by PI
> subclass
> methods that would be compiled first, or by doit strings. The first is
> more
> manageable with existing tools.
>
> However, to do it without requiring two passes over the source code to
> pick
> out the appropriate methods, we could package the PI subclass code
> separately
> from the actual package code.
>
> For instance, an MCZ file could contain the following members:
>
> package (existing, but data could also be in packageInfo)
> version (existing, but data could also be in packageInfo)
> snapshot/source.st (existing, but wouldn't contain PI subclass
> preinstall
> code)
> snapshot/preinstall.st (new, contains only code for PI subclass
> preinstall
> methods, if any)
> packageInfo (new, serialized PI instance data)
>
> Any other PI code besides preinstall could live in the regular
> source.st
> member.
>
> So the procedure for loading one of these would be:
>
> * read package and version files as we do now, if they're there (I see
> this as
> backwards compatibility). Or we could put their data into packageInfo
> but
> then we lose backwards compatibility.
> * PackageInfo class method deserializes packageInfo member into
> PackageInfo
> instance. That instance also contains the name of the desired
> PackageInfo
> subclass, if any.
> * that instance is used to supply package-level and version metadata
> * on load, we compile snapshot/preinstall.st if it exists.
> * Then (if the desired PI subclass class exists) we change the class
> of the PI
> instance to the new PI subclass (or construct a new instance of the
> desired
> class), and call any preinstall method that it may have (which would
> have
> come from snapshot/preinstall.st).
> * Then we compile snapshot/source.st
> * and then we call any initialize methods that the classes in the
> package may
> have had (this is done from the code in snapshot/source.st).
>
> --
> Ned Konz
> http://bike-nomad.com/squeak/
>
>
More information about the Squeak-dev
mailing list
|