固定地点

主要观点:

  • 介绍 Rust 的 Pin 类型目标及历史,最初开发 API 时为尽快推出异步/等待语法的“最小可行产品”,Pin 是标准库中的类型,仅可作为方法接收者使用,存在“复杂性悬崖”。
  • 提出语言更改建议,使与固定引用的交互更类似于普通引用,包括区分固定和非固定位置、引入原生固定引用语法、在方法解析中处理固定等。
  • 阐述位置和值的概念,在 Rust 中是位置具有可变或不可变等属性,而不是值。
  • 强调固定位置的关键思想,通过语言直接强制固定位置规则,可在栈上创建固定绑定,Unpin 类型的固定位置有不同限制。
  • 介绍原生固定引用,&pinned T&pinned mut T 是现有 Pin<&T>Pin<&mut T> 的语法糖,固定引用操作符更符合习惯且功能强大。
  • 说明在方法解析中处理固定,使固定在调用方法时更自然,类似普通可变方法。
  • 使 Pin 方法更易实现,如添加固定方法接收者的语法糖、支持安全固定投影等。
  • Join 未来的实现为例展示代码变化,说明固定引用的使用。
  • 对比新的“不可移动类型”提案,认为将“被固定”表示为类型的属性会引入额外复杂性且不兼容现有生态,而将“可固定”表示为类型属性更好,且所提更改与现有 Pin API 完全兼容。
  • 提到存在比 Pin 更好但不兼容现有 Rust 的设计,但考虑到向后兼容性,认为将“固定位置”概念集成到语言中是更好的选择。

关键信息:

  • Pin 最初为尽快推出异步/等待语法而设计,存在使用困难。
  • 区分固定和非固定位置,引入相关语言特性。
  • 位置和值的概念及在 Rust 中的体现。
  • 原生固定引用语法及操作符。
  • 在方法解析中处理固定的方式。
  • 使 Pin 方法更易实现的措施。
  • 与“不可移动类型”提案的对比。

重要细节:

  • 位置可通过多种方式创建,如通过固定指针、在栈上创建固定绑定等。
  • 固定引用操作符可重复应用,与普通引用类似。
  • 固定方法接收者的特殊语法。
  • 安全固定投影需添加注释,字段也可标记是否在固定状态。
  • Drop 方法在处理固定字段时的特殊要求。
  • 新的 Join 实现展示固定引用的使用。
  • “不可移动类型”提案的复杂性和不兼容性。
  • 所提更改可在不破坏现有异步生态的情况下添加到 Rust 中。
阅读 18
0 条评论