第二根金钉:让内存安全跨越 Valen 与 Rust 的边界
来源: verdagon.dev
概述
Evan Ovadia 介绍实验语言 Valen 如何在调用 Rust 时依然维持内存安全。Valen 采用 Nick Smith 的群组借用,不要求共享与可变互斥,因此可以安全地持有指向同一个 Rust 对象的多个可变引用;再配合通配后代路径,它能理解指向对象内部某处的引用并正确报错。
核心要点
- Valen 是 Vale 的后继语言,可以直接调用 Rust 函数(含泛型)而无需绑定或包装层。
- 群组借用允许同一对象存在多个引用并任意写入,用失效追踪替代共享异或可变的限制。
- 在 Valen 中生成 Rust 的 noalias 指针同样可行:当引用是群组中唯一一个时,Valen 就把它标记为 noalias。
- 调用 d.damage() 时,Valen 会把 ref_a 在该调用期间视为临时唯一,与 C 语言把别名指针传给 restrict 形参同理。
- 因为 rustc 与 valenc 各自生成 LLVM IR 并在 noalias 语义下协同,这样做并不构成 UB。
- 难点在于 Rust 不描述 &Gem 究竟指向 self 里的哪里,Valen 因此引入通配后代路径,把返回值理解为 self 内部某处。
- 代价是 Valen 直接生成 LLVM IR 而非 Rust MIR,因为 MIR 无法表达细粒度、可分组的别名信息。
金句
Valen 代码可以安全地持有多个指向 Rust 对象的可变引用。
👍 0
👎 0
← 返回 Lobsters 首页