{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:42Z","timestamp":1779836742730,"version":"3.53.1"},"reference-count":34,"publisher":"Cambridge University Press (CUP)","issue":"2","license":[{"start":{"date-parts":[[2010,3,19]],"date-time":"2010-03-19T00:00:00Z","timestamp":1268956800000},"content-version":"unspecified","delay-in-days":18,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2010,3]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    Transient faults that arise in large-scale software systems can often be repaired by reexecuting the code in which they occur. Ascribing a meaningful semantics for safe reexecution in multithreaded code is not obvious, however. For a thread to reexecute correctly a region of code, it must ensure that all other threads that have witnessed its unwanted effects within that region are also reverted to a meaningful earlier state. If not done properly, data inconsistencies and other undesirable behavior might result. However, automatically determining what constitutes a consistent global checkpoint is not straightforward because thread interactions are a dynamic property of the program. In this paper, we present a safe and efficient checkpointing mechanism for Concurrent ML (CML) that can be used to recover from transient faults. We introduce a new linguistic abstraction, called\n                    <jats:italic>stabilizers<\/jats:italic>\n                    , that permits the specification of per-thread monitors and the restoration of globally consistent checkpoints. Safe global states are computed through lightweight monitoring of communication events among threads (e.g., message-passing operations or updates to shared variables). We present a formal characterization of its design, and provide a detailed description of its implementation within MLton, a whole-program optimizing compiler for Standard ML. Our experimental results on microbenchmarks as well as several realistic, multithreaded, server-style CML applications, including a web server and a windowing toolkit, show that the overheads to use stabilizers are small, and lead us to conclude that they are a viable mechanism for defining safe checkpoints in concurrent functional programs.\n                  <\/jats:p>","DOI":"10.1017\/s0956796810000067","type":"journal-article","created":{"date-parts":[[2010,3,19]],"date-time":"2010-03-19T07:28:26Z","timestamp":1268983706000},"page":"137-173","source":"Crossref","is-referenced-by-count":8,"title":["Lightweight checkpointing for concurrent ML"],"prefix":"10.1017","volume":"20","author":[{"given":"LUKASZ","family":"ZIAREK","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"SURESH","family":"JAGANNATHAN","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2010,3,19]]},"reference":[{"key":"S0956796810000067_ref13","doi-asserted-by":"crossref","first-page":"103","DOI":"10.1145\/1411204.1411222","volume-title":"Proceedings of the 13th ACM SIGPLAN International Conference on Functional Programming","author":"Effinger-Dean","year":"2008"},{"key":"S0956796810000067_ref5","doi-asserted-by":"crossref","first-page":"235","DOI":"10.1145\/1024393.1024421","volume-title":"Proceedings of the 11th International Conference on Architectural Support for Programming Languages And Operating Systems","author":"Bronevetsky","year":"2004"},{"key":"S0956796810000067_ref10","first-page":"349","volume-title":"Database Transaction Models for Advanced Applications","author":"Chrysanthis","year":"1992"},{"key":"S0956796810000067_ref7","first-page":"3","volume-title":"Proceedings of the 6th ACM Symposium on Operating Systems Design and Implementation","author":"Candea","year":"2004"},{"key":"S0956796810000067_ref4","first-page":"84","volume-title":"Proceedings of the 9th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming","author":"Bronevetsky","year":"2003"},{"key":"S0956796810000067_ref2","doi-asserted-by":"crossref","first-page":"277","DOI":"10.1145\/1006209.1006248","volume-title":"Proceedings of the 18th Annual International Conference on Supercomputing","author":"Agarwal","year":"2004"},{"key":"S0956796810000067_ref22","volume-title":"Proceedings of the 21st International Conference on Distributed Computing Systems","author":"Kasbekar","year":"2001"},{"key":"S0956796810000067_ref8","first-page":"1","volume-title":"Proceedings of the 1997 ACM\/IEEE Conference on Supercomputing","author":"Chen","year":"1997"},{"key":"S0956796810000067_ref12","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006916"},{"key":"S0956796810000067_ref9","first-page":"28","volume-title":"Proceedings of the 9th ACM SIGPLAN International Conference on Functional Programming","author":"Christiansen","year":"2004"},{"key":"S0956796810000067_ref1","doi-asserted-by":"publisher","DOI":"10.1145\/568271.223787"},{"key":"S0956796810000067_ref29","doi-asserted-by":"publisher","DOI":"10.1145\/190.357398"},{"key":"S0956796810000067_ref6","first-page":"209","volume-title":"Proceedings of the 32nd ACM SIGPLAN Symposium on Principles of Programming Languages","author":"Bruni","year":"2005"},{"key":"S0956796810000067_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/568522.568525"},{"key":"S0956796810000067_ref15","first-page":"195","volume-title":"Proceedings of the 32nd ACM SIGPLAN Symposium on Principles of Programming Languages","author":"Field","year":"2005"},{"key":"S0956796810000067_ref20","first-page":"92","volume-title":"Proceedings of the ACM Conference on Principles of Distributed Computing","author":"Herlihy","year":"2003"},{"key":"S0956796810000067_ref16","doi-asserted-by":"publisher","DOI":"10.1145\/996841.996849"},{"key":"S0956796810000067_ref30","first-page":"1","volume-title":"Proceedings of the 1990 ACM Conference on LISP and Functional Programming","author":"Tolmach","year":"1990"},{"key":"S0956796810000067_ref19","first-page":"48","volume-title":"Proceedings of the 10th ACM SIGPLAN Conference on Principles and Practice of Parallel Programming","author":"Harris","year":"2005"},{"key":"S0956796810000067_ref17","volume-title":"Transaction Processing","author":"Gray","year":"1993"},{"key":"S0956796810000067_ref18","first-page":"388","volume-title":"Proceedings of the ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages, and Applications","author":"Harris","year":"2003"},{"key":"S0956796810000067_ref26","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9780511574962"},{"key":"S0956796810000067_ref21","first-page":"24","volume-title":"Proceedings of the 4th International Workshop on Object-Orientation in Operating Systems","author":"Hulse","year":"1995"},{"key":"S0956796810000067_ref23","doi-asserted-by":"publisher","DOI":"10.1145\/319566.319567"},{"key":"S0956796810000067_ref31","doi-asserted-by":"publisher","DOI":"10.1145\/122759.122770"},{"key":"S0956796810000067_ref24","first-page":"79","volume-title":"Proceedings of the ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming","author":"Li","year":"1990"},{"key":"S0956796810000067_ref25","first-page":"378","volume-title":"Proceedings of the 32nd ACM SIGPLAN Symposium on Principles of Programming Languages","author":"Manson","year":"2005"},{"key":"S0956796810000067_ref11","first-page":"224","volume-title":"Proceedings of the 29th Annual International Symposium on Fault-Tolerant Computing","author":"Dieter","year":"1999"},{"key":"S0956796810000067_ref27","doi-asserted-by":"publisher","DOI":"10.1145\/329466.329486"},{"key":"S0956796810000067_ref3","volume-title":"Compiler-Assisted Checkpointing","author":"Beck","year":"1994"},{"key":"S0956796810000067_ref28","first-page":"92","volume-title":"Proceedings of the 10th ACM SIGPLAN International Conference on Functional Programming","author":"Ringenburg","year":"2005"},{"key":"S0956796810000067_ref32","first-page":"519","volume-title":"Proceedings of the European Conference on Object-Oriented Programming","author":"Welc","year":"2004"},{"key":"S0956796810000067_ref33","doi-asserted-by":"crossref","first-page":"439","DOI":"10.1145\/1094811.1094845","volume-title":"Proceedings of the 20th ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications","author":"Welc","year":"2005"},{"key":"S0956796810000067_ref34","doi-asserted-by":"crossref","first-page":"161","DOI":"10.1145\/1596550.1596575","volume-title":"Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming","author":"Ziarek","year":"2009"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796810000067","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:21Z","timestamp":1779834981000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796810000067\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2010,3]]},"references-count":34,"journal-issue":{"issue":"2","published-print":{"date-parts":[[2010,3]]}},"alternative-id":["S0956796810000067"],"URL":"https:\/\/doi.org\/10.1017\/s0956796810000067","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2010,3]]}}}