[squeak-dev] MC Configurations feature request

Jakob Reschke forums.jakob at resfarm.de
Sun Jun 7 21:52:44 UTC 2020

Hi Robert,

Have you tried Metacello recently? The BaselineOf subclass for a
project is very much like the POM in a Maven project or a Gradle file
(whose presence is also required for these kinds of projects). The
Metacello baseline declares which packages belong to this project, and
the dependencies and where they are coming from. It is not
"auto-constructed" as you put it, you write this specification
yourself. And it is declarative, just like Maven or Gradle files
(well, the latter can be turned into imperative style as well AFAIK).
I don't know what is not "first-class" about it as a
bill-of-materials. Put the BaselineOf subclass of the project in a git
repository and you are all set -- in a Git repository you don't even
need the ConfigurationOf part (because a commit usually is exactly one
configuration of your project). The baseline can also declare
conditional loading, to load different parts for different Smalltalk
vendors (Squeak, Pharo, ...).

Metacello has most of the features you asked for, except controlling
external tools (gcc, etc.). But you should rather use external tools
for that (like CMake, Gradle, ...). You can call them from Squeak via
OSProcess if you like. Metacello is not really a build system because
since when have we needed "builds" in a running Smalltalk environment?
It is rather a package manager, like apt. SmalltalkCI [1] is somewhat
of a build system, and it uses Metacello to load packages and their
dependencies into fresh images, in the usual setups.

Why reinvent the wheel?

What's missing in comparison to the Maven/Gradle world is one or more
central repositories to discover Metacello configurations/baselines,
so you could omit the Internet locations of dependencies in your own
projects. But you wouldn't automatically get that with extended
Monticello configurations either. For the older Metacello there is
something like this on SqueakSource already, but since it is
Monticello-based, it is not so appealing for Git-oriented projects,
and consequently Pharo.

I suggest you try Metacello, it is not so bad [2][3]. Its own code is
hard to follow, but not the descriptions you write for your own

[1] https://github.com/hpi-swa/smalltalkCI
[2] http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/Metacello.pdf
(applies to Squeak equally well)
[3] https://github.com/Metacello/metacello/blob/master/docs/GettingStartedWithGitHub.md#create-baseline

Kind regards,

Am So., 7. Juni 2020 um 20:24 Uhr schrieb Robert Withers via
Squeak-dev <squeak-dev at lists.squeakfoundation.org>:
> On 6/7/20 2:17 PM, Robert Withers wrote:
> > I am not sure I can express myself effectively, as I don't just want to
> > say yuck and carry on. I owe an explanation of my opinion. I strongly
> > dislike the auto-construction of #baselineOf and #configurationOf
> > methods and their required presence.
> > We should have repositories of
> > artifacts, like maven repos, and dependency specification in a build declaration script.
> > Call it a .sqm for Smalltalk Qualification Module. This has the protocol
> > of the new Smalltalk-based Gradle.
> Each projects .sqm file is in the git root directory for that project,
> exactly as the POM is for Maven. Andso, it si under git control. As the
> POM is specified as the fundamental unit of work, so the SQM file for
> Straddle.
> Straddle is the Smalltalk analog to Gradle, which helps teams build,
> automate and deliver better software, faster. From the inside of an
> image. Browse Straddle config file (SQM).
> Just wanted to clarify a little bit.
> K, rabbit
> >
> > Kindly,
> > Rabbit
> >
> > [1] Gradle - https://gradle.org/
> >
> >> Dave

More information about the Squeak-dev mailing list