8.1 什么是 pinning
01-什么是 pinning — Comprehensive Rust
1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/unsafe-deep-dive/pinning/what-pinning-is.html
8.1 什么是 pinning
- 被固定的类型不能改变其内存地址(移动)
- 被指向的值不能被 safe 代码移动
Pin<Ptr> 利用所有权系统来控制如何访问被固定的值。Rust 并未改变语言本身,而是通过所有权系统来强制 pinning。Pin 拥有其内容,且其 safe API 中没有任何操作会触发移动。
这一点将在后续讲解
从概念上讲,pinning 阻止了默认的移动行为。
这看起来像是语言本身的改变。
然而,
Pin包装器实际上并未改变语言的任何根本特性。
Pin不暴露允许移动的 safe API,因此它可以阻止按位拷贝。unsafe API 允许库作者包装未实现
Unpin的类型,但他们必须维护相同的保证。
Pin的文档使用术语「pointer types(指针类型)」。「指针类型」比语言中的指针原始类型含义更广。
「指针类型」指实现了
Deref、且其Target实现了Unpin的任意类型。Rust 风格说明:这一 trait 约束通过
::new()构造函数的 trait 边界来强制,而非约束类型本身。