1 updating ghc-paths and notifying existing clients
2 making (some) ghc api clients less dependent on a single ghc    version

dynamic linking will solve (1), but at this stage I don't think we have time to get dynamic linking fully working and in the binary distributions for 6.10.1. We might have it working in a build-from-source form, though.

http://hackage.haskell.org/trac/ghc/wiki/Status/Releases

"Things we plan to do for sure" needs an update, then? Just to
clarify that the 6.10 September RC will be for 6.10.1, and that
shared libs are still certain for 6.10.x, just not 6.10.1?

As I've said before regarding (2), it's feasible to make the .hi format stable across minor releases of GHC, but not major releases. Making an extensible .hi format seems completely unrealistic - it's not just the format that changes, but the semantics. "Losing inforamtion" might be completely disastrous if you actually *needed* that information. Not to mention the fact that trying to do both forwards and backwards compatibility in anything but a trivial way gives you a quadratic-sized testing surface, which is something we really have to worry about.

Yes, I noticed that you stopped reading my messages about this
a while ago;-) else you'd have noticed that I no longer talk about
keeping the .hi file stable, nor about splitting it into a stable and a
version-specific section. And I specifically restricted my wishlist
to ghc api clients who do not need that extra information. I don't know to what extent what I'm asking for is possible (well, it is obviously possible, but whether it is practical is another question).
And you've convinced me that there are situations that wouldn't
be practical to cover.

But saying that the incompatibilities are difficult to handle at the
source only re-emphasizes my point: I would like to avoid every ghc api user and every ghc api client user having to worry about this versionitis, which gives a rather larger testing surface than the one you're worried about.

------------ the suggestion

What I've been suggesting in more recent messages is for each
ghc version to be able to show its own .hi format in a not version-
specific form, and for each ghc version to be able to read such
a not version-specific form, similar to Malcolm's recent suggestion.

As I see it, there's a range of levels at which interface files can
be represented:

1 complete haskell source(.hs): all information, but unprocessed
2 subset haskell source (.hs-boot): only interface-relevant info,
   but unprocessed
3 internal interface format (.hi): only interface-relevant info,
   processed and ready to use

Since typical ghc-based haskell environments don't have library sources (it would be great if Cabal optionally installed package sources as well, btw, just as it does documentation), we need something that can be generated from .hi files.
Would it be possible to extract Haskell source files (somewhere
between levels 1 and 2 above) from which the given .hi files could have been generated, a kind of of reverse-engineered "Haskell source level interface format" (.hsi)? Any GHC version
reading such a .hsi file could then do its own processing to generate
its own .hi file format for that.

--------------- example scenario

The most naive implementation of this suggestion would be for
each ghc to be able to show and read .hi-file info in Haskell
source form. Concretely:

the issue again

- ghc api client GAC (think Haddock/HaRe/tag file generator/..), built with ghc 6.10
- haskell sources HS, buildable against ghc 6.10, but currently
   using ghc 6.11 (6.10 has been replaced and is no longer installed)
=> GAC can't process HS

current workarounds

- rebuild GAC with ghc 6.11, which might not be possible
   if the ghc api details have changed (which is usually the
   reason for changing ghc versions), and leads to one version
   of each GAC per ghc installation
- rebuild the libraries that HS depends on with ghc 6.10, which depends on keeping all the old ghc versions around as long as there are any ghc api clients that were built with any of them; not to mention that the library code may not be available
   for either 6.10 or 6.11, or may not be trivial to build (think
binary releases and build environments), and that there are now two (or more) versions of HS+build-depends

suggestions

- we've already established that we're in trouble if
   - GAC actually wants to run the code
   - GAC needs to refer to any other details that
       have changed between 6.10 and 6.11
   - HS or its imports don't build with GAC's ghc

- but if that isn't the case:
   - ask ghc 6.11 to explain its .hi files in Haskell terms
       ghc6.11 --show-iface-haskell libdir/*.hi -hsiodir hsi

   - direct ghc-api 6.10 to consult hsi files for missing libs
       GAC +RTS -hsidir hsi

Again, this will not help 6.10 GACs to process sources that depend on features new in 6.11. But I don't see why it wouldn't
allow 6.10 GACs to process sources that haven't changed, just
happen to be hosted over 6.11 now. And I don't see why I should
need more than one version of any (non-rts) ghc api client, either: the latest version should be able to process sources hosted in older
ghc versions.

Take this "typical Haskell project";-)

   -- | 'HelloWorld' module
   module HelloWorld where
   -- | 'main' function
   main = putStrLn "Hello World!"

Any haddock or ghc version should be able to process that,
whether haddock is a ghc api client or not. And that should still
be possible if we import a package that could be built with any
ghc version.

Claus


_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to