[Haskell-cafe] Re: Bulletproof resource management
Ben Franksen
ben.franksen at online.de
Fri Oct 8 14:37:24 EDT 2010
Florian Weimer wrote:
> At least in my experience, in order to get proper resource management
> for things like file or database handles, you need both a close
> operation and a finalizer registered with the garbage collector. The
> former is needed so that you can create resources faster than the
> garbage collector freeing them. The latter is a safety net in cases
> where proper resource management is not follwoed (perhaps in GHCi).
> When the explicit close operation or the finalizer has been invoked,
> the object must somehow be disabled, so that further operations on it
> fail (otherwise, you might dereference a dangling pointer).
>
> What's the idom for implementing this in Haskell (or GHC)? It seems
> that a ForeignPtr cannot be written to (otherwise I'd change it to a
> null pointer when the resource is freed). It's also not possible to
> check if the finalizers have been run.
>
> Can the finalizers hold a reference to the object which in turn holds
> the ForeignPtr to be finalized? Or would that prevent the finalizers
> from running at all? Is there a way to avoid the extra level of
> indirection (or is GHC sufficiently smart to optimize it away)?
You might be interested in Lightweight Monadic Regions
http://okmij.org/ftp/Haskell/regions.html#light-weight
which solve the problem (IMHO) in a much cleaner way, i.e. w/o explicit
closing and also w/o using finalizers.
Cheers
Ben
More information about the Haskell-Cafe
mailing list