iteratee space leaks after a semantic change to enumPure1Chunk

John Lato jwlato at gmail.com
Wed Nov 2 18:48:12 GMT 2011


Hello,

Apologies for the latency, my main box is in the shop for a warranty repair.

In principle I agree with all your points that this should be reverted
(`darcs rollback` is sufficient), however doing so now breaks
Iteratee.zip.  It should be possible to fix this within Iteratee.zip,
which I should have time to do tomorrow.

On a related matter, does anyone have any suggestions for how to
create testcases for things like memory usage of an executable, or
non-termination (within a timeout interval)?

John

On Mon, Oct 31, 2011 at 8:15 AM, Akio Takano <tkn.akio at gmail.com> wrote:
> Hi,
>
> The program below leaks space when compiled with iteratee-0.8.5.0 or later, but
> it does not with 0.8.4.0
>
> import qualified Data.Iteratee as I
>
> main = I.enumList (replicate 10000000 [True, False]) (I.zip I.head I.last)
>    >>= I.run >>= print
>
> This is due to a change introduced in 0.8.5.0. It is a change of the
> semantics of
> enumPure1Chunk, which is called by zip. It now pushes
> data into an iteratee that is in the done state. Because I.head moves
> to the done state
> after consuming one element, the subsequent part of the stream is
> pushed into it, leading
> to a space leak.
>
> In addition to zip, enumWith suffers from the same problem.
>
> While the change to enumPure1Chunk is marked as a bugfix, i would
> rather expect the old behavior
> because it's more consistent with other enumerators. Most of the
> enumerators in the library
> does early termination, in the sense that it stops feeding data to an
> iteratee as soon as it detects
> that the interatee is in the done state. So I would expect
> enumPure1Chunk to do the same.
> I think it's ok to drop the stream when the iteratee is done, because
> if the user doesn't want to
> drop any information, they can always keep their iteratee in the cont
> state until it sees EOF.
>
> Would it be a choice to change it back to the old one? I'm willing to
> submit a patch in that case.
>
> Regards,
> Takano Akio
>
> _______________________________________________
> Iteratee mailing list
> Iteratee at projects.haskell.org
> http://projects.haskell.org/cgi-bin/mailman/listinfo/iteratee
>



More information about the Iteratee mailing list