{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:56:06Z","timestamp":1776891366673,"version":"3.51.2"},"reference-count":41,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"5-6","license":[{"start":{"date-parts":[[2008,10,30]],"date-time":"2008-10-30T00:00:00Z","timestamp":1225324800000},"content-version":"unspecified","delay-in-days":59,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2008,9]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    Concurrent programs require high-level abstractions in order to manage complexity and enable compositional reasoning. In this paper, we introduce a novel concurrency abstraction, dubbed\n                    <jats:italic>transactional events<\/jats:italic>\n                    , which combines first-class synchronous message passing events with all-or-nothing transactions. This combination enables simple solutions to interesting problems in concurrent programming. For example, guarded synchronous receive can be implemented as an abstract transactional event, whereas in other languages it requires a non-abstract, non-modular protocol. As another example, three-way rendezvous can be implemented as an abstract transactional event, which is impossible using first-class events alone. Both solutions are easy to code and easy to reason about.\n                  <\/jats:p>\n                  <jats:p>The expressive power of transactional events arises from a sequencing combinator whose semantics enforces an all-or-nothing transactional property \u2013 either both of the constituent events synchronize in sequence or neither of them synchronizes. This sequencing combinator, along with a non-deterministic choice combinator, gives transactional events the compositional structure of a monad-with-plus. We provide a formal semantics for transactional events and give a detailed account of an implementation.<\/jats:p>","DOI":"10.1017\/s0956796808006916","type":"journal-article","created":{"date-parts":[[2008,10,30]],"date-time":"2008-10-30T06:14:57Z","timestamp":1225347297000},"page":"649-706","source":"Crossref","is-referenced-by-count":16,"title":["Transactional events"],"prefix":"10.46298","volume":"18","author":[{"given":"KEVIN","family":"DONNELLY","sequence":"first","affiliation":[]},{"given":"MATTHEW","family":"FLUET","sequence":"additional","affiliation":[]}],"member":"25203","published-online":{"date-parts":[[2008,10,30]]},"reference":[{"key":"S0956796808006916_ref39","volume-title":"Advanced Functional Programming","author":"Wadler","year":"1995"},{"key":"S0956796808006916_ref35","doi-asserted-by":"publisher","DOI":"10.1145\/507635.507655"},{"key":"S0956796808006916_ref40","first-page":"519","volume-title":"Proceedings of the Eighteenth European Conference on Object-Oriented Programming (ECOOP'04)","author":"Welc","year":"2004"},{"key":"S0956796808006916_ref25","first-page":"122","volume-title":"Proceedings of the Third International Workshop on Higher Order Operational Techniques in Semantics (HOOTS'99)","author":"Moran","year":"1999"},{"key":"S0956796808006916_ref16","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.1995.523261"},{"key":"S0956796808006916_ref11","doi-asserted-by":"crossref","first-page":"14","DOI":"10.1145\/1133981.1133984","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'06)","author":"Harris","year":"2006"},{"key":"S0956796808006916_ref31","doi-asserted-by":"publisher","DOI":"10.1145\/158511.158524"},{"key":"S0956796808006916_ref23","doi-asserted-by":"publisher","DOI":"10.1016\/0890-5401(91)90052-4"},{"key":"S0956796808006916_ref34","doi-asserted-by":"publisher","DOI":"10.1145\/1086365.1086378"},{"key":"S0956796808006916_ref7","unstructured":"Grossman Dan . (April 2006) Software Transactions are to Concurrency as Garbage Collection is to Memory Management. Tech. Rept. 2006-04-01. University of Washington, Department of Computer Science & Engineering."},{"key":"S0956796808006916_ref22","first-page":"14","volume-title":"Proceedings of the Fifth Annual IEEE Symposium on Logic in Computer Science (LICS'89)","author":"Moggi","year":"1989"},{"key":"S0956796808006916_ref26","volume-title":"Nested Transactions: An Approach to Reliable Distributed Computing","author":"Moss","year":"1985"},{"key":"S0956796808006916_ref24","unstructured":"MonadPlus. (2005) http:\/\/www.haskell.org\/hawiki\/MonadPlus."},{"key":"S0956796808006916_ref20","doi-asserted-by":"publisher","DOI":"10.1109\/RTSS.2005.34"},{"key":"S0956796808006916_ref10","first-page":"48","volume-title":"Proceedings of the Tenth ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP'05)","author":"Harris","year":"2005"},{"key":"S0956796808006916_ref12","first-page":"289","volume-title":"Proceedings of the 20th Annual International Symposium on Computer Architecture (ISCA'93)","author":"Herlihy","year":"1993"},{"key":"S0956796808006916_ref21","first-page":"274","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'01)","author":"Marlow","year":"2001"},{"key":"S0956796808006916_ref38","doi-asserted-by":"publisher","DOI":"10.1145\/232627.232645"},{"key":"S0956796808006916_ref29","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237794"},{"key":"S0956796808006916_ref41","doi-asserted-by":"publisher","DOI":"10.1145\/1159803.1159822"},{"key":"S0956796808006916_ref18","unstructured":"Karlsen Einar . (1997) The UniForM Concurrency ToolKit and its extensions to Concurrent Haskell. In The Glasgow Functional Programming Workshop (GFPW)."},{"key":"S0956796808006916_ref9","first-page":"49","volume-title":"Proceedings of the ACM SIGPLAN Workshop on Haskell","author":"Harris","year":"2005"},{"key":"S0956796808006916_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/351240.351258"},{"key":"S0956796808006916_ref5","first-page":"61","volume-title":"User Interface Software","author":"Gasner","year":"1993"},{"key":"S0956796808006916_ref3","doi-asserted-by":"publisher","DOI":"10.1145\/1159803.1159821"},{"key":"S0956796808006916_ref30","doi-asserted-by":"crossref","first-page":"25","DOI":"10.1145\/301618.301637","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'99)","author":"Peyton Jones","year":"1999"},{"key":"S0956796808006916_ref19","doi-asserted-by":"publisher","DOI":"10.1145\/1086365.1086390"},{"key":"S0956796808006916_ref28","first-page":"47","volume-title":"Engineering Theories of Software Construction","author":"Peyton Jones","year":"2001"},{"key":"S0956796808006916_ref32","first-page":"133","article-title":"A concurrent window system","volume":"2","author":"Pike","year":"1989","journal-title":"Comput. Syst."},{"key":"S0956796808006916_ref37","doi-asserted-by":"publisher","DOI":"10.1007\/s004460050028"},{"key":"S0956796808006916_ref2","volume-title":"Concurrent Programming in Erlang","author":"Armstrong","year":"1996"},{"key":"S0956796808006916_ref13","first-page":"82","volume-title":"Proceedings of the Workshop on Memory System Performance and Correctness (MSPC'06)","author":"Hindman","year":"2006"},{"key":"S0956796808006916_ref4","first-page":"47","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'04)","author":"Flatt","year":"2004"},{"key":"S0956796808006916_ref6","unstructured":"Glasgow Haskell Compiler (version 6.6). (2006) http:\/\/www.haskell.org\/ghc."},{"key":"S0956796808006916_ref33","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511574962"},{"key":"S0956796808006916_ref27","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4612-2274-3_2"},{"key":"S0956796808006916_ref15","doi-asserted-by":"publisher","DOI":"10.1145\/359576.359585"},{"key":"S0956796808006916_ref1","doi-asserted-by":"crossref","first-page":"26","DOI":"10.1145\/1133981.1133985","volume-title":"Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'06)","author":"Adl-Tabatabai","year":"2006"},{"key":"S0956796808006916_ref36","volume-title":"The \u03c0-Calculus: A Theory of Mobile Processes","author":"Sangiorgi","year":"2001"},{"key":"S0956796808006916_ref8","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949340"},{"key":"S0956796808006916_ref17","volume-title":"Proceedings of the Eleventh Conference on the Mathematical Foundations of Programming Semantics (MFPS XI)","author":"Jeffrey","year":"1995"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796808006916","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:19:11Z","timestamp":1776889151000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796808006916\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,9]]},"references-count":41,"journal-issue":{"issue":"5-6","published-print":{"date-parts":[[2008,9]]}},"alternative-id":["S0956796808006916"],"URL":"https:\/\/doi.org\/10.1017\/s0956796808006916","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2008,9]]}}}