When Lifetimes Liberate: A Type System for Arenas with Higher-Order Reachability Tracking
He, Jia, Bao et al.
Static resource management in languages remains challenging due to tensions among control, expressiveness, and flexibility. Region-based systems [Grossman et al . 2002; Tofte et al. 2001] offer bulk deallocation via lexically scoped regions, where all allocations follow a stack discipline. However, both regions and their resources are second-class, and neither can escape its scope nor be freely returned. Ownership and linear type systems, exemplified by Rust [Clarke et al. 2013], offer non-lexical lifetimes and robust static guarantees, but rely on invariants that limit higher-order patterns and expressive sharing.
In this work, we propose a new type system that unifies these strengths. Our system treats all heap-allocated resources as first-class values, while allowing programmers to control lifetime and granularity through three allocation modes: (1) fresh allocation for individual, non-lexical references; (2) subsequent coallocation grouping resources collectively within shadow arenas; and (3) scoped allocation with lexically bounded lifetimes following stack discipline. Regardless of mode, all resources share a uniform type and have no distinction for generic abstractions, preserving the higher-order parametric nature of the language.
Obtaining static safety in higher-order languages with flexible sharing is nontrivial. We address this by extending reachability types [Wei et al. 2024] to collectively track first-class resources, and by adopting flow-insensitive deallocation reasoning for selective stack discipline. These mechanisms yield Aq<: and {A}q<: atop, both formalized and proven type safe and memory safe in Rocq.
academic
Quand les Durées de Vie Libèrent : Un Système de Types pour les Arènes avec Suivi de Réachabilité d'Ordre Supérieur
La gestion statique des ressources dans les langages de programmation reste un défi majeur, principalement en raison des tensions entre contrôlabilité, expressivité et flexibilité. Les systèmes basés sur les régions offrent une libération en masse par le biais de régions à portée lexicale, mais les régions et leurs ressources sont des citoyens de second ordre, incapables de s'échapper de la portée ou de retourner librement. Les systèmes de propriété et de types linéaires, exemplifiés par Rust, offrent des durées de vie non lexicales et des garanties statiques fortes, mais les invariants dont ils dépendent limitent les modèles d'ordre supérieur et le partage expressif.
Ce travail propose un nouveau système de types qui unifie ces avantages. Le système traite toutes les ressources allouées sur le tas comme des valeurs de première classe, tout en permettant aux programmeurs de contrôler les durées de vie et la granularité par trois modes d'allocation : (1) allocation fraîche de références non lexicales individuelles ; (2) co-allocation collective de ressources au sein d'arènes fantômes ; (3) allocation à portée avec des durées de vie lexicales respectant la discipline de pile. Quel que soit le mode choisi, toutes les ressources partagent un type unifié, indifférentes dans les abstractions génériques, préservant les caractéristiques de paramétrisation d'ordre supérieur du langage.
Le problème fondamental que cette recherche vise à résoudre est la mise en œuvre d'une gestion des ressources sûre, flexible et contrôlable dans les langages fonctionnels d'ordre supérieur. Les approches traditionnelles font face aux dilemmes suivants :
Compromis entre allocation sur pile et sur tas : Les valeurs de pile possèdent des durées de vie lexicales strictes, sûres et efficaces mais essentiellement des citoyens de second ordre ; l'allocation sur tas produit des valeurs de première classe pouvant circuler librement, mais sacrifie le contrôle prévisible de la libération.
Limitations des systèmes existants :
Systèmes basés sur les régions (comme MLKit, Cyclone) : offrent une libération en masse mais les régions et ressources sont des citoyens de second ordre
Systèmes de types de propriété (comme Rust) : offrent des durées de vie non lexicales mais limitent les modèles d'ordre supérieur et le partage expressif
Systèmes de types de réachabilité : supportent les fonctions d'ordre supérieur mais sont limités par les structures de télescope, incapables de gérer les structures de stockage cycliques
Les auteurs souhaitent unifier les avantages de différentes stratégies de gestion des ressources : la sécurité de la discipline de pile, l'expressivité des langages d'ordre supérieur, et la flexibilité de traiter les ressources comme des entités de première classe.
Traitement unifié des ressources : Toutes les ressources mémoire sont des valeurs de première classe avec un seul type de référence, abstrayant l'allocation sur pile et sur tas, permettant au code client de rester générique par rapport au modèle de stockage spécifique des références.
Flexibilité du contrôle : Les ressources mémoire peuvent devenir non lexicales ou lexicales sous contrôle utilisateur, individuelles ou collectives, sans distinction de type.
Garanties de sécurité statique : Le suivi de réachabilité trace le flux des ressources mémoire et garantit leur utilisation sûre ; les utilisateurs peuvent imposer une discipline de pile sélective par le biais d'un raisonnement insensible au flux pour garantir une libération prévisible et l'absence d'erreurs d'utilisation après libération.
Caractéristiques d'ordre supérieur expressives : Le système supporte les fonctions d'ordre supérieur avec partage mutable et structures de stockage cycliques, dépassant l'expressivité des systèmes de réachabilité antérieurs.
Les arènes fantômes sont l'innovation clé du système, avec les caractéristiques suivantes :
Identité implicite : Les arènes n'ont pas de noms explicites ou de constructeurs dans la syntaxe de surface, identifiées implicitement par les références
Trois formes d'allocation :
val fr = new Ref(42) // allocation fraîche
val ar = new Ref(42) scoped // allocation à portée
val a1 = new Ref(42) at ar // co-allocation
Théorème 4.1 (Progrès) : Si [∅ | Σ] φ ⊢ t : Q et Σ ok,
alors t est une valeur ou il existe t', σ' tels que t | σ → t' | σ'
Théorème 4.2 (Préservation) : Si un terme bien typé se réduit,
alors il existe un environnement de type étendu tel que le résultat
de la réduction reste bien typé
val makeHandler = {
val rp = new Ref() // pool de ressources non lexical
(cb: Int => Unit) => {
val h = new Ref(cb) at rp
h // retourne le gestionnaire
}
}
Montre comment utiliser les arènes non lexicales pour gérer les durées de vie des rappels.
{ // début de portée
val a = new Ref() scoped
val c1, c2, c3 = new Ref(f) at a
c1 := x => { (!c2)(x) } // forme un cycle
c2 := x => { (!c3)(x) }
c3 := x => { (!c1)(x) }
} // libération en masse {a, c1, c2, c3}
Démontre la construction et la libération sûres de structures de référence cycliques.
L'article unifie avec succès les types de réachabilité, la gestion des ressources basée sur les arènes et la discipline de pile, fournissant une base légère et expressive pour la gestion sûre des ressources dans les langages d'ordre supérieur.
Contribution théorique significative : première réalisation de l'intersection de la discipline de pile, du partage expressif, des ressources de première classe et des fonctions d'ordre supérieur dans un système unifié
Innovation technique remarquable : les arènes fantômes et le suivi de réachabilité à grain grossier sont des innovations importantes
Rigueur formelle : les preuves mécanisées complètes renforcent la crédibilité des résultats
Amélioration de l'expressivité : surmonte les limitations des structures de télescope des systèmes de types de réachabilité antérieurs
Ce travail a une importance significative dans le domaine de la théorie des langages de programmation, fournissant une nouvelle base théorique pour la gestion des ressources, susceptible d'influencer la conception des futurs langages de programmation. En particulier, pour les domaines de la programmation système nécessitant un contrôle précis des ressources, cette approche offre de nouvelles possibilités.