Rationale
It can be difficult to manage resource lifetimes, especially when laziness is involved. Simply local scoping can be inadequate. Resource scopes can decouple resource lifetimes from creating scope.
Plan
- Generalize from resource scopes to general scopes (succeed/fail/exit)
- with-open et al make scopes
- Some design work and code has been done
- find it and write it up
Issues
- Consider threads as well as nesting
- How do scopes interact with io! and stm
- Can we hydrate the fork/join tree where we need it?
- How to prevent mess?
- (when-scope :fails ...) et al are very declarative
- but are setting up non-local effects
- potentially leading to wtf when triggered
- is this the right external API?
- any way to ensure correctness
- will we be beset with requests for order control
- Is the nearest enclosing scope always the right one?
- what to do if not
- named scopes
- scopes as args
- what to do if not
Labels: