{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:09:10Z","timestamp":1784196550870,"version":"3.55.0"},"reference-count":35,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>\n                    Rust is a non-Garbage Collected (GCed) language, but the lack of GC makes expressing data-structures that require shared ownership awkward, inefficient, or both. In this paper we explore a new design for, and implementation of, GC in Rust, called\n                    <jats:sc>Alloy.<\/jats:sc>\n                    Unlike previous approaches to GC in Rust,\n                    <jats:sc>Alloy<\/jats:sc>\n                    allows existing Rust destructors to be automatically used as GC finalizers: this makes\n                    <jats:sc>Alloy<\/jats:sc>\n                    integrate better with existing Rust code than previous solutions but introduces surprising soundness and performance problems.\n                    <jats:sc>Alloy<\/jats:sc>\n                    provides novel solutions for the core problems:\n                    <jats:italic toggle=\"yes\">finalizer safety analysis<\/jats:italic>\n                    rejects unsound destructors from automatically being reused as finalizers;\n                    <jats:italic toggle=\"yes\">finalizer elision<\/jats:italic>\n                    optimises away unnecessary finalizers; and\n                    <jats:italic toggle=\"yes\">premature finalizer prevention<\/jats:italic>\n                    ensures that finalizers are only run when it is provably safe to do so.\n                  <\/jats:p>","DOI":"10.1145\/3763179","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:49:50Z","timestamp":1759999790000},"page":"3588-3614","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Garbage Collection for Rust: The Finalizer Frontier"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0002-5321-0645","authenticated-orcid":false,"given":"Jacob","family":"Hughes","sequence":"first","affiliation":[{"name":"King's College London, London, United Kingdom"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-5258-3805","authenticated-orcid":false,"given":"Laurence","family":"Tratt","sequence":"additional","affiliation":[{"name":"King's College London, London, United Kingdom"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_3_2_2_2","unstructured":"Mads Ager Erik Corry Vyacheslav Egorov Kentaro Hara Gustav Wibling and Ian Zerny. 2013. Oilpan: tracing garbage collection for Blink. https:\/\/docs.google.eom\/document\/d\/ly7_0ni0E_kxvrah-QtnreMlzCDKN3QP4BNlAw7eSLfY. Accessed on 2024-10-15."},{"key":"e_1_3_2_3_2","unstructured":"Saoirse Aronson. 2018. shifgrethor. GitHub. https:\/\/github.com\/withoutboats\/shifgrethor\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_4_2","doi-asserted-by":"crossref","unstructured":"David F Bacon Perry Cheng and VT Rajan. 2004. A unified theory of garbage collection. In OOPSLA. 50\u201368.","DOI":"10.1145\/1028976.1028982"},{"key":"e_1_3_2_5_2","doi-asserted-by":"publisher","unstructured":"David F Bacon and Vadakkedathu T Rajan. 2001. Concurrent cycle collection in reference counted systems. In ECOOP. 207\u2013235. doi:10.1007\/3-540-45337-7_12","DOI":"10.1007\/3-540-45337-7_12"},{"key":"e_1_3_2_6_2","doi-asserted-by":"publisher","unstructured":"Stephen M. Blackburn Zixian Cai Rui Chen Xi Yang John Zhang and John Zigman. 2025. Rethinking Java Performance Analysis. In ASPLOS. 940\u2013954. doi:10.1145\/3669940.3707217","DOI":"10.1145\/3669940.3707217"},{"key":"e_1_3_2_7_2","doi-asserted-by":"publisher","unstructured":"Hans-J Boehm. 2003. Destructors finalizers and synchronization. In POPL. doi:10.1145\/604131.604153","DOI":"10.1145\/604131.604153"},{"key":"e_1_3_2_8_2","unstructured":"Hans-J Boehm and Mike Spertus. 2007. Optimization-robust finalization. Open-Std. https:\/\/www.open-std.org\/jtcl\/sc22\/wg21\/docs\/papers\/2007\/n2261.html. Accessed: 2024-08-08."},{"key":"e_1_3_2_9_2","doi-asserted-by":"publisher","unstructured":"Hans-J Boehm and Mike Spertus. 2009. Garbage collection in the next C++ standard. In ISMM. 30\u201338. doi:10.1145\/1542431.1542437","DOI":"10.1145\/1542431.1542437"},{"key":"e_1_3_2_10_2","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380180902"},{"key":"e_1_3_2_11_2","unstructured":"Thom Chiovoloni. 2015. Typed Arena. https:\/\/github.com\/thomcc\/rust-typed-arena\/. Accessed: 2025-03-25."},{"key":"e_1_3_2_12_2","doi-asserted-by":"publisher","unstructured":"Michael Coblenz Michelle Mazurek and Michael Hicks. 2022. Does the Bronze Garbage Collector Make Rust Easier to Use? A Controlled Experiment. In ICSE. doi:10.1145\/3510003.3510107","DOI":"10.1145\/3510003.3510107"},{"key":"e_1_3_2_13_2","unstructured":"Nick Fitzgerald. 2015. bacon-rajan-cc: A reference counted type with cycle collection for Rust. https:\/\/github.com\/ fitzgen\/bacon-rajan-cc. Accessed: 2024-10-15."},{"key":"e_1_3_2_14_2","unstructured":"Brian Goetz and Mikael Vidstedt. 2021. JEP 421: Deprecate Finalization for Removal. https:\/\/openjdk.org\/jeps\/421. Accessed: 2024-10-15."},{"key":"e_1_3_2_15_2","unstructured":"Manish Goregaokar. 2015. rust-gc. https:\/\/github.com\/Manishearth\/rust-gc\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_16_2","unstructured":"Manish Goregaokar. 2016. GC support in Rust: API design. https:\/\/manishearth.github.io\/blog\/2016\/08\/18\/gc-support-in-rust-api-design\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_17_2","unstructured":"Manish Goregaokar. 2021. A tour of safe tracing GC designs in Rust. https:\/\/manishearth.github.io\/blog\/2021\/03\/15\/arenas-in-rust\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_18_2","unstructured":"Graydon Hoare. 2022. Reply to \u2018What should be included in a history of the Rust language?\u2019. Reddit. https:\/\/www.reddit.com\/r\/rust\/comments\/za51h5\/comment\/iyp0ptm\/."},{"key":"e_1_3_2_19_2","doi-asserted-by":"publisher","unstructured":"Jacob Hughes and Laurence Tratt. 2025. Reproduction Package for Article \u2018Garbage Collection for Rust: The Finalizer Frontier\u2019. Zenodo. doi:10.5281\/zenodo.17013382","DOI":"10.5281\/zenodo.17013382"},{"key":"e_1_3_2_20_2","doi-asserted-by":"publisher","unstructured":"Richard Jones Antony Hosking and Eliot Moss. 2023. The Garbage Collection Handbook: the Art of Automatic Memory Management (second ed.). Chapman and Hall\/CRC. doi:10.1201\/9781003276142","DOI":"10.1201\/9781003276142"},{"key":"e_1_3_2_21_2","doi-asserted-by":"publisher","unstructured":"Steve Klabnik and Carol Nichols. 2018. The Rust Programming Language. No Starch Press. doi:10.5555\/3271463","DOI":"10.5555\/3271463"},{"key":"e_1_3_2_22_2","unstructured":"Felix S. Klock. 2015. GC and Rust: specifying the problem. http:\/\/blog.pnkfx.org\/blog\/2015\/ll\/10\/gc-and-rust-part-l-specing-the-problem\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_23_2","unstructured":"Felix S. Klock. 2016. GC and Rust: The roots of the problem. http:\/\/blog.pnkfx.org\/blog\/2016\/01\/01\/gc-and-rust-part-2-roots-of-the-problem\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_24_2","unstructured":"LLVM. 2014. Garbage collection with LLVM. LLVM Documentation. https:\/\/llvm.org\/docs\/GarbageCollection.html. Accessed: 2024-10-15."},{"key":"e_1_3_2_25_2","unstructured":"Niko Matsakis. 2013. Destructors and finalizers in Rust. http:\/\/smallcultfollowing.com\/babysteps\/blog\/2013\/01\/17\/destructors-and-finalizers-in-rust\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_26_2","doi-asserted-by":"publisher","unstructured":"Benjamin C Pierce. 2004. Advanced topics in Types and Programming Languages. MIT press. doi:10.7551\/mitpress\/1104.001.0001","DOI":"10.7551\/mitpress\/1104.001.0001"},{"key":"e_1_3_2_27_2","unstructured":"Filip Pizlo. 2017. Introducing Riptide: WebKit\u2019s retreating wavefront concurrent garbage collector. WebKit Blog. https:\/\/webkit.org\/blog\/7122\/introducing-riptide-web-kits-retreating-wavefront-concurrent-garbage-collector\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_28_2","unstructured":"Rust. 2014. The Rust language reference. Rust Documentation. https:\/\/doc.rust-lang.org\/reference\/. Accessed: 2024-10-01."},{"key":"e_1_3_2_29_2","doi-asserted-by":"publisher","unstructured":"Rifat Shahriyar Stephen M. Blackburn and Kathryn S. McKinley. 2014. Fast conservative garbage collection. In OOPSLA. 121\u2013139. doi:10.1145\/2660193.2660198","DOI":"10.1145\/2660193.2660198"},{"key":"e_1_3_2_30_2","unstructured":"Alekesy Shipil\u00eb. 2020. JVM Anatomy Quark #8: Local Variable Reachability. shipilev.net. https:\/\/shipilev.net\/jvm\/anatomy-quarks\/8-local-var-reachability\/. Accessed: 2024-10-08."},{"key":"e_1_3_2_31_2","unstructured":"Bjarne Stroustrup. 1997. The C++ Programming Language (third ed.). Addison-Wesley."},{"key":"e_1_3_2_32_2","doi-asserted-by":"publisher","unstructured":"Lei Wang and Xikun Sun. 2006. Escape analysis for synchronization removal. In SAC. 1419\u20131423. doi:10.1145\/1141277.1141607","DOI":"10.1145\/1141277.1141607"},{"key":"e_1_3_2_33_2","unstructured":"Catherine West. 2019. gc-arena: An experimental system for Rust garbage collection. https:\/\/github.com\/kyren\/gc-arena\/. Accessed: 2024-10-15."},{"key":"e_1_3_2_34_2","unstructured":"Jason Williams. 2018. Boa: an experimental JavaScript lexer parser and interpreter written in Rust. GitHub. https:\/\/github.com\/boa-dev\/boa. Accessed: 2024-10-15."},{"key":"e_1_3_2_35_2","unstructured":"Milian Wolff. 2014. Heaptrack - A Heap Memory Profiler for Linux. https:\/\/milianw.de\/blog\/heaptrack-a-heap-memory-profiler-for-linux.html. Accessed: 2025-03-25."},{"key":"e_1_3_2_36_2","doi-asserted-by":"publisher","DOI":"10.1145\/3473597"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763179","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:00:21Z","timestamp":1784196021000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763179"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":35,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763179"],"URL":"https:\/\/doi.org\/10.1145\/3763179","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2025-03-26","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}