很多时候就是个 过犹不及 的问题.
Tree Borrows 为 ETH Zurich 编程语言基础实验室提出的一项新规范,旨在精确界定 Rust 编程语言中 unsafe 区块可能引发未定义行为(Undefined Behavior,UB)的边界。Rust 以所有权概念作类型系统,在保证内存安全与避免数据竞争方面具备强大保证,但其 unsafe 区块则提供某些例外,必须由程序员手动维护安全性。为了在保留强大编译器内部优化性能(例如指针别名优化)的同时防止 unsafe 代码滥用,传统的 Stacked Borrows 模型虽已试图订定相关规范,但常因过于严格而与实务常见模式不符。Tree Borrows 则以树状结构取代堆栈,既弥补了原有限制,又支持更多语法模式。
根据研究团队的实验,Tree Borrows 在分析 30,000 个广泛使用之 Rust 套件时,拒绝不当用法的案例比 Stacked Borrows 减少 54%,显示出其对现实编程需求有更高容错能力。另外,论文中利用 Rocq 工具证明,该新规范不仅保留了大部分原有优化策略,还引入了读取间重新排序等新型优化,进一步增强了编译过程中的安全性与性能。
讨论区中,部分网友提及早期 Stacked Borrows 模型曾于 2018 与 2020 年引起关注,其主要问题在于对 unsafe 代码行为的界定过于狭隘。多位讨论者强调,虽然 Rust 编译器可能接受某些代码,但这些程序却恰恰违反了不可共存多个可变参考的严格规则,从而导致未定义行为。另一位网友引用 Ralf Jung 的博客,补充说明 Tree Borrows 不仅有助于剔除这些反例,亦为未来更精确描述 Rust 操作语意(operational semantics)提供理论基础。
此项研究凭借对 unsafe 代码边界问题的深入剖析及创新解法而荣获 PLDI'25 Distinguished Paper Award,被视为推动 Rust 语言安全性与优化理论迈向新里程碑的重要成果。讨论中更有趣味性地提到,作者 Neven Villani 为知名数学家 Cédric Villani 之子,彰显出该研究在学术与实务界均引起广泛关注。
https://news.ycombinator.com/item?id=44510600