<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>>  <span style="white-space: pre-wrap">the `List` type provided by `base-X.Y.Z` and `base-X.Y.Z'` may differ.

This is not actually true, `List` will obviously live in `ghc-internal` and `ghc-internal` would be the same for `base-4.9` and for `base-4.7.1`.

This raises the question about do we really need to depend on `base` in `template-haskell`? Perhaps we may be satisfied by small set of things that will contain `ghc-internal`?
</span><br>
      <span style="white-space: pre-wrap"></span></p>
    <div class="moz-cite-prefix">20.10.2023 14:23, Ben Gamari writes:<br>
    </div>
    <blockquote type="cite" cite="mid:87mswd1tjz.fsf@smart-cactus.org">
      <pre class="moz-quote-pre" wrap="">Viktor Dukhovni <a class="moz-txt-link-rfc2396E" href="mailto:ietf-dane@dukhovni.org"><ietf-dane@dukhovni.org></a> writes:

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">On Tue, Oct 17, 2023 at 04:54:41PM +0100, Adam Gundry wrote:

</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">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.
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">
To avoid that problem, GHC's own dependency on "base" could be indirect
via a shared object with versioned symbol names and a version-specific
SONAME (possibly even a private to GHC SONAME and private symbol version
names).  Say "libbase.so.4.19.1".

</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">The problem here is deeper than simply the symbol names. For instance,
the `List` type provided by `base-X.Y.Z` and `base-X.Y.Z'` may differ.
Since lists are used in the `template-haskell` AST, we would be unable
to share lists between `template-haskell` and `ghc`.

As noted in my recent reply elsewhere in the thread, this can be avoided
by communicating via serialisation instead of heap objects.

Cheers,

- Ben

</pre>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
ghc-devs mailing list
<a class="moz-txt-link-abbreviated" href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a>
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a>
</pre>
    </blockquote>
  </body>
</html>