[Haskell-cafe] Re: Looking for the fastest Haskell primes

Daniel Fischer daniel.is.fischer at web.de
Thu Apr 16 05:05:53 EDT 2009


Am Donnerstag 16 April 2009 10:41:43 schrieb Niemeijer, R.A.:
> Heinrich Apfelmus wrote:
> > +1 except that exporting the potentially infinite list of primes is
> > problematic in that it may become a memory leak.
> >
> > I'd suggest to export two versions
> >
> >   primes  :: [Integer]
> >   primes' :: () -> [Integer]
> >
> > for casual (i.e. throwaway program to solve a Project Euler problem) and
> > for memory aware use respectively.
>
> I'm afraid I don't quite follow. Would you mind explaining what the first
> parameter is for and how it would solve the memory leak?

If your programme uses primes some time early and again at the end, the list of primes 
(calculated so far) is kept in memory, because it's a top level constant (CAF). If you 
don't need the primes in between, calculate many of them at the start and use only a few 
at the end, that's a terrible memory-waste. If you don't use primes later, it *may* be 
that they're garbage-collected, but I wouldn't count on it.

primes' is a function, so the list of primes is calculated anew every time you use 
primes' ()
in your programme and garbage collected when the programme leaves that use site.

Which behaviour is desired depends of course on the programme.



More information about the Haskell-Cafe mailing list