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

Bulat Ziganshin bulat.ziganshin at gmail.com
Wed Apr 16 02:25:44 EDT 2008


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



More information about the Haskell-Cafe mailing list