很多時候就是個 過猶不及 的問題.
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