Perceus: Garbage Free Reference Counting with Reuse Alex Reinking∗ Ningning Xie∗ Microsoft Research University of Hong Kong Redmond, WA, USA Hong Kong, China
[email protected] [email protected] Leonardo de Moura Daan Leijen Microsoft Research Microsoft Research Redmond, WA, USA Redmond, WA, USA
[email protected] [email protected] Abstract 1 Introduction We introduce Perceus, an algorithm for precise reference Reference counting [7], with its low memory overhead and counting with reuse and specialization. Starting from a func- ease of implementation, used to be a popular technique for tional core language with explicit control-flow, Perceus emits automatic memory management. However, the field has precise reference counting instructions such that (cycle-free) broadly moved in favor of generational tracing collectors [31], programs are garbage free, where only live references are re- partly due to various limitations of reference counting, in- tained. This enables further optimizations, like reuse analysis cluding cycle collection, multi-threaded operations, and ex- that allows for guaranteed in-place updates at runtime. This pensive in-place updates. in turn enables a novel programming paradigm that we call In this work we take a fresh look at reference counting. We functional but in-place (FBIP). Much like tail-call optimiza- consider a programming language design that gives strong tion enables writing loops with regular function calls, reuse compile-time guarantees in order to enable efficient refer- analysis enables writing in-place mutating algorithms in a ence counting at run-time. In particular, we build on the purely functional way. We give a novel formalization of ref- pioneering reference counting work in the Lean theorem erence counting in a linear resource calculus, and prove that prover [46], but we view it through the lens of language Perceus is sound and garbage free.