一句话:指出区域推断对多态高阶程序的 GC 安全性缺陷,提出带 GC 效应的区域类型系统并修复实现。
区域推断通过在编译期插入分配与释放指令,减少甚至消除引用追踪垃圾回收,并与分代 GC 互补;但当混合使用时,必须保证高阶多态程序在追踪回收期间不出现悬挂指针。本文指出既有理论发展存在可靠性问题,且该问题在基于区域推断的真实实现中表现为实际缺陷。为解决此问题,作者提出一个修改但简单的区域类型系统,能够刻画垃圾回收效应,并覆盖多态高阶代码;文中还概述如何调整区域推断与区域表示分析以适配新类型系统。新系统为函数关联更简单的区域类型方案,支持将基于区域的内存管理与部分无标签的引用追踪(及分代)GC 结合,并修正了依赖此前错误已发表结果的后续工作。
Region inference offers a mechanism to reduce (and sometimes entirely remove) the need for reference-tracing garbage collection by inferring where to insert allocation and deallocation instructions in a program at compile time. When the mechanism is combined with techniques for reference-tracing garbage collection, which is helpful in general to support programs with very dynamic memory behaviours, it turns out that region-inference is complementary to adding generations to a reference-tracing collector. However, region-inference and the associated region-representation analyses that make such a memory management strategy perform well in practice are complex, both from a theoretical point-of-view and from an implementation point-of-view.In this paper, we demonstrate a soundness problem with existing theoretical developments, which have to do with ensuring that, even for higher-order polymorphic programs, no dangling-pointers appear during a reference-tracing collection. This problem has materialised as a practical soundness problem in a real implementation based on region inference. As a solution, we present a modified, yet simple, region type-system that captures garbage-collection effects, even for polymorphic higher-order code, and outline how region inference and region-representation analyses are adapted to the new type system. The new type system allows for associating simpler region type-schemes with functions, compared to original work, makes it possible to combine region-based memory management with partly tag-free reference-tracing (and generational) garbage-collection, and repairs previously derived work that is based on the erroneous published results.