[squeak-dev] Metacello Tonel Support Proposal
Dale Henrichs
dale.henrichs at gemtalksystems.com
Fri May 29 23:26:07 UTC 2020
FWIW, I am working on a project called Rowan that is a replacement for
Metacello ... Right now I am working on integrating Rowan into the
GemStone build process and the plan is that Rowan will be included in
the next major release of GemStone ... Like Metacello, Rowan is aimed at
multiple dialects of Smalltalk.
All of the project/package metadata is stored external to the packages
directory. Here is a very simple example project[1] that has 2
packages[2] RowanSample9-Core and RowanSample9-Tests. The
RowanSample-Tests package is conditionally loaded. if you poke around in
the rowan directory[1], you will see that the project meta data is being
stored on disk in STON format.
Rowan supports both Filetree and Tonel package formats.
There are nearly 60 different sample projects in the RowanSample9
repository[3] each on it's own branch and all of the projects were
created and updated using the Rowan API. The Rowan API encompasses not
only creating and managing project meta data, but the creation and
management of projects/packages/classes/methods.
The "Rowan API" is segregated into two major pieces: disk format and
in-image api.
The most important piece of the API is the disk format as that is the
key to sharing projects between smalltalk dialects. At a minimum all
dialects must be able to share the disk format.
The second component is the in-image api. The in-image api is in roughly
three pieces: Rowan definitions (similar to Monticello definitions ...
extended to include projects and the in-image representation of the meta
data; a loader api which manages the work of installing definitions into
the image; and the loaded representation of projects, packages, classes
and methods.
I'm imagining that different dialects will choose to support Rowan at
different levels. Sharing disk format only; sharing the definition
implementation (which would include reading and writing definitions
to/from disk); sharing the loader implementation; and sharing the loaded
implementation.
Esteban, Mariano and I talked in December/January about incorporating
sub applications, etc. into Rowan, but we were all under time
constraints at the time and it seems that incorporating the Envy meta
data was going to take a little bit of work. Rowan has the notion of
`components` which are very similar to subapplications, but
subapplications are more restrictive than components[4] and there was no
opportunity for directly mapping between the two --- without spending a
bit of time that we didn't have ... with that said I am optimistic that
Envy metadata can be incorporated.
The fact that Rowan serializes objects to disk in STON format, means
that we can have quite a bit of latitude in what how we shape the
metadata that is stored on disk --- which means that if push comes to
shove, Envy style projects may use a different set of classes than the
"standard Rowan project (akin to Metacello/Monticello projects)". Of
course, the Envy style projects should be loadable and writable on all
supported platforms ...
I am still a couple months away from being done with V2.0 of Rowan
(Rowan V1.0 went into production at one of our customer's sites 1.5
years ago) and I will have other tasks related to the next release of
GemStone, so I can't forecast when I will start porting Rowan to other
platforms, but that is my intention.
In the mean time, if there are folks interested in helping with the port
to other platforms, please drop me a line and we can arrange a chat :)
Dale
[1] https://github.com/dalehenrich/RowanSample9/tree/spec_0001/rowan
[2] https://github.com/dalehenrich/RowanSample9/tree/spec_0001/rowan/src
[3] https://github.com/dalehenrich/RowanSample9
[4] https://github.com/GemTalk/Rowan/issues/553
On 5/29/20 12:50 PM, Mariano Martinez Peck wrote:
>
>
> On Fri, May 29, 2020 at 4:34 PM Jakob Reschke <forums.jakob at resfarm.de
> <mailto:forums.jakob at resfarm.de>> wrote:
>
> Hi Mariano,
>
> That is interesting to hear, thank you!
>
> What is VA Smalltalk's stance about Tonel interoperability between the
> Smalltalks _in the same project_? For example, if the main developers
> use VA Smalltalk, there will be the additional ENVY properties for
> SubApplications and such in the meta files. But when someone loads the
> project in Squeak or Pharo and writes another version, this will not
> include these additional properties. So if this person created a pull
> request, merging it without manual polishing will "destroy" the
> additional setup for VA Smalltalk.
>
> I am asking because we are facing similar problems between Squeak and
> Pharo, although they are still much closer to one another than VA
> Smalltalk is to any of them.
>
>
>
> Yes, that would be the current situation. Although, if you can live
> with certain constrains (like not having subapps, loosing whether a
> method is public or private, etc etc), then its much closer to be
> interoperable. You can read more here:
> https://github.com/instantiations/tonel-vast#compatibility-recommendations
>
> Also, we have an open issue to address the possibility of storing the
> VA specific metadata in a separate place:
> https://github.com/instantiations/tonel-vast/issues/49
> But we have a bunch of other higher priority things first.
>
> Hope this helps.
>
> --
> Mariano Martinez Peck
> Email: marianopeck at gmail.com <mailto:marianopeck at gmail.com>
> Twitter: @MartinezPeck
> LinkedIn: www.linkedin.com/in/mariano-martinez-peck
> <https://www.linkedin.com/in/mariano-mart%C3%ADnez-peck/>
> Blog: https://marianopeck.wordpress.com/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200529/c2c4daf9/attachment.html>
More information about the Squeak-dev
mailing list
|