[Haskell-cafe] Ord methods too strict?

Viktor Dukhovni ietf-dane at dukhovni.org
Fri Jan 4 17:00:17 UTC 2019


> On Jan 4, 2019, at 11:47 AM, Sven Panne <svenpanne at gmail.com> wrote:
> 
> You *will* leak space if you keep an unevaluated argument around for a long time, there is nothing any implementation can really do about it: It can't know for sure if you will eventually throw away that argument or (partially) evaluate it. Sometimes the optimizer (e.g. via strictness analysis) can help, but not in the general case. So making an argument lazier is not a no-brainer, quite the opposite...

Only if it is repeatedly used in ever deeper unevaluated expressions,
such as repeatedly incrementing an IORef counter, without ever forcing
the value.

In the case of a lazy function ignoring its argument, no space is leaked
unless that argument is retained elsewhere, and the function was the sole
means of forcing the value.  Unreferenced unevaluated thunks get GC'd.
Space leaks require ever deeper chains of unevaluated thunks.

If laziness always leaked Haskell would not work terribly well.  I have
code that runs for ~9 hours in constant memory allocating and freeing
around 13TB of memory over its lifetime.  Various functions it calls
do some lazy evaluation or other, and while in some cases forcing the
values that are sure to get used might reduce GC activity, there's no
space leak.

-- 
	Viktor.



More information about the Haskell-Cafe mailing list