🤖 AI Summary
This paper addresses the labor-intensive manual verification of memory disentanglement in parallel programs. We propose TypeDis—the first timestamp-annotated static type system—designed to automate disentanglement guarantees. TypeDis introduces *subtiming*, a mechanism enabling timestamps to evolve dynamically during type inference, and integrates iso-recursive types, parametric polymorphism, and insights from region types and the separation logic DisLog2. Its key contribution is the first application of a timestamped type system to automatically enforce inter-task memory disentanglement, thereby eliminating explicit synchronization dependencies and manual correctness proofs. We formally verify TypeDis’s safety within the Rocq proof assistant. Experimental evaluation demonstrates that TypeDis automatically verifies type safety and runtime memory disentanglement across diverse parallel programs, while enabling task-local garbage collection.
📝 Abstract
Disentanglement is a runtime property of parallel programs guaranteeing that parallel tasks remain oblivious to each other's allocations. As demonstrated in the MaPLe compiler and run-time system, disentanglement can be exploited for fast automatic memory management, especially task-local garbage collection with no synchronization between parallel tasks. However, as a low-level property, disentanglement can be difficult to reason about for programmers. The only means of statically verifying disentanglement so far has been DisLog, an Iris-fueled variant of separation logic, mechanized in the Rocq proof assistant. DisLog is a fully-featured program logic, allowing for proof of functional correctness as well as verification of disentanglement. Yet its employment requires significant expertise and per-program proof effort.
This paper explores the route of automatic verification via a type system, ensuring that any well-typed program is disentangled and lifting the burden of carrying out manual proofs from the programmer. It contributes TypeDis, a type system inspired by region types, where each type is annotated with a timestamp, identifying the task that allocated it. TypeDis supports iso-recursive types as well as polymorphism over both types and timestamps. Crucially, timestamps are allowed to change during type-checking, at join points as well as via a form of subtyping, dubbed subtiming. The paper illustrates TypeDis and its features on a range of examples. The soundness of TypeDis and the examples are mechanized in the Rocq proof assistant, using an improved version of DisLog, dubbed DisLog2.