Current ideas
Austin Seipp
mad.one at gmail.com
Tue Nov 25 05:50:35 EST 2008
Hi,
Since LHC's creation, I have been doing a bit of work on it,
mainly cleaning things and replacing things etc. - it's now much
easier to build (with cabal,) has some cleaned up code, and general
improvements over jhc I would say (at this point anyway.)
Here's the current ChangeLog:
http://code.haskell.org/lhc/ChangeLog
Before any sort of announcement (and a version bump,) here are some
things that have been on my mind:
* There could be various improvements in performance and memory usage
just about everywhere. I have some initial profiling results from running
the compiler over 'hello world' here:
http://thoughtpolice.stringsandints.com/code/lhc-tests/hello-world/
The files are:
- lhc.prof & lhc-cc.ps - detailed cost centres - we see about 40%
*total* time and allocation is spent in E.Binary on two different get
routines for Data.Binary.
- lhc-constr.ps & lhc-type.ps - most of the allocation goes to the
S data type used in the lambda lifter/CPR pass, as well as lazy
tuples.
So I think if we can target E.Binary usage, we can possibly cut
down GC and runtime considerably. We may be holding the GC from
Note that these benchmarks were run before I replaced several other
parts of the code and removed a few things, notably replacing DrIFT
with derive - I noticed GC went up to about 61% from the average
58% for DrIFT. I should probably update them.
(Also, GHC HEAD has had recent improvements to the parallel garbage
collector, etc. so I would like to see if running lhc on top of it
would reduce garbage time with -N2 and -threaded.)
* I think we should continue with jhc's goal of sticking with the latest
GHC. I see potential in use in quasi-quoting, for perhaps replacing
the FlagDump, Name and PrimitiveOperators information that was part
of the autoconf build system.
We can easily construct a parser with parsec (or even a
regex lib; the perl scripts for this are in util/) and go from
there; this also replaces another external dependency
and makes cabal life better.
* The region inference algorithm is currently buggy, and code leaks
pretty badly if it runs for a while. If you look here:
http://thoughtpolice.stringsandints.com/code/lhc-tests/bench
and build, loop and startup work fine, but recursive almost immediately
starts gobbling up 800mb+ of memory. This is something to be
addressed for sure.
* Right now the parser is featureful and works, but we may also
be able to swap it out to say, haskell-src-exts.
Pros: way more extensions we can support out of the box, many
probably pretty easily with some knowledge of E and GRIN.
Cons: we lose pragma's entirely, and we must effectively put all
extensions on, all the time.
Losing pragmas is a problem, but it is a TODO on the
haskell-src-exts project, and I'm convinced it could be worked in
there in the interests of making lhc more robust.
I am also not convinced that losing the ability to turn language
extensions off is a particularly bad thing either; with
haskell-src-exts we immediately gain support for a large variety of
extensions making lhc compatible with a much more vast amount of
code immediately; although we will have to implement code for
extensions like associated types, GADTs, etc. etc..
I think contribuing back to haskell-src-exts would probably be a
good idea.
* We definitely need a testsuite - I think a good first suite to
target and fully compile would be nobench.
* We should eliminate the last bits of the old build system; I have just
eliminated cbits as we don't need it, and we need to replace the
Name, Flag and PrimitiveOperator generation routines, because right
now they're generically hard-coded in there.
* There should be something like a LHC commentary. Starting one on
http://lhc.seize.it seems reasonable.
* Should find a way to get lhc's base package on hackage so we can do
'cabal install lhc; cabal install base --lhc'
These are all of my thoughts, I would like feedback from anybody
willing to contribute to the project. I realize all these things are
something of a significant engineering effort, but these are a few
core things that if put in place could greatly help LHC as a compiler
and haskell programmers.
Austin
More information about the Lhc
mailing list