[Haskell-cafe] Strange memory consumption problems in something
that should be tail-recursive
Donald Bruce Stewart
dons at cse.unsw.edu.au
Tue Feb 13 17:08:32 EST 2007
duncan.coutts:
> On Tue, 2007-02-13 at 15:27 -0500, Jefferson Heard wrote:
> > Hi, I am running the following code against a 210 MB file in an attempt to
> > determine whether I should use alex or whether, since my needs are very
> > performance oriented, I should write a lexer of my own. I thought that
> > everything I'd written here was tail-recursive
>
> Isn't that exactly the problem - that it's tail recursive? You do not
> want it to be tail recursive since then it must consume the whole input
> before producing any output. You want it to be as lazy as possible so
> that it can start producing tokens as soon as possible without having to
> consume everything.
>
> If performance is really important to you then you may also want to
> investigate lexing from a lazy ByteString. Alex can now do that (darcs
> version) or you can do it by hand as you're trying now.
>
I'd reenforce this point: the only chance for C like performance for
this kind of problem is to use lazy bytestrings, or a combined strict
head, lazy tail approach. Then you can reasonably expect to compete with
C.
Examples on the shootout.
-- Don
More information about the Haskell-Cafe
mailing list