Valen 的内存安全:一种新的借用检查方式
来源:verdagon.dev — 2026-10-11
📋 概述
Valen 作者 Evan Ovadia 介绍新的"分组借用"检查器。它建立在 Nick Smith 的 Group Borrowing 提案上,核心是让编译器记住引用指向哪里:用户用 entity in world.entities[] mut 这样的语法显式说明引用指向对象内部的哪个位置,编译器据此把借用检查的"共享 XOR 可变"放松为"不使用已释放内存",从而在编译期捕获 use-after-free,同时接受以往借用检查器无法接受的模式——多个可写引用指向同一对象、参数同时指向对象与其内部元素并只通过后者写入、ScopeGuard 式回滚结构、多个结构各自持有同一子系统的可变引用。同一思路已被 Carbon、Ante、Plecra 的 exclusion typing 等采用。
🔑 核心要点
- 基础是 Nick Smith 的 Group Borrowing 提案,Carbon、Ante、Plecra 等语言也走了同一条路
- 关键机制:编译期记住引用指向哪里,由用户用 in 语法显式声明指向关系
- 把借用检查的 "共享 XOR 可变"放松为"不使用已释放内存",冲突由此消解
- 能接受两个可写引用指向同一对象并分别写入,传统借用检查器只会报编译错误
- 可表达 C++ 里惯用的模式:ScopeGuard 式回滚结构、多个结构持有同一子系统的可变引用
- 目标是把 Rust 级的能力与引用计数、分代引用结合起来,并与 Rust 代码互操作
- 作者声明全文 0% 由 AI 撰写:想让人花时间读,就花时间亲手写
💡 金句
这篇文章 0% 由 AI 撰写。想让人认真读你写的东西,就动手自己写。
👍 0
👎 0
← 返回 Lobsters 首页