Click here to flash read.
arXiv:2404.08217v2 Announce Type: replace
Abstract: Despite Rust's success in systems programming, its "shared XOR mutable" principle significantly restricts how mutable values can be used, precluding many useful functional programming idioms. Reachability types are a recent proposal to address the key limitations of Rust-style "shared XOR mutable" approaches by tracking lifetimes and reachability of shared, escaping, and mutable data, even in the presence of higher-order functions and polymorphic types. The key to enable such expressiveness is the notion of self-references in reachability qualifiers. However, self-references present major challenges in designing expressive subtyping and decidable type checking algorithms, since self-references are neither fully covariant nor fully contravariant, yet still need to vary in certain circumstances. Thus, making reachability types practical and bringing the benefits of programming with lifetimes and sharing to higher-level languages remains an open challenge.
In this paper, we investigate the issues of subtyping and type checking of self-references for reachability types. We address key gaps in previous work by presenting the $\lambda^{\diamond}_R$-calculus of reachability types with a refined notion of subtyping, which is more expressive compared to prior work, and more smoothly supports features such as Church-encoded datatypes. We also develop a sound and decidable bidirectional type checking algorithm, which is implemented and verified in the Coq proof assistant.
No creative common's license