Abstract

We describe the design of a transaction facility for a language
that supports higher-order functions.
We factor transactions into four separable
features: persistence, undoability, locking, and threads. Then,
relying on function composition, we show how we can put them together
again. Our modular approach towards building transactions
enables us to construct a model of concurrent, nested, multi-threaded
transactions, as well as other non-traditional models where not all
features of traditional transactions are present.
Key to our approach is the use of higher-order functions
to make transactions first-class.
Not only do we get clean composability of transactional features, but
also we avoid the need to introduce special control and
block-structured constructs as done in more traditional transactional
systems. We implemented our design in Standard ML of New Jersey.