{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:47Z","timestamp":1779836747001,"version":"3.53.1"},"reference-count":54,"publisher":"Cambridge University Press (CUP)","issue":"6","license":[{"start":{"date-parts":[[2014,6,18]],"date-time":"2014-06-18T00:00:00Z","timestamp":1403049600000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2014,11]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    <jats:sc>MultiMLton<\/jats:sc>\n                    is an extension of the MLton compiler and runtime system that targets scalable, multicore architectures. It provides specific support for ACML, a derivative of Concurrent ML that allows for the construction of composable\n                    <jats:italic>asynchronous<\/jats:italic>\n                    events. To effectively manage asynchrony, we require the runtime to efficiently handle potentially large numbers of lightweight, short-lived threads, many of which are created specifically to deal with the implicit concurrency introduced by asynchronous events. Scalability demands also dictate that the runtime minimize global coordination.\n                    <jats:sc>MultiMLton<\/jats:sc>\n                    therefore implements a split-heap memory manager that allows mutators and collectors running on different cores to operate mostly independently. More significantly,\n                    <jats:sc>MultiMLton<\/jats:sc>\n                    exploits the premise that there is a surfeit of available concurrency in ACML programs to realize a new collector design that completely eliminates the need for read barriers, a source of significant overhead in other managed runtimes. These two symbiotic features - a thread design specifically tailored to support asynchronous communication, and a memory manager that exploits lightweight concurrency to greatly reduce barrier overheads - are\n                    <jats:sc>MultiMLton<\/jats:sc>\n                    's key novelties. In this article, we describe the rationale, design, and implementation of these features, and provide experimental results over a range of parallel benchmarks and different multicore architectures including an 864 core Azul Vega 3, and a 48 core non-coherent Intel SCC (Single-Cloud Computer), that justify our design decisions.\n                  <\/jats:p>","DOI":"10.1017\/s0956796814000161","type":"journal-article","created":{"date-parts":[[2014,6,18]],"date-time":"2014-06-18T09:22:06Z","timestamp":1403083326000},"page":"613-674","source":"Crossref","is-referenced-by-count":19,"title":["MultiMLton: A multicore-aware runtime for standard ML"],"prefix":"10.1017","volume":"24","author":[{"given":"K. C.","family":"SIVARAMAKRISHNAN","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"LUKASZ","family":"ZIAREK","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"SURESH","family":"JAGANNATHAN","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2014,6,18]]},"reference":[{"key":"S0956796814000161_ref54","doi-asserted-by":"publisher","DOI":"10.1145\/1993498.1993572"},{"key":"S0956796814000161_ref53","doi-asserted-by":"publisher","DOI":"10.1145\/800087.802786"},{"key":"S0956796814000161_ref52","doi-asserted-by":"publisher","DOI":"10.1145\/377792.377895"},{"key":"S0956796814000161_ref49","first-page":"18","volume-title":"Proceedings of the 2000 International Symposium on Memory Management (ISMM '00)","author":"Steensgaard","year":"2000"},{"key":"S0956796814000161_ref48","doi-asserted-by":"publisher","DOI":"10.1145\/361002.361005"},{"key":"S0956796814000161_ref47","unstructured":"Stack T. (2013) Abandoning segmented stacks in Rust. Available at: https:\/\/mail.mozilla.org\/pipermail\/rust-dev\/2013-November\/006314.html."},{"key":"S0956796814000161_ref36","doi-asserted-by":"publisher","DOI":"10.1007\/BF01383881"},{"key":"S0956796814000161_ref37","unstructured":"MLton. (2012) The MLton Compiler and Runtime System. Available at: http:\/\/www.mlton.org."},{"key":"S0956796814000161_ref33","first-page":"283","volume-title":"Proceedings of the 13th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP '08)","author":"Li","year":"2008"},{"key":"S0956796814000161_ref34","doi-asserted-by":"crossref","first-page":"21","DOI":"10.1145\/1993478.1993482","volume-title":"Proceedings of the 2011 International Symposium on Memory Management (ISMM '11)","author":"Marlow","year":"2011"},{"key":"S0956796814000161_ref15","unstructured":"C# Language Specification. (2014) Available at: http:\/\/www.ecma-international.org\/publications\/files\/ECMA-ST\/Ecma-334.pdf."},{"key":"S0956796814000161_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/231379.231395"},{"key":"S0956796814000161_ref4","volume-title":"Concurrent Programming in Erlang","author":"Armstrong","year":"1996"},{"key":"S0956796814000161_ref11","doi-asserted-by":"publisher","DOI":"10.1145\/324133.324234"},{"key":"S0956796814000161_ref16","doi-asserted-by":"publisher","DOI":"10.1145\/1596550.1596589"},{"key":"S0956796814000161_ref1","first-page":"112","volume-title":"Proceedings of the 12th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. (PPoPP '07)","author":"Agrawal","year":"2007"},{"key":"S0956796814000161_ref51","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4302-0285-1"},{"key":"S0956796814000161_ref21","unstructured":"GHC. (2014) Glasgow Haskell Compiler. Available at: http:\/\/www.haskell.org\/ghc."},{"key":"S0956796814000161_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/91556.91606"},{"key":"S0956796814000161_ref32","volume-title":"Concurrent Programming in Java. Second Edition: Design Principles and Patterns","author":"Lea","year":"1999"},{"key":"S0956796814000161_ref42","doi-asserted-by":"crossref","first-page":"257","DOI":"10.1145\/1596550.1596588","volume-title":"Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming","author":"Reppy","year":"2009"},{"key":"S0956796814000161_ref12","unstructured":"Boehm H. (2012) A Garbage Collector for C and C++. Available at: http:\/\/www.hpl.hp.com\/personal\/Hans_Boehm\/gc."},{"key":"S0956796814000161_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/1029873.1029891"},{"key":"S0956796814000161_ref31","doi-asserted-by":"publisher","DOI":"10.1145\/73141.74825"},{"key":"S0956796814000161_ref22","doi-asserted-by":"publisher","DOI":"10.1145\/62115.62127"},{"key":"S0956796814000161_ref8","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45591-4_75"},{"key":"S0956796814000161_ref3","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380190206"},{"key":"S0956796814000161_ref7","doi-asserted-by":"publisher","DOI":"10.1145\/359460.359470"},{"key":"S0956796814000161_ref9","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010016600604"},{"key":"S0956796814000161_ref50","doi-asserted-by":"publisher","DOI":"10.1145\/1863509.1863514"},{"key":"S0956796814000161_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/604131.604155"},{"key":"S0956796814000161_ref5","doi-asserted-by":"publisher","DOI":"10.1145\/1988915.1988929"},{"key":"S0956796814000161_ref27","unstructured":"Intel. (2012) SCC Platform Overview. Available at: http:\/\/communities.intel.com\/docs\/DOC-5512."},{"key":"S0956796814000161_ref23","doi-asserted-by":"publisher","DOI":"10.1006\/jpdc.1996.0104"},{"key":"S0956796814000161_ref24","doi-asserted-by":"publisher","DOI":"10.1145\/1088348.1088354"},{"key":"S0956796814000161_ref35","doi-asserted-by":"publisher","DOI":"10.1145\/800087.802787"},{"key":"S0956796814000161_ref19","unstructured":"Felleisen M. & Friedman D. (1986) Control operators, the SECD Machine, and the \u03bb-calculus. In Formal Description of Programming Concepts III, pp. 193\u2013217."},{"key":"S0956796814000161_ref25","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800001891"},{"key":"S0956796814000161_ref44","doi-asserted-by":"publisher","DOI":"10.1145\/1708046.1708059"},{"key":"S0956796814000161_ref43","unstructured":"Sansom P. M. (1991) Dual-mode garbage collection. In Proceedings of the Workshop on the Parallel Implementation of Functional Languages, pp. 283\u2013310."},{"key":"S0956796814000161_ref26","unstructured":"Hot-Split. (2013) Contiguous Stacks in Go. Available at: http:\/\/golang.org\/s\/contigstacks."},{"key":"S0956796814000161_ref28","doi-asserted-by":"publisher","DOI":"10.1145\/1013208.1013209"},{"key":"S0956796814000161_ref30","doi-asserted-by":"publisher","DOI":"10.1145\/165854.165874"},{"key":"S0956796814000161_ref38","doi-asserted-by":"publisher","DOI":"10.1145\/91556.91631"},{"key":"S0956796814000161_ref2","doi-asserted-by":"publisher","DOI":"10.1145\/1806651.1806655"},{"key":"S0956796814000161_ref13","doi-asserted-by":"publisher","DOI":"10.1145\/800055.802042"},{"key":"S0956796814000161_ref39","volume-title":"Implicit Parallel Programming in pH","author":"Nikhil","year":"2001"},{"key":"S0956796814000161_ref20","doi-asserted-by":"publisher","DOI":"10.1145\/277650.277725"},{"key":"S0956796814000161_ref46","volume-title":"Composable Schedular Activations for Haskell","author":"Sivaramakrishnan","year":"2013"},{"key":"S0956796814000161_ref40","article-title":"SISAL: A safe and efficient language for numerical calculations","volume":"2000","author":"Raymond","year":"2000","journal-title":"Linux J."},{"key":"S0956796814000161_ref17","doi-asserted-by":"publisher","DOI":"10.1145\/158511.158611"},{"key":"S0956796814000161_ref29","first-page":"129","volume-title":"Proceedings of the Fifth IEEE International Workshop on Source Code Analysis and Manipulation","author":"Jones","year":"2005"},{"key":"S0956796814000161_ref41","volume-title":"Concurrent Programming in ML","author":"Reppy","year":"2007"},{"key":"S0956796814000161_ref45","doi-asserted-by":"publisher","DOI":"10.1145\/2258996.2259005"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796814000161","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:33Z","timestamp":1779834993000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796814000161\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2014,6,18]]},"references-count":54,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2014,11]]}},"alternative-id":["S0956796814000161"],"URL":"https:\/\/doi.org\/10.1017\/s0956796814000161","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2014,6,18]]}}}