I comment previously on a draft version of this paper. In this 'final' version the authors have removed the wrapper function which converted predicates (
:: STM a -> STM Bool) into actions that raise exceptions when the invariant doesn't hold (:: STM a -> STM ()) leaving the interface a little more consistent.They have extended the STM monad to use phantom types to restrict the operations an STM action can perform (
ReadOnly or Full) to help restrict the side effects of invariants. Another addition is support for invariants over pairs of states: the state before the transaction began, and the state about to be committed. This is accomplished with a new primitive: old :: STM a -> STM a which executes an STM action in the state as it was when the current transaction began. Finally, there is some new discussion of drawing on the work in databases where a distinction is made between A good paper made even better!
LtU | Del.icio.us
No comments:
Post a Comment