225 字
1 分钟
Rust 为什么需要 Pin
2024-09-08

原文#

https://blog.cloudflare.com/pin-and-unpin-in-rust/

自引用类型的问题#

  • 自引用类型包含指向自身的指针
  • 当这种类型被移动时,内部指针可能会失效,导致未定义行为

Pin 和 Unpin 的解决方案#

  • Unpin:可以安全移动的类型会自动实现 Unpin trait。
  • !Unpin:不能安全移动的类型。
  • Pin:包装一个指针,防止其指向的值被移动。

使用 Pin#

  • Future 的 poll 方法接收 Pin<&mut Self> 参数。
  • 需要编写投影(projection)方法来安全地访问 Pin 包装的结构体字段。
  • 可以使用 pin-project crate 来自动生成安全的投影方法。

总结#

  • Pin 使得自引用类型(如某些 Future)可以安全使用。
  • 大多数类型默认实现 Unpin,不需要特别处理。
  • 对于 !Unpin 类型,使用 Pin 可以保证安全性。
  • 实际编程中,可以利用 pin-project crate 简化 Pin 的使用。
Rust 为什么需要 Pin
https://blog.lpkt.cn/posts/rust-pin/
作者
lollipopkit
发布于
2024-09-08
许可协议
CC BY-NC-SA 4.0