Reinstallable - base
Oleg Grenrus
oleg.grenrus at iki.fi
Thu Oct 19 11:47:15 UTC 2023
For what it worth, `template-haskell` itself depends on a `base`. So if
`base` if different base is used, different `template-haskell` is to be
used.
In my opinion is not *too unfair* to require that if you actually splice
in (i.e. the code not only provides template-haskell combinators to
create/modify splices) then you must have base and template-haskell
versions aligned with host GHC used versions.
The same restriction is GHC plugins, isn't it, except `template-haskell`
is replaced with `ghc`?
- Oleg
On 17.10.2023 18.54, Adam Gundry wrote:
> Hi Simon,
>
> Thanks for starting this discussion, it would be good to see progress
> in this direction. As it happens I was discussing this question with
> Ben and Matt over dinner last night, and unfortunately they explained
> to me that it is more difficult than I naively hoped, even once
> wired-in and known-key things are moved to ghc-internal.
>
> The difficulty is that, as a normal Haskell library, ghc itself will
> be compiled against a particular version of base. Then when Template
> Haskell is used (with the internal interpreter), code will be
> dynamically loaded into a process that already has symbols for ghc's
> version of base, which means it is not safe for the code to depend on
> a different version of base. This is rather like the situation with TH
> and cross-compilers.
>
> Adam
>
>
>
> On 17/10/2023 11:08, Simon Peyton Jones wrote:
>> 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
>>
>> I think we'd all like it if someone could use GHC 9.10 to compile a
>> library L that depends on base-4.9 and either L doesn't work at all
>> with base-4.10, or L's dependency bounds have not yet been adjusted
>> to allow base-4.10.
>>
>> We'd like to have a version of `base`, say `base-4.9.1` that has the
>> exact same API as `base-4.9` but works with GHC 9.10.
>>
>> Today, GHC 9.10 comes with a specific version of base, /and you can't
>> change it/. The original reason for that was, I recall, that GHC
>> knows the precise place where (say) the type Int is declared, and
>> it'll get very confused if that data type definition moves around.
>>
>> But now we have `ghc-internal`, all these "things that GHC magically
>> knows" are in `ghc-internal`, not `base`.
>>
>> *Hence my question: what (now) stops us making `base` behave like any
>> other library*? That would be a big step forward, because it would
>> mean that a newer GHC could compile old libraries against their old
>> dependencies.
>>
>> (Some changes would still be difficult. If, for example, we removed
>> Monad and replaced it with classes Mo1 and Mo2, it might be hard to
>> simulate the old `base` with a shim. But getting 99% of the way
>> there would still be fantastic.)
>>
>> Simon
>
More information about the ghc-devs
mailing list