[GHC] #9265: Extend PackageId to include version dependency information

GHC ghc-devs at haskell.org
Fri Jul 4 17:18:19 UTC 2014


#9265: Extend PackageId to include version dependency information
-------------------------------------+------------------------------------
        Reporter:  ezyang            |            Owner:  ezyang
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Package system    |          Version:  7.9
      Resolution:                    |         Keywords:  backpack
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------
Description changed by ezyang:

Old description:

> [MultiInstances Multiple installed instances of a package] has been a
> long sought after feature to alleviate Cabal hell, and was the subject of
> an [GSoCMultipleInstances GSoC project] that ultimately never got merged
> into HEAD.
>
> This ticket is our latest attack on the problem, summarized as: add a
> version dependency hash to the `PackageId` (NOT the `InstalledPackageId`)
> associated with packages in the database.  This approach is distinguished
> from the prior attempts as follows:
>
> - We make no attempt to support multiple installations of different ways
> or ABI-compatible versions of a library (e.g. with/without
> optimizations.) This corresponds to supporting multiple
> InstalledPackageIds in a database; in our case, we're supporting multiple
> `PackageId`.
>
> - We do not have to deal with conflicting "instances" in GHC's package
> resolver: multiple instances can be simultaneously loaded and used in a
> single compiled program. This is because PackageIds are baked into the
> exported linker symbols, so different versions will have different names
> and can peacefully coexist.
>
> - We do not have to deal with the delicate ordering problem of
> calculating an ABI hash when configuring a package, which is prior to
> when we actually know it (ABI hash is only known after compilation),
> because our hash is based ONLY on dependency resolution choice.
>
> - In absence of preference for previously installed packages, our Cabal
> dependency resolution stays exactly the same: Cabal picks versions, and
> from these choices we calculate the dependency hashes. With preference,
> we will have to do a little more work.
>
> - We do not attempt to garbage collect old packages. Because we are not
> dependent on ABI, there is not an explosion of installed pacakges from
> package development; new installed packages only occur when version
> numbers are bumped up, or packages are installed in a combinatorially
> different fashion.

New description:

 [wiki:Commentary/Packages/MultiInstances Multiple installed instances of a
 package] has been a long sought after feature to alleviate Cabal hell, and
 was the subject of an [wiki:Commentary/GSoCMultipleInstances GSoC project]
 that ultimately never got merged into HEAD.

 This ticket is our latest attack on the problem, summarized as: add a
 version dependency hash to the `PackageId` (NOT the `InstalledPackageId`)
 associated with packages in the database.  This approach is distinguished
 from the prior attempts as follows:

 - We make no attempt to support multiple installations of different ways
 or ABI-compatible versions of a library (e.g. with/without optimizations.)
 This corresponds to supporting multiple InstalledPackageIds in a database;
 in our case, we're supporting multiple `PackageId`.

 - We do not have to deal with conflicting "instances" in GHC's package
 resolver: multiple instances can be simultaneously loaded and used in a
 single compiled program. This is because PackageIds are baked into the
 exported linker symbols, so different versions will have different names
 and can peacefully coexist.

 - We do not have to deal with the delicate ordering problem of calculating
 an ABI hash when configuring a package, which is prior to when we actually
 know it (ABI hash is only known after compilation), because our hash is
 based ONLY on dependency resolution choice.

 - In absence of preference for previously installed packages, our Cabal
 dependency resolution stays exactly the same: Cabal picks versions, and
 from these choices we calculate the dependency hashes. With preference, we
 will have to do a little more work.

 - We do not attempt to garbage collect old packages. Because we are not
 dependent on ABI, there is not an explosion of installed pacakges from
 package development; new installed packages only occur when version
 numbers are bumped up, or packages are installed in a combinatorially
 different fashion.

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9265#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list