Garbage Collection for Rust: The Finalizer Frontier

Fuente: arXiv
Saved in:
Bibliographic Details
Main Authors: Hughes, Jacob, Tratt, Laurence
Format: Preprint
Published: 2025
Subjects:
Online Access:
Tags: Add Tag
No Tags, Be the first to tag this record!
_version_ 1866911184604626944
author Hughes, Jacob
Tratt, Laurence
author_facet Hughes, Jacob
Tratt, Laurence
contents 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 Alloy. Unlike previous approaches to GC in Rust, Alloy allows existing Rust destructors to be automatically used as GC finalizers: this makes Alloy integrate better with existing Rust code than previous solutions but introduces surprising soundness and performance problems. Alloy provides novel solutions for the core problems: finalizer safety analysis rejects unsound destructors from automatically being reused as finalizers; finalizer elision optimises away unnecessary finalizers; and premature finalizer prevention ensures that finalizers are only run when it is provably safe to do so.
format Preprint
id arxiv_https___arxiv_org_abs_2504_01841
institution arXiv
publishDate 2025
record_format arxiv
spellingShingle Garbage Collection for Rust: The Finalizer Frontier
Hughes, Jacob
Tratt, Laurence
Programming Languages
D.3
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 Alloy. Unlike previous approaches to GC in Rust, Alloy allows existing Rust destructors to be automatically used as GC finalizers: this makes Alloy integrate better with existing Rust code than previous solutions but introduces surprising soundness and performance problems. Alloy provides novel solutions for the core problems: finalizer safety analysis rejects unsound destructors from automatically being reused as finalizers; finalizer elision optimises away unnecessary finalizers; and premature finalizer prevention ensures that finalizers are only run when it is provably safe to do so.
title Garbage Collection for Rust: The Finalizer Frontier
topic Programming Languages
D.3
url https://arxiv.org/abs/2504.01841