Reinstallable - base

Howard B. Golden howard.b.golden at gmail.com
Fri Oct 20 19:06:43 UTC 2023


Cut the Gordian Knot by serializing all the interfaces. This may be a good first step. 

Howard

> On Oct 20, 2023, at 10:26 AM, Ben Gamari <ben at well-typed.com> wrote:
> 
> Ben Gamari <ben at well-typed.com> writes:
> 
>> Simon Peyton Jones <simon.peytonjones at gmail.com> writes:
>> 
>>> Dear GHC devs
>>> 
>>> Given the now-agreed split between ghc-internal and base
>>> <https://github.com/haskellfoundation/tech-proposals/pull/51>, what stands
>>> in the way of a "reinstallable base"?
>>> 
>>> Specifically, suppose that
>>> 
>>>   - GHC 9.8 comes out with base-4.9
>>>   - The CLC decides to make some change to `base`, so we get base-4.10
>>>   - Then GHC 9.10 comes out with base-4.10
>>> 
>> We thought about this quite a bit at the Well-Typed meeting this week.
>> In short, I suspect that after the `ghc-internal` split is merged and
>> some further work we will be able to use multiple `base` versions with
>> a single compiler version.
>> 
>> I imagine this would be done in roughly three phases. The first two
>> phases can happen in the short term; the last is a bit further off.
>> I'll describe these in turn below.
>> 
> One final point that I forgot to mention: None of this addresses the
> problem of compiler plugins. This is problematic as `Cabal`'s
> one-version-per-install-plan restriction means means that any package
> using a plugin will be forced to use the precise `base` that `ghc`
> itself is linked against.
> 
> I can think of three ways to address this:
> 
> * Teach `Cabal` to distinguish between plugin dependencies (which are
>   only needed at build time and needn't be linked into final build
>   results) and normal runtime dependencies. This is not a complete
>   solution as many plugins have both compile-time and runtime
>   components, but it would help in some cases.
> 
> * Make `ghc` reinstallable. This allows `Cabal` to rebuild the compiler
>   when we need to link against a different `base`. We have started this
>   process but in general it is quite tricky to get right (see #20742)
>   and will require cooperation from `Cabal` .
> 
> * Serialise structures used by plugins, just as we do for the TH AST.
>   Unfortunately, the surface area of the plugin interface is
>   significantly larger than that of TH.
> 
> None of these options are easy. For this reason, I think it would be
> wise to leave plugins as future work (if we decide to address it at
> all).
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


More information about the ghc-devs mailing list