[Haskell-cafe] Memory Management and Lists

Will Yager will.yager at gmail.com
Thu Jul 14 17:50:18 UTC 2016


See http://comments.gmane.org/gmane.comp.lang.haskell.libraries/18980

The W part of RWS is bad for performance. Best approach is to implement R, W, and S using a strict StateT. 

Will

> On Jul 14, 2016, at 11:43, Lian Hung Hon <hon.lianhung at gmail.com> wrote:
> 
> I faced the same problem in an RWS monad, where adding a print to the evalRWS resolves the space leak. Obviously, it's not very elegant to clutter the output. I tried the unsafeInterleaveIO (works sometimes), seq/deepseq (works on Windows but not on Linux??), strictness annotations (didn't seem to help at all?), but finally settled on using pipes/conduit. It's remarkable how a streaming library is more practical than the language's core feature - laziness.
> 
>> On 14 July 2016 at 16:32, Matthew Bray <mattjbray at gmail.com> wrote:
>> https://www.schoolofhaskell.com/user/edwardk/snippets/once
>> 
>> Cool trick :)
>> 
>>> On Thu, 14 Jul 2016 at 08:56 Tom Ellis <tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> wrote:
>>> Yes, this is a very neat trick and very effective.  (I couldn't acutally
>>> find it on Hoogle.  Does anyone have a link?)
>>> 
>>> On Thu, Jul 14, 2016 at 07:45:33AM +0000, Robin Palotai wrote:
>>> > For deepseq also see the"Once trick". I'm surprised it's not quoted more
>>> > often. In fact our would make sense to mention it in the deepseq docs.
>>> >
>>> > On Wed, Jul 13, 2016, 21:32 David Feuer <david.feuer at gmail.com> wrote:
>>> >
>>> > > You have to be careful with deepseq. Using it in the wrong place can
>>> > > lead to very bad performance. It's a big hammer. Its blow can
>>> > > sometimes be softened using the NF type from the nf package, but it's
>>> > > really not the right thing most of the time.
>>> > >
>>> > > On Tue, Jul 12, 2016 at 11:56 PM, William Yager <will.yager at gmail.com>
>>> > > wrote:
>>> > > > You probably want Control.DeepSeq. No extraneous work doing addition that
>>> > > > way either.
>>> > > >
>>> > > > Will
>>> > > >
>>> > > > On Tue, Jul 12, 2016 at 11:28 PM, Christopher Howard <ch.howard at zoho.com
>>> > > >
>>> > > > wrote:
>>> > > >>
>>> > > >> After pondering this problem some more, I found a solution to the
>>> > > >> problem was to introduce strictness, not deep down in the StateReader
>>> > > >> monad, but rather at the top level, i.e., forcing evaluation of each
>>> > > >> Matrix as soon as it is pulled of the list of Matrices. I found I could
>>> > > >> do this simply by summing all the elements in each matrix and printing
>>> > > >> the sum to std out. With this approach, i successfully run the full
>>> > > >> program and never even saw my memory performance graph move up.
>>> > > >>
>>> > > >> I suppose there might be a way to do the same thing more efficiently
>>> > > >> with seq...?
>>> > > >>
>>> > > >> On 07/12/2016 06:39 PM, Christopher Howard wrote:
>>> > > >> > I guess I was hesitating on posting the entire program source code in
>>> > > an
>>> > > >> > cafe email. I suppose I could send you a tarball, if you really wanted
>>> > > >> > it...
>>> > > >> >
>>> > > >> > Matrix is from Data.Matrix
>>> > > >> >
>>> > > >> > <
>>> > > http://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html>.
>>> > > >> >
>>> > > >> > It is hard to understand how thunks alone would explain it... there
>>> > > >> > would be at most 2000 thunks, right? Unless... Could there be a thunk
>>> > > >> > for every single call to getElem? That would be a lot of thunks!
>>> > > >> >
>>> > > >> > Somebody suggested adding some strictness here... could you elaborate
>>> > > on
>>> > > >> > that? I tried inserting seq, but I didn't really understand how I was
>>> > > >> > supposed to use it...
>>> > > >> >
>>> > > >>
>>> > > >> --
>>> > > >> http://qlfiles.net
>>> > > >> To protect my privacy, please use PGP encryption. It's free and easy
>>> > > >> to use! My public key ID is 0x340EA95A (pgp.mit.edu).
>>> > > >>
>>> > > >> _______________________________________________
>>> > > >> Haskell-Cafe mailing list
>>> > > >> To (un)subscribe, modify options or view archives go to:
>>> > > >> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> > > >> Only members subscribed via the mailman list are allowed to post.
>>> > > >
>>> > > >
>>> > > >
>>> > > > _______________________________________________
>>> > > > Haskell-Cafe mailing list
>>> > > > To (un)subscribe, modify options or view archives go to:
>>> > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> > > > Only members subscribed via the mailman list are allowed to post.
>>> > > _______________________________________________
>>> > > Haskell-Cafe mailing list
>>> > > To (un)subscribe, modify options or view archives go to:
>>> > > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> > > Only members subscribed via the mailman list are allowed to post.
>>> 
>>> > _______________________________________________
>>> > Haskell-Cafe mailing list
>>> > To (un)subscribe, modify options or view archives go to:
>>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> > Only members subscribed via the mailman list are allowed to post.
>>> 
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> To (un)subscribe, modify options or view archives go to:
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>> Only members subscribed via the mailman list are allowed to post.
>> 
>> _______________________________________________
>> Haskell-Cafe mailing list
>> To (un)subscribe, modify options or view archives go to:
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> Only members subscribed via the mailman list are allowed to post.
> 
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160714/c1a1eb23/attachment.html>


More information about the Haskell-Cafe mailing list