{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,17]],"date-time":"2026-07-17T02:29:17Z","timestamp":1784255357158,"version":"3.55.0"},"reference-count":46,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2020,8,2]],"date-time":"2020-08-02T00:00:00Z","timestamp":1596326400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/501100000595","name":"Darwin College, University of Cambridge","doi-asserted-by":"publisher","id":[{"id":"10.13039\/501100000595","id-type":"DOI","asserted-by":"publisher"}]},{"name":"Jane Street"},{"DOI":"10.13039\/501100000700","name":"Royal Commission for the Exhibition of 1851","doi-asserted-by":"publisher","id":[{"id":"10.13039\/501100000700","id-type":"DOI","asserted-by":"publisher"}]},{"name":"Tezos Foundation"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2020,8,2]]},"abstract":"<jats:p>OCaml is an industrial-strength, multi-paradigm programming language, widely used in industry and academia. OCaml is also one of the few modern managed system programming languages to lack support for shared memory parallel programming. This paper describes the design, a full-fledged implementation and evaluation of a mostly-concurrent garbage collector (GC) for the multicore extension of the OCaml programming language. Given that we propose to add parallelism to a widely used programming language with millions of lines of existing code, we face the challenge of maintaining backwards compatibility--not just in terms of the language features but also the performance of single-threaded code running with the new GC. To this end, the paper presents a series of novel techniques and demonstrates that the new GC strikes a balance between performance and feature backwards compatibility for sequential programs and scales admirably on modern multicore processors.<\/jats:p>","DOI":"10.1145\/3408995","type":"journal-article","created":{"date-parts":[[2020,8,3]],"date-time":"2020-08-03T13:48:02Z","timestamp":1596462482000},"page":"1-30","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":34,"title":["Retrofitting parallelism onto OCaml"],"prefix":"10.1145","volume":"4","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-3491-1780","authenticated-orcid":false,"given":"KC","family":"Sivaramakrishnan","sequence":"first","affiliation":[{"name":"IIT Madras, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Stephen","family":"Dolan","sequence":"additional","affiliation":[{"name":"OCaml Labs, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Leo","family":"White","sequence":"additional","affiliation":[{"name":"Jane Street, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Sadiq","family":"Jaffer","sequence":"additional","affiliation":[{"name":"Opsian, UK \/ OCaml Labs, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Tom","family":"Kelly","sequence":"additional","affiliation":[{"name":"OCaml Labs, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Anmol","family":"Sahoo","sequence":"additional","affiliation":[{"name":"IIT Madras, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Sudha","family":"Parimala","sequence":"additional","affiliation":[{"name":"IIT Madras, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Atul","family":"Dhiman","sequence":"additional","affiliation":[{"name":"IIT Madras, India"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Anil","family":"Madhavapeddy","sequence":"additional","affiliation":[{"name":"University of Cambridge, UK \/ OCaml Labs, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2020,8,3]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806651.1806655"},{"key":"e_1_2_2_2_1","doi-asserted-by":"crossref","unstructured":"Andrew W Appel. 1990. A runtime system. Lisp and Symbolic Computation 3 4 ( 1990 ) 343-380.  Andrew W Appel. 1990. A runtime system. Lisp and Symbolic Computation 3 4 ( 1990 ) 343-380.","DOI":"10.1007\/BF01807697"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/1988915.1988929"},{"key":"e_1_2_2_4_1","volume-title":"Ephemerons meet OCaml GC. In OCaml Users and Developers Workshop.","author":"Bobot Fran\u00e7ois","year":"2014","unstructured":"Fran\u00e7ois Bobot . 2014 . Ephemerons meet OCaml GC. In OCaml Users and Developers Workshop. Fran\u00e7ois Bobot. 2014. Ephemerons meet OCaml GC. In OCaml Users and Developers Workshop."},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.4230\/DagRep.8.4.104"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/1064979.1064988"},{"key":"e_1_2_2_7_1","doi-asserted-by":"crossref","unstructured":"Edsger W Dijkstra Leslie Lamport Alain J. Martin Carel S. Scholten and Elisabeth FM Stefens. 1978. On-the-fly garbage collection: An exercise in cooperation. Commun. ACM 21 11 ( 1978 ) 966-975.  Edsger W Dijkstra Leslie Lamport Alain J. Martin Carel S. Scholten and Elisabeth FM Stefens. 1978. On-the-fly garbage collection: An exercise in cooperation. Commun. ACM 21 11 ( 1978 ) 966-975.","DOI":"10.1145\/359642.359655"},{"key":"e_1_2_2_8_1","volume-title":"Trends in Functional Programming","author":"Dolan Stephen","unstructured":"Stephen Dolan , Spiros Eliopoulos , Daniel Hillerstr\u00f6m , Anil Madhavapeddy , KC Sivaramakrishnan , and Leo White . 2018a. Concurrent System Programming with Efect Handlers . In Trends in Functional Programming , Meng Wang and Scott Owens (Eds.). Springer International Publishing , Cham , 98-117. Stephen Dolan, Spiros Eliopoulos, Daniel Hillerstr\u00f6m, Anil Madhavapeddy, KC Sivaramakrishnan, and Leo White. 2018a. Concurrent System Programming with Efect Handlers. In Trends in Functional Programming, Meng Wang and Scott Owens (Eds.). Springer International Publishing, Cham, 98-117."},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/3192366.3192421"},{"key":"e_1_2_2_10_1","unstructured":"Damien Doligez. 1989. R\u00e9alisation d'un glaneur de cellules de Lang et Dupont \u00e0 g\u00e9n\u00e9rations. Memoire de DEA Universite Paris VII ( 1989 ).  Damien Doligez. 1989. R\u00e9alisation d'un glaneur de cellules de Lang et Dupont \u00e0 g\u00e9n\u00e9rations. Memoire de DEA Universite Paris VII ( 1989 )."},{"key":"e_1_2_2_11_1","unstructured":"Damien Doligez. 2019. A new allocator for OCaml. http:\/\/gallium.inria.fr\/~scherer\/doc\/chameau-sur-le-plateau\/2019-10-08-damien-doligez-major-allocator.org  Damien Doligez. 2019. A new allocator for OCaml. http:\/\/gallium.inria.fr\/~scherer\/doc\/chameau-sur-le-plateau\/2019-10-08-damien-doligez-major-allocator.org"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/158511.158611"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/512429.512439"},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/165180.165205"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/2972206.2972210"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796810000201"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/3381898.3397214"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2737924.2738006"},{"key":"e_1_2_2_19_1","unstructured":"GoWriteBarrier 2015. Go Write Barrier. https:\/\/golang.org\/src\/runtime\/mbarrier.go  GoWriteBarrier 2015. Go Write Barrier. https:\/\/golang.org\/src\/runtime\/mbarrier.go"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/359897.359903"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/3178487.3178494"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/263698.263733"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1109\/32.588521"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/286860.286878"},{"key":"e_1_2_2_25_1","volume-title":"The Garbage Collection Handbook: The Art of Automatic Memory Management","author":"Jones Richard","unstructured":"Richard Jones , Antony Hosking , and Eliot Moss . 2011. The Garbage Collection Handbook: The Art of Automatic Memory Management ( 1 st ed.). Chapman & Hall\/CRC. Richard Jones, Antony Hosking, and Eliot Moss. 2011. The Garbage Collection Handbook: The Art of Automatic Memory Management (1st ed.). Chapman & Hall\/CRC.","edition":"1"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2451116.2451167"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993478.1993482"},{"key":"e_1_2_2_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/1596550.1596563"},{"key":"e_1_2_2_30_1","unstructured":"Yaron Minsky Anil Madhavapeddy and Jason Hickey. 2013. Real World OCaml-Functional Programming for the Masses. O'Reilly. http:\/\/shop.oreilly.com\/product\/0636920024743.do#tab_04_2  Yaron Minsky Anil Madhavapeddy and Jason Hickey. 2013. Real World OCaml-Functional Programming for the Masses. O'Reilly. http:\/\/shop.oreilly.com\/product\/0636920024743.do#tab_04_2"},{"key":"e_1_2_2_31_1","unstructured":"OCamlCAPI 2019. Interfacing C with OCaml. https:\/\/caml.inria.fr\/pub\/docs\/manual-ocaml\/intfc.html  OCamlCAPI 2019. Interfacing C with OCaml. https:\/\/caml.inria.fr\/pub\/docs\/manual-ocaml\/intfc.html"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951935"},{"key":"e_1_2_2_33_1","unstructured":"ReasonML 2019. ReasonML : A new syntax and toolchain for OCaml. https:\/\/reasonml.github.io\/  ReasonML 2019. ReasonML : A new syntax and toolchain for OCaml. https:\/\/reasonml.github.io\/"},{"key":"e_1_2_2_34_1","volume-title":"Functional Programming, Concurrency, Simulation and Automated Reasoning: International Lecture Series 1991-1992","author":"Reppy John H.","unstructured":"John H. Reppy . 1993. Concurrent ML : Design, Application and Semantics . In Functional Programming, Concurrency, Simulation and Automated Reasoning: International Lecture Series 1991-1992 , McMaster University, Hamilton, Ontario , Canada. Springer-Verlag , Berlin, Heidelberg, 165-198. John H. Reppy. 1993. Concurrent ML : Design, Application and Semantics. In Functional Programming, Concurrency, Simulation and Automated Reasoning: International Lecture Series 1991-1992, McMaster University, Hamilton, Ontario, Canada. Springer-Verlag, Berlin, Heidelberg, 165-198."},{"key":"e_1_2_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/1133956.1133968"},{"key":"e_1_2_2_36_1","volume-title":"Retrofitting Parallelism onto OCaml. ArXiv abs\/","author":"Sivaramakrishnan KC","year":"2004","unstructured":"KC Sivaramakrishnan , Stephen Dolan , Leo White , Sadiq Jafer , Tom Kelly , Anmol Sahoo , Sudha Parimala , Atul Dhiman , and Anil Madhavapeddy . 2020. Retrofitting Parallelism onto OCaml. ArXiv abs\/ 2004 .11663 ( 2020 ). https:\/\/arxiv.org\/abs\/ 2004. 11663 KC Sivaramakrishnan, Stephen Dolan, Leo White, Sadiq Jafer, Tom Kelly, Anmol Sahoo, Sudha Parimala, Atul Dhiman, and Anil Madhavapeddy. 2020. Retrofitting Parallelism onto OCaml. ArXiv abs\/ 2004.11663 ( 2020 ). https:\/\/arxiv.org\/abs\/ 2004. 11663"},{"key":"e_1_2_2_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/2258996.2259005"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796814000161"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3828.3835"},{"key":"e_1_2_2_40_1","volume-title":"Data Structure Techniques","author":"Standish Thomas A.","unstructured":"Thomas A. Standish . 1980. Data Structure Techniques . Addison-Wesley Longman Publishing Co., Inc. , USA. Thomas A. Standish. 1980. Data Structure Techniques. Addison-Wesley Longman Publishing Co., Inc., USA."},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869459.1869507"},{"key":"e_1_2_2_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/2076022.1993491"},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/2047849.2047860"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/3022670.2951944"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1007\/11531142_25"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/3371115"},{"key":"e_1_2_2_48_1","doi-asserted-by":"publisher","DOI":"10.1016\/0164-1212(90)90084-Y"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3408995","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3408995","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T20:47:59Z","timestamp":1750193279000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3408995"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,8,2]]},"references-count":46,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2020,8,2]]}},"alternative-id":["10.1145\/3408995"],"URL":"https:\/\/doi.org\/10.1145\/3408995","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,8,2]]},"assertion":[{"value":"2020-08-03","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}