[ANNOUNCE] Shaking up GHC
Tuncer Ayaz
tuncer.ayaz at gmail.com
Sat Jan 23 16:58:12 UTC 2016
On 23 January 2016 at 14:05, Andrey Mokhov wrote:
> The simplest way is to add the 'shake-build' folder to the GHC tree
> and ask first adopters of the new build system to globally install
> the dependencies (ansi-terminal, mtl, shake, QuickCheck). Then
> 'build.sh' and 'build.bat' scripts should work.
>
> I am open to suggestions on how to make this more convenient and
> robust. I've never used anything more advanced than a global cabal
> installation, so I'd appreciate input from more experienced users.
>
> Could you create a ticket on github suggesting possible
> approaches? I'm afraid our discussion may get lost in ghc-devs
> mailing list.
My suggestion, and what I'd expect, is to make Shake part of GHC's
included lib, just like process or xhtml.
Neil said this can be a maintenance burden, and I'm aware of that
argument, but the bundled libs ghc depends on are not maintained by
ghc devs and merely included as known-to-work versions to go with the
ghc release as well.
Why do I want this?
a1) Want to use Shake? Install GHC via OS pkg mgr or prebuilt binary
tarball, and be done. This way, telling potential users migrating
from Makefile(s) to Shake is as easy as "Install ghc-8.0". Anyone
who needs a different Shake version can, as it's done right now
with cabal(-install), install Cabal+cabal-install as a 2nd
dependency. So, anybody that that wants to use Shake instead of
make, can just install ghc itself. That's a very minimal set of
requirements and steps, compared to installing Shake after first
getting ghc.
a2) Like what Xmonad has done for custom window management, Shake can
be that for build scripts that are written in one language,
compared to Ninja, where it's meant to be generated from something
else. Requiring just ghc and nothing else, is easier to sell,
given how easy it has been dependency-wise (breakage, etc.) to
install ghc on various Linux or BSD distros I've tried it on.
a3) As an extension of (a2), it's preferable to write build scripts in
Haskell than Guile Scheme, and anything we can do to make that
easier is a good thing. We don't want to move m4+(auto)make+sh to
Scheme, where it's arguably easier to publish broken scripts due
to the dynamic nature them.
Why do I think it's not a big deal to do it this way?
b1) Seeing how Shake is needed to build ghc itself, Edward's working
on using it in ghc --make, and both cabal and stack devs are
looking into reusing Shake, it makes a whole lot of sense to not
make it an extra dependency.
b2) The way I see it, relying on Alex and Happy is, for instance,
different, as those are usable as plain executable without a
Haskell library. So, by keeping Shake bundled like xhtml or
process, we'd not add external dependencies that need ghc and
maybe cabal/stack to be built.
b3) Just like everyone is free to use a newer xhtml, regardless of
what's bundled with a ghc release, nothing prevents you from
installing a newer Shake than what's in the ghc release. Thus, I
don't think we'd have to make it ghc-private.
More information about the ghc-devs
mailing list