[Haskell-cafe] Exception safe resource management with dynamic regions, call for review
Yuras Shumovich
shumovichy at gmail.com
Sat Feb 14 21:36:09 UTC 2015
Hello,
I'm asking for code and design review for `io-region` library. It is
already on Hackage for convenience and easy access to haddock:
https://hackage.haskell.org/package/io-region
Manual exception handling in Haskell almost never is a good idea, except
probably trivial cases where `bracket` is enough. A number of special
libraries where created to help with exception handling. `io-regions` is
one of them.
Initially it was an attempt to solve the double-throw issue, but I found
it unsolvable in library without changes in language itself. So now it
is an attempt to design easy to use API with a bit different set of
trade-offs.
The library is based on idea of regions that own resources. The
resources are released when the region is closed. Early releasing and
ownership transferring are supported. Types are *not* used to prevent
use-after-free errors.
The API is not monadic, and it is the biggest difference from other
libraries. Regions are first-class citizens, so you can manipulate them,
pass as arguments to functions, send to other thread, store in data
types. Such flexibility has its cost -- a bit more manual management.
The implementation is based on STM and is thread safe, that allows e.g.
atomic ownership transferring between threads.
The nearest competitor I think is `resourset` package, and I still
recommend it by default. Though I convinced myself that `io-region` is
good enough, and I'm using it in productions (for two weeks already :) )
Thanks,
Yuras
More information about the Haskell-Cafe
mailing list