主要观点:提出了改善 Rust 借用检查器的 4 部分路线图,即“内部借用检查器”,旨在让 Rust 更符合其“精神”,解决一些因遵循规则而被拒绝的代码模式。
关键信息:
- Rust 的“精神”:是“变异异或共享”,即当通过变量
x
变异一个值时,不应通过变量y
读取该数据,这能保证内存安全,但并非绝对必要或充分,且该模式在 Rust 中很常用,能使程序更易维护。 4 个步骤:
- 步骤 1:Polonius 轻松条件返回引用:Rust 2018 引入的非词法生命周期(NLL)未处理条件返回引用的情况,如
get_default
函数示例,目前正在解决中。 - 步骤 2:基于位置的生命周期语法:添加基于“位置表达式”的显式生命周期语法,如
’x
表示从变量x
借用,’x.y
表示从x
的字段y
借用等,这将使很多当前的生命周期参数不必要,更便于教学和学习。 - 步骤 3:视图类型和过程间借用:通过视图类型,函数可以声明访问哪些字段,解决了如
WidgetFactory
中increment_counter
函数在迭代widgets
时不能修改counter
的问题,还能解决阶段初始化的问题,但视图类型在公共接口上有局限性,目前主要用于私有函数。 - 步骤 4:内部引用:目前 Rust 不能支持字段引用其他拥有的数据,正在研究解决方案,如
Message
结构体的示例。
- 步骤 1:Polonius 轻松条件返回引用:Rust 2018 引入的非词法生命周期(NLL)未处理条件返回引用的情况,如
- 工作进度:Polonius 处于工程阶段,语法处于讨论阶段,视图类型需要建模,内部引用已在简化的 Rust 变体中建模。
- 优先级考虑:因听到 Rust 用户在借用检查器方面的痛点,决定投入改善借用检查器的工作。
- 结论:这 4 个变化相互关联,如 Polonius 基于“位置表达式”重塑借用,为显式生命周期语法奠定基础,视图类型允许暴露部分借用的辅助方法等;这些变化不会使 Rust 更复杂,反而会让使用 Rust 更简单,将借用检查器分析融入类型系统,弥补了当前类型系统的不足。
重要细节:
- NLL 最初设计虽旨在处理条件返回引用,但所提议的类型系统难以实现,Polonius 是更好的解决方案。
- 视图类型能更高效地实现“不相交闭包捕获”规则,当前闭包会存储 2 个引用,使用视图类型可存储 1 个。
- 对于视图类型,最大的开放问题是如何适应类型的“强更新”,如创建完全未初始化的
WidgetFactory
值并进行修改。 - 作者多年前在学术会议上提到将状态放入类型系统的观点,如今认为是正确的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。