Rust borrow checker 是在本地还是全局分析程序?

Does Rust borrow checker analyze the program locally or globally?

Rust borrow checker 是在本地还是全局分析程序?

换句话说,借用检查器是否需要有关整个程序的信息,或者它在功能范围内本地工作?

我问是因为我想量化它的算法复杂性。我想知道借用检查问题的大小是否只是函数的整个程序。

借用检查器一次只对一个函数进行操作。

Rust 的一个原则是局部推理,既用于静态分析(编译器)又用于人类reader。

这就是函数签名如此具体且可能冗长的原因:

  • 每个参数的类型,以及 return 类型,明确说明。
  • 约束明确说明(在通用代码上)。
  • 生命周期 注释。

后者作为句法糖受制于Lifetime Elision规则,但这些规则本身严格限于函数的签名。

最终结果是永远不需要窥视内部函数来执行语义检查。

注意:另一方面,使用 -> impl Trait,代码生成需要查看函数内部以了解确切的类型;虽然这不是关于推理,所以它通过了。