On 10/12/2015 02:20 AM, Christophe Demarey wrote:
Le 11 oct. 2015 à 18:42, Dale Henrichs a écrit :
On 10/11/15 12:19 AM, stepharo wrote:
Le 11/10/15 00:40, Dale Henrichs a écrit :
Christophe,
I still don't have a lot of time to read the paper and try to understand what
you are trying to accomplish,
you should read it. :)
We wrote it for that and it is not boring nor long.
I scanned through it at the time and as I recall, I thought that the
functionality described was already covered by git and BaselineOf ... but I did
not read it in great detail and I did not (and still don't) have the time to
compose a long-winded response:)
but I am curious how you think "package dependencies" will play with git-based
projects?
In git-based repositories I don't think you have the same type of dependency
issues that one might have with monticello repositories --- In a monticello
repository you have a whole range of possible package versions to pick from,
but in a git-based repository the range of package versions is fixed to those
that are committed together so the packages that are meant to work together are
committed together.
I think that this is only true for packages committed within the same repo.
Now between porjects published in different repo you have to express them.
I do not think that we all want to publish in the same repo and clone out
everything.
... and inter-project dependencies is what a BaselineOf does .... which brings
me back to the conclusion that I reached when I scanned the paper:)
In the bootstrap scenario, you would only have one version per package to
choose from, so the packages that are meant to work together are committed
together ....
I guess I don't know what you mean when you say:
we want to decouple a released version of a package from the working copy of
the package version description (implies the creation of a package repository +
a web interface on top of it to promote/search packages).
Perhaps a description of the problem being solved would help me understand.
We want to be able to have a package market place where tools can grab
dependencies without to load code
and can compute the set of packages that should be loaded.
When a package is released into the market: then it externalise its metadata so
that a crawler can automatically build
dependency graph and create specific distribution.
Okay. This is a problem .... but it happens to be a problem that Metacello "can
solve/does solve" - so there must be something else (a deeper problem?) that I don't
quite understand.
With that said, if you are planning to replace Metacello, then I am excited:)
But I will repeat that I hope that you are considering cross platform issues ...
Perhaps at this point in time, I'd like to read some code. Then I can skip
reading the paper and get a feel for how hard it will be to port to GemStone:)
Well, the point is not to replace metacello but to go towards a per package
metadata description allowing some flexibility with the introduction of virtual
packages.
Oh darn, you mean I have to continue to support Metacello:)
This will allow, in a first time, to set up a package repository and more
important, a web site on top of it. In a second time, I also want to enable more
flexibility in expressing dependencies constraints (eg. > 2.0, 3.*, etc.). To
achieve that, you need a very performant dependency solver and I would like to
reuse linux ones (it has be done for ocaml by example) through CUDF (check
http://mancoosi.org/
There are a couple of different schemes for expressing "version ranges"
in Metacello. Have you looked at them?
By reuse, do you mean that you will reimplement the algorithms in
Smalltalk or are you suggesting that depency resolution will only work
on linux?
From a practical perspective I am curious what problems will be solved
by having "dependency constraints" expressed by anything more
complicated than what I use for github:
github://dalehenrich/tode:v0.0.?/repository
Which translates to load the latest patch version of the tode project
(where major.minor.patch) ... I know that in theory more complicated
schemes are intersting, but that assumes that the developers assigning
version numbers are actually adhering to a rational version numbering
scheme and from a practical matter even the above pattern is risky
business:)
For now, I implemented a simple solver for static dependency constraints
(=1.2). I checked Metacello implementation and it looked to me that approaches
are a bit too far to be able to reuse the whole code. For sure, it is not as
robust as Metacello is, because you enhanced it for years.
What I want now, is to experiment (let's name it) Cargo Package Manager to see
if it fits the needs. Pharo bootstrap is the first use case.
okay, so this is just in the experimental phases .... so for the time
being I should be focussing my efforts on the minimal Metacello approach
rather than get involved in the Cargo Package Manager?
Dale