{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,5]],"date-time":"2026-05-05T07:22:25Z","timestamp":1777965745530,"version":"3.51.4"},"reference-count":69,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2021,8,19]],"date-time":"2021-08-19T00:00:00Z","timestamp":1629331200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2021,8,22]]},"abstract":"<jats:p>Emerging persistent memory in commodity hardware allows byte-granular accesses to persistent state at memory speeds. However, to prevent inconsistent state in persistent memory due to unexpected system failures, different write-semantics are required compared to volatile memory. Transaction-based library solutions for persistent memory facilitate the atomic modification of persistent data in languages where memory is explicitly managed by the programmer, such as C\/C++. For languages that provide extended capabilities like automatic memory management, a more native integration into the language is needed to maintain the high level of memory abstraction. It is shown in this paper how persistent software transactional memory (PSTM) can be tightly integrated into the runtime system of Haskell to atomically manage values of persistent transactional data types. PSTM has a clear interface and semantics extending that of software transactional memory (STM). Its integration with the language\u2019s memory management retains features like garbage collection and allocation strategies, and is fully compatible with Haskell's lazy execution model. Our PSTM implementation demonstrates competitive performance with low level libraries and trivial portability of existing STM libraries to PSTM. The implementation allows further interesting use cases, such as persistent memoization and persistent Haskell expressions.<\/jats:p>","DOI":"10.1145\/3473568","type":"journal-article","created":{"date-parts":[[2021,8,19]],"date-time":"2021-08-19T10:44:29Z","timestamp":1629369869000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":2,"title":["Persistent software transactional memory in Haskell"],"prefix":"10.1145","volume":"5","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-0813-1828","authenticated-orcid":false,"given":"Nicolas","family":"Krauter","sequence":"first","affiliation":[{"name":"Johannes Gutenberg University Mainz, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1002-9734","authenticated-orcid":false,"given":"Patrick","family":"Raaf","sequence":"additional","affiliation":[{"name":"Johannes Gutenberg University Mainz, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Peter","family":"Braam","sequence":"additional","affiliation":[{"name":"University of Oxford, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-3786-7102","authenticated-orcid":false,"given":"Reza","family":"Salkhordeh","sequence":"additional","affiliation":[{"name":"Johannes Gutenberg University Mainz, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1974-5956","authenticated-orcid":false,"given":"Sebastian","family":"Erdweg","sequence":"additional","affiliation":[{"name":"Johannes Gutenberg University Mainz, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Andr\u00e9","family":"Brinkmann","sequence":"additional","affiliation":[{"name":"Johannes Gutenberg University Mainz, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2021,8,19]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/103135.103138"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1093\/comjnl\/26.4.360"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/988376.988378"},{"key":"e_1_2_2_4_1","doi-asserted-by":"publisher","DOI":"10.5555\/615224.615226"},{"key":"e_1_2_2_5_1","unstructured":"\u00d6mer S. A\u011facan. 2020. The problem with adding functions to compact regions. https:\/\/www.well-typed.com\/blog\/2020\/03\/functions-in-compact-regions\/  \u00d6mer S. A\u011facan. 2020. The problem with adding functions to compact regions. https:\/\/www.well-typed.com\/blog\/2020\/03\/functions-in-compact-regions\/"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-24276-2_3"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-76637-7_6"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-39893-6_34"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.14778\/3025111.3025122"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/581690.581698"},{"key":"e_1_2_2_11_1","unstructured":"Paul Chiusano. 2020. How Unison reduces ecosystem churn. https:\/\/www.unisonweb.org\/2020\/04\/10\/reducing-churn\/  Paul Chiusano. 2020. How Unison reduces ecosystem churn. https:\/\/www.unisonweb.org\/2020\/04\/10\/reducing-churn\/"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/1950365.1950380"},{"key":"e_1_2_2_14_1","unstructured":"Alberto G. Corona. 2017. TCache: A Transactional cache with user-defined persistence. http:\/\/hackage.haskell.org\/package\/TCache  Alberto G. Corona. 2017. TCache: A Transactional cache with user-defined persistence. http:\/\/hackage.haskell.org\/package\/TCache"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/3210377.3210392"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1457838.1457895"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2592798.2592814"},{"key":"e_1_2_2_18_1","unstructured":"Conal Elliot. 2008. Elegant memoization with functional memo tries. http:\/\/conal.net\/blog\/posts\/elegant-memoization-with-functional-memo-tries  Conal Elliot. 2008. Elegant memoization with functional memo tries. http:\/\/conal.net\/blog\/posts\/elegant-memoization-with-functional-memo-tries"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/1345206.1345241"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1147\/rd.524.0439"},{"key":"e_1_2_2_21_1","unstructured":"Ben Gamari and \u00d6mer Sinan A\u011facan. 2019. COMPACT_NFDATA support for the nonmoving collector. https:\/\/gitlab.haskell.org\/ghc\/ghc\/commit\/77341c734f6c619d281c308b58a0f59b0b032aa2  Ben Gamari and \u00d6mer Sinan A\u011facan. 2019. COMPACT_NFDATA support for the nonmoving collector. https:\/\/gitlab.haskell.org\/ghc\/ghc\/commit\/77341c734f6c619d281c308b58a0f59b0b032aa2"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/3381898.3397214"},{"key":"e_1_2_2_23_1","unstructured":"GHC Team. 2020. The Block Allocator. https:\/\/gitlab.haskell.org\/ghc\/ghc\/-\/wikis\/commentary\/rts\/storage\/block-alloc  GHC Team. 2020. The Block Allocator. https:\/\/gitlab.haskell.org\/ghc\/ghc\/-\/wikis\/commentary\/rts\/storage\/block-alloc"},{"key":"e_1_2_2_24_1","unstructured":"GHC Team. 2020. GHC Commentary: The Layout of Heap Objects. https:\/\/gitlab.haskell.org\/ghc\/ghc\/-\/wikis\/commentary\/rts\/storage\/heap-objects  GHC Team. 2020. GHC Commentary: The Layout of Heap Objects. https:\/\/gitlab.haskell.org\/ghc\/ghc\/-\/wikis\/commentary\/rts\/storage\/heap-objects"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1512762.1512768"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1109\/JPROC.2017.2731776"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/289.291"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4471-3215-8_6"},{"key":"e_1_2_2_29_1","volume-title":"Data Types and Persistence. Edited Papers from the Proceedings of the First Workshop on Persistent Objects","author":"Harper Robert","year":"1985","unstructured":"Robert Harper . 1985. Modules and Persistence in Standard ML . In Data Types and Persistence. Edited Papers from the Proceedings of the First Workshop on Persistent Objects , Appin, Scotland, UK , August 1985 , Malcolm P. Atkinson, Peter Buneman, and Ronald Morrison (Eds.) (Topics in Information Systems). Springer , 21\u201330. Robert Harper. 1985. Modules and Persistence in Standard ML. In Data Types and Persistence. Edited Papers from the Proceedings of the First Workshop on Persistent Objects, Appin, Scotland, UK, August 1985, Malcolm P. Atkinson, Peter Buneman, and Ronald Morrison (Eds.) (Topics in Information Systems). Springer, 21\u201330."},{"key":"e_1_2_2_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065944.1065952"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/872035.872048"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/165123.165164"},{"key":"e_1_2_2_33_1","volume-title":"Performance. In Proceedings of 25th International Conference on Very Large Data Bases (VLDB), September 7-10","author":"Antony","unstructured":"Antony L. Hosking and Jiawan Chen. 1999. PM3: An Orthogonal Persistent Systems Programming Language - Design, Implementation , Performance. In Proceedings of 25th International Conference on Very Large Data Bases (VLDB), September 7-10 , Edinburgh, Scotland, UK. 587\u2013598. Antony L. Hosking and Jiawan Chen. 1999. PM3: An Orthogonal Persistent Systems Programming Language - Design, Implementation, Performance. In Proceedings of 25th International Conference on Very Large Data Bases (VLDB), September 7-10, Edinburgh, Scotland, UK. 587\u2013598."},{"key":"e_1_2_2_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/130697.130699"},{"key":"e_1_2_2_35_1","volume-title":"Zixuan Wang, Yi Xu, Subramanya R. Dulloor, Jishen Zhao, and Steven Swanson.","author":"Izraelevitz Joseph","year":"2019","unstructured":"Joseph Izraelevitz , Jian Yang , Lu Zhang , Juno Kim , Xiao Liu , Amirsaman Memaripour , Yun Joon Soh , Zixuan Wang, Yi Xu, Subramanya R. Dulloor, Jishen Zhao, and Steven Swanson. 2019 . Basic Performance Measurements of the Intel Optane DC Persistent Memory Module. CoRR , abs\/1903.05714 (2019), arxiv:1903.05714 Joseph Izraelevitz, Jian Yang, Lu Zhang, Juno Kim, Xiao Liu, Amirsaman Memaripour, Yun Joon Soh, Zixuan Wang, Yi Xu, Subramanya R. Dulloor, Jishen Zhao, and Steven Swanson. 2019. Basic Performance Measurements of the Intel Optane DC Persistent Memory Module. CoRR, abs\/1903.05714 (2019), arxiv:1903.05714"},{"key":"e_1_2_2_36_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.1993.344067"},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISPASS.2013.6557176"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3037697.3037714"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/1375634.1375637"},{"key":"e_1_2_2_40_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45498-5_22"},{"key":"e_1_2_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3299869.3319870"},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/122501.122504"},{"key":"e_1_2_2_43_1","doi-asserted-by":"publisher","DOI":"10.1109\/IISWC.2008.4636089"},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-59623-0_6"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/3458817.3476180"},{"key":"e_1_2_2_46_1","unstructured":"Sanketh Nalli. 2018. GCC port of TM system Mnemosyne. https:\/\/github.com\/snalli\/mnemosyne-gcc  Sanketh Nalli. 2018. GCC port of TM system Mnemosyne. https:\/\/github.com\/snalli\/mnemosyne-gcc"},{"key":"e_1_2_2_47_1","unstructured":"Luke Palmer. 2013. Data.MemoCombinators: Combinators for building memo tables. https:\/\/hackage.haskell.org\/package\/data-memocombinators  Luke Palmer. 2013. Data.MemoCombinators: Combinators for building memo tables. https:\/\/hackage.haskell.org\/package\/data-memocombinators"},{"key":"e_1_2_2_48_1","volume-title":"Magnetic Domain-Wall Racetrack Memory. Science, 320, 5873","author":"Parkin Stuart S. P.","year":"2008","unstructured":"Stuart S. P. Parkin , Masamitsu Hayashi , and Luc Thomas . 2008. Magnetic Domain-Wall Racetrack Memory. Science, 320, 5873 ( 2008 ), 190\u2013194. Stuart S. P. Parkin, Masamitsu Hayashi, and Luc Thomas. 2008. Magnetic Domain-Wall Racetrack Memory. Science, 320, 5873 (2008), 190\u2013194."},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800000319"},{"key":"e_1_2_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237794"},{"key":"e_1_2_2_51_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45654-6_50"},{"key":"e_1_2_2_52_1","doi-asserted-by":"publisher","DOI":"10.1109\/DSN.2019.00028"},{"key":"e_1_2_2_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/2592798.2592814"},{"key":"e_1_2_2_54_1","doi-asserted-by":"publisher","DOI":"10.1147\/rd.524.0465"},{"key":"e_1_2_2_55_1","unstructured":"Peter Robinson. 2019. concurrent-hashtable: Thread-safe hash tables for multi-cores!. http:\/\/hackage.haskell.org\/package\/concurrent-hashtable  Peter Robinson. 2019. concurrent-hashtable: Thread-safe hash tables for multi-cores!. http:\/\/hackage.haskell.org\/package\/concurrent-hashtable"},{"key":"e_1_2_2_56_1","volume-title":"Persistent Memory Programming. login Usenix Mag., 42, 2","author":"Rudoff Andy","year":"2017","unstructured":"Andy Rudoff . 2017. Persistent Memory Programming. login Usenix Mag., 42, 2 ( 2017 ), https:\/\/www.usenix.org\/publications\/login\/summer2017\/rudoff Andy Rudoff. 2017. Persistent Memory Programming. login Usenix Mag., 42, 2 (2017), https:\/\/www.usenix.org\/publications\/login\/summer2017\/rudoff"},{"key":"e_1_2_2_57_1","doi-asserted-by":"publisher","DOI":"10.1145\/1122971.1123001"},{"key":"e_1_2_2_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/3314221.3314608"},{"key":"e_1_2_2_59_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010000313106"},{"key":"e_1_2_2_60_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF00289243"},{"key":"e_1_2_2_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951944"},{"key":"e_1_2_2_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/1950365.1950379"},{"key":"e_1_2_2_63_1","doi-asserted-by":"publisher","DOI":"10.1145\/3295500.3356159"},{"key":"e_1_2_2_64_1","doi-asserted-by":"publisher","DOI":"10.1145\/3381052.3381318"},{"key":"e_1_2_2_65_1","doi-asserted-by":"publisher","DOI":"10.1145\/3173162.3173201"},{"key":"e_1_2_2_66_1","volume-title":"NOVA: A Log-Structured File System for Hybrid Volatile\/Non-Volatile Main Memories. login Usenix Mag., 41, 3","author":"Xu Jian","year":"2016","unstructured":"Jian Xu and Steven Swanson . 2016 . NOVA: A Log-Structured File System for Hybrid Volatile\/Non-Volatile Main Memories. login Usenix Mag., 41, 3 (2016), https:\/\/www.usenix.org\/publications\/login\/fall2016\/xu Jian Xu and Steven Swanson. 2016. NOVA: A Log-Structured File System for Hybrid Volatile\/Non-Volatile Main Memories. login Usenix Mag., 41, 3 (2016), https:\/\/www.usenix.org\/publications\/login\/fall2016\/xu"},{"key":"e_1_2_2_67_1","doi-asserted-by":"publisher","DOI":"10.1145\/3132747.3132761"},{"key":"e_1_2_2_68_1","doi-asserted-by":"publisher","DOI":"10.1145\/2784731.2784735"},{"key":"e_1_2_2_69_1","doi-asserted-by":"publisher","DOI":"10.1145\/3122955.3122972"},{"key":"e_1_2_2_70_1","doi-asserted-by":"publisher","DOI":"10.1145\/3293883.3295711"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3473568","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3473568","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T21:28:15Z","timestamp":1750195695000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3473568"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021,8,19]]},"references-count":69,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2021,8,22]]}},"alternative-id":["10.1145\/3473568"],"URL":"https:\/\/doi.org\/10.1145\/3473568","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2021,8,19]]},"assertion":[{"value":"2021-08-19","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}