SearchPath (was RE: hackage, cabal-get, and security)
S. Alexander Jacobson
alex at alexjacobson.com
Wed May 18 19:45:14 EDT 2005
On Wed, 18 May 2005, Simon Marlow wrote:
>> With Cabal, if you download two packages, how do you know that they
>> won't require conflicting versions of another module/package?
>
> As discussed before, the fact that you can't use two versions of a
> package simultaneously is a missing feature in the implementation,
> nothing more.
I thought we agreed that module names are absolute (not package
qualified). As such, if two modules use the same module name to mean
two different things they are *in principle* incompatible. You can't
fix this in the implementation without changing the meaning of the
language.
Moreover since module names are absolute, the mapping of module names
to implementation must be global to a program and not local to a
particular package. The only question is whether this mapping is
implicit or explicit. SearchPaths' module maps make it explicit.
> (unlike Cabal, where dependencies are explicit, I might add).
Actually, only the immediate dependencies of a Cabal package are
explicit. A Cabal package is actually dependent on a much larger graph
of packages connected through build-depends relations. And since
build-depends relations include open version intervals, this graph may
change silently and catastrophically over time.
Module maps is to make the *full* set of dependencies explicit and
make it more likely that all modules/packages will be compatible.
>> The reality is that, no matter what, you always have to assume that
>> the user and author of a particular module/package need to live in
>> basically the same universe of modules and packages.
>
> So basically, there's no versioning, because everyone has to use the
> same version of everything. Right? Well, except that I can enter into
> a pact with another module author to use a certain version of a third
> party's module, and we both have to remember that we have the pact
> because the information doesn't travel with the module sources
If you develop a new version of a particular package P1, install it
locally on your system, and rely on it in developing package P2 which
you then publish. You would of course not be surprised when people
discover they can't use P2 because it depends on a not yet public
version of P1. In practice, you would not publish P2 until you have
ALSO published P1. Nothing really changes with SearchPath. You
publish P1 to a shared module map and then you publish P2. The only
change is that with module maps, you can now guarantee that these
changes don't break compatibility with any other packages in the set.
If you rely solely on build-depends, you never really know.
-Alex-
______________________________________________________________
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
> On 18 May 2005 17:59, S. Alexander Jacobson wrote:
>
>> On Wed, 18 May 2005, Simon Marlow wrote:
>>> On 17 May 2005 17:14, S. Alexander Jacobson wrote:
>>>> With SearchPath, you supply the URLs of the module maps you want to
>>>> use. SearchPath then uses these map to locate, download and
>>>> "install" needed libraries without further user intervention.
>>>>
>>>> A module map is just a file mapping module names to the base URLs of
>>>> directories in which they reside. If you want to supply the URL of
>>>> a particular version of a module map rather than "latest" you are
>>>> free to do that.
>>>
>>> But how do you know what module maps were being used by the author of
>>> the module you download? Don't you have to download their module map
>>> file too?
>>
>> The reality is that, no matter what, you always have to assume that
>> the user and author of a particular module/package need to live in
>> basically the same universe of modules and packages.
>
> So in fact I *cannot* locally modify my module map to use a different
> version of an imported module. The module map is fixed and global,
> although I can extend it locally.
>
> So basically, there's no versioning, because everyone has to use the
> same version of everything. Right? Well, except that I can enter into
> a pact with another module author to use a certain version of a third
> party's module, and we both have to remember that we have the pact
> because the information doesn't travel with the module sources (unlike
> Cabal, where dependencies are explicit, I might add).
>
>> With Cabal, if you download two packages, how do you know that they
>> won't require conflicting versions of another module/package?
>
> As discussed before, the fact that you can't use two versions of a
> package simultaneously is a missing feature in the implementation,
> nothing more.
>
> Cheers,
> Simon
>
> ** CRM114 Whitelisted by: ijones at syntaxpolice.org **
>
More information about the Libraries
mailing list