On 13/05/2011 19:55, Neil Mitchell wrote:
Hi
We've talked before about the need to bootstrap occasionally, which as I
understand was one of the reasons for using make. I agree that something
like Neil's Shake system would be nice if it didn't require a working
Haskell implementation to build the driver.
With Shake, it's possible to run it single threaded and dump a list of
all system commands performed. With a little bit of care (you couldn't
use your Haskell Shake code to query the global environment in
non-obvious ways), this could be used as the initial bootstrap. It's
not been done before, but I see no reason it won't work.
I hate working on build systems as much as the next person, but I'm also
conscious of the fact that the YHC basically died under the weight of its
broken build system. I don't think that'll happen with GHC, but it is still
causing me acute pain.
Yhc died because of build system choice, but I'm sure that won't
happen to GHC - it will just suck away fun and valuable Haskell
hacking time. But Shake has other benefits, such as profiling. With
detailed profile statistics about your build system you can usually
make sensible modifications and get some build time performance
improvement. Similarly, I'm sure Shake would increase the parallelism
of the build.
I remember you made that claim before, but I don't remember the
reasoning for it - why do you think there's more parallelism to be
extracted? As far as I know we already give make a pretty accurate
dependency graph, the only place where we are a bit innaccurate is in
the dependencies between the configure steps for packages, but those are
quite a small part of the overall build time. Oh, and we could
calcualte dependencies on Haskell source files individually rather than
all at once, but that really only impacts rebuilds, and it could be fixed.
Perhaps make's scheduling algorithm is suboptimal for our graph. I seem
to recall Shake does some kind of random scheduling, is that right?
Cheers,
Simon
_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc