Composing first-class transactions

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 toward building transactions enables us to construct a model of concurrent, nested, multithreaded transactions, as well as other nontraditional 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.

[1]  Bernhard Humm An extended scheduling mechanism for nested transactions , 1993, Proceedings Third International Workshop on Object Orientation in Operating Systems.

[2]  Jonathan Rees,et al.  The scheme of things: the June 1992 meeting , 1992, LIPO.

[3]  Manuel Fähndrich,et al.  Venari/ML Interfaces and Examples , 1993 .

[4]  Randy Pausch,et al.  Adding input and output to the transactional model , 1988 .

[5]  Lily B. Mummert,et al.  Camelot and Avalon: A Distributed Transaction Facility , 1991 .

[6]  E. B. Moss,et al.  Nested Transactions: An Approach to Reliable Distributed Computing , 1985 .

[7]  Laura M. Haas,et al.  Computation and communication in R*: a distributed database manager , 1984, TOCS.

[8]  Daniel P. Friedman,et al.  Constraining control , 1985, POPL.

[9]  Barbara Liskov,et al.  Guardians and Actions: Linguistic Support for Robust, Distributed Programs , 1983, TOPL.

[10]  Andrew W. Appel,et al.  Debuggable concurrency extensions for standard ML , 1991, PADD '91.

[11]  Henry Lieberman,et al.  A real-time garbage collector based on the lifetimes of objects , 1983, CACM.

[12]  Roger L. Haskin,et al.  Recovery management in QuickSilver , 1988, TOCS.

[13]  Richard P. Gabriel,et al.  Qlisp: An Interim Report , 1989, Workshop on Parallel Lisp.

[14]  Mahadev Satyanarayanan,et al.  Lightweight recoverable virtual memory , 1993, SOSP '93.

[15]  J. Gregory Morrisett,et al.  Adding threads to Standard ML , 1990 .

[16]  Stuart M. Wheater,et al.  A Technical Overview of Arjuna: A System for Reliable Distributed Computing , 1988 .

[17]  David Ungar Generation scavenging: a nondisruptive high performance storage reclamation algorithm , 1984 .

[18]  Jeannette M. Wing,et al.  Inheritance of synchronization and recovery properties in Avalon/C++ , 1988 .

[19]  Paul Rovner Extending Modula-2 to Build Large, Integrated Systems , 1986, IEEE Software.

[20]  David K. Gifford,et al.  Concurrent compacting garbage collection of a persistent heap , 1993, SOSP '93.

[21]  Samuel P. Harbison,et al.  Modula-3 , 1992 .

[22]  Jeannette M. Wing,et al.  Persistence+undoability=transactions , 1992, Proceedings of the Twenty-Fifth Hawaii International Conference on System Sciences.

[23]  Robin Milner,et al.  Definition of standard ML , 1990 .

[24]  J. Gregory Morrisett,et al.  Procs and locks: a portable multiprocessing platform for standard ML of New Jersey , 1993, PPOPP '93.

[25]  Ronald Morrison,et al.  An Approach to Persistent Programming , 1989, Comput. J..