[Haskell-cafe] GC'ing file handles and other resources

Abhay Parvate abhay.parvate at gmail.com
Wed Apr 16 03:43:08 EDT 2008


Thanks, both for the summary and for the link. Will try to go through it.

Regards,
Abhay

On Wed, Apr 16, 2008 at 12:37 PM, Bulat Ziganshin <bulat.ziganshin at gmail.com>
wrote:

> Hello Abhay,
>
> Wednesday, April 16, 2008, 10:51:07 AM, you wrote:
>
> > I am not saying that it should claim it as soon as it is unused;
> > all I am saying that as soon as a priority object becomes
> > unreferenced, it should be the first choice for collecting in the next
> collect.
>
> on the GC, all unreferenced objects are collected. there is no
> difference which ones will be collected first - anyway program is
> stopped until whole GC will be finished
>
> > Further I was under the impression (I may be wrong) that it uses a
> > generational GC and therefore scans allocated memory incrementally;
> > not the whole at a time. Please correct me if I am wrong.
>
> yes, it uses generational GC. data are first allocated in small 256k block
> and when it is filled, GC for this small block occurs. data that are
> still alive then moved to the global heap. this minor GC doesn't scan
> global heap. if it will do this, each minor GC will become as slow as
> major ones
>
> "Generational garbage collection for Haskell"
> http://research.microsoft.com/~simonpj/Papers/gen-gc-for-haskell.ps.gz<http://research.microsoft.com/%7Esimonpj/Papers/gen-gc-for-haskell.ps.gz>
>
> >
> > Regards,
> > Abhay
>
> > On Wed, Apr 16, 2008 at 11:55 AM, Bulat Ziganshin
> > <bulat.ziganshin at gmail.com> wrote:
> >  Hello Abhay,
> >
> >  Wednesday, April 16, 2008, 9:30:34 AM, you wrote:
> >
> >  i think it will not work with current ghc GC - it scans entire
> >  memory/nursery when garbage collected so anyway you will need to wait
> >  until next GC event occurs
> >
>
>  >> Your mail gives me an idea, though I am not an iota familiar with
>  >> compiler/garbage collector internals. Can we have some sort of
>  >> internally maintained priority associated with allocated objects?
>  >> The garbage collector should look at these objects first when it
>  >> tries to free anything. The objects which hold other system
>  >> resources apart from memory, such as file handles, video memory, and
>  >> so on could be allocated as higher priority objects. Is such a thing
> possible?
>  >>
>  >> 2008/4/16 Conal Elliott <conal at conal.net>:
>  >>  Are Haskell folks satisfied with the practical necessity of
>  >> imperatively & explicitly reclaiming resources such as file handles,
>  >> fonts & brushes, video memory chunks, etc?  Doesn't explicit freeing
>  >> of these resources have the same modularity and correctness problems
>  >> as explicit freeing of system memory (C/C++ programming)?
>  >>
>  >> I wrote a lovely purely functional graphics library that used video
>  >> memory to lazily compute and cache infinite-resolution images, and I
>  >> found that I don't know how to get my finalizers to run anytime soon
>  >> after video memory chunks become inaccessible.  Explicit freeing
>  >> isn't an option, since the interface is functional, not imperative
> (IO).
>  >>
>  >> I guess I'm wondering a few things:
> >
>  >> * Are Haskell programmers generally content with imperative and
>  >> bug-friendly interfaces involving explicit freeing/closing of
> resources?
>  >> * Do people assume that these resources (or handling them frugally)
>  >> aren't useful in purely functional interfaces?
>  >>  * Are there fundamental reasons why GC algorithms cannot usefully
>  >> apply to resources like video memory, file descriptors, etc?
>  >> * Are there resource management techniques that have the
>  >> flexibility, efficiency, and accuracy of GC that I could be using for
> these other resources?
>  >>
>  >> Thanks,
>  >>   - Conal
> >
>  >> 2008/4/14 Abhay Parvate <abhay.parvate at gmail.com>:
>  >>  Hello,
> >
>  >> In describing the Handle type, the GHC documentation says (in the
> System.IO documentation):
> >
>  >> GHC note: a Handle will be automatically closed when the garbage
>  >> collector detects that it has become unreferenced by the program.
>  >> However, relying on this behaviour is not generally recommended:
>  >> the garbage collector is unpredictable.  If possible, use explicit
>  >> an explicit hClose to close Handles when they are no longer
>  >> required.  GHC does not currently attempt to free up file
>  >> descriptors when they have run out, it is your responsibility to
>  ensure that this doesn't happen.
> >
>  >> But one cannot call hClose on Handles on which something like
>  >> hGetContents has been called; it just terminates the character list
>  >> at the point till which it has already read. Further the manual says
>  >> that hGetContents puts the handle in the semi-closed state, and
> further,
>  >>
>  >> A semi-closed handle becomes closed:
>  >>  if hClose is applied to it;  if an I/O error occurs when reading
>  >> an item from the handle;  or once the entire contents of the handle
> has been read.
>  >> So do I safely assume here, according to the third point above,
>  >> that it's fine if I do not call hClose explicitly as far as I am
>  >> consuming all the contents returned by hGetContents?
> >
>  >> Thanks,
>  >> Abhay
>  >>
>  >> _______________________________________________
>  >>  Haskell-Cafe mailing list
>  >>  Haskell-Cafe at haskell.org
>  >>  http://www.haskell.org/mailman/listinfo/haskell-cafe
>  >>
> >
> >
>  >>
>  >> _______________________________________________
>  >>  Haskell-Cafe mailing list
>  >>  Haskell-Cafe at haskell.org
>  >>  http://www.haskell.org/mailman/listinfo/haskell-cafe
>  >>
> >
> >
>  >>
> >
> >
> >
> > --
> >  Best regards,
> >   Bulat                            mailto:Bulat.Ziganshin at gmail.com
> >
> >
>
> >
>
>
> --
> Best regards,
>  Bulat                            mailto:Bulat.Ziganshin at gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080416/aab4b95e/attachment.htm


More information about the Haskell-Cafe mailing list