在Rust中,Unpin是什么?



我无法找到文档中提到的!Unpin的文档。

更一般地说,!操作符似乎缺乏与特征相关的文档。具体来说,它似乎代表NotNot UnpinNot Unpinable在这种情况下。我想这是不同于Pin在某些方面,否则它将是多余的。目前,搜索文档是具有挑战性的,因为!经常出现。

如果!在性状上的操作符行为能包含在附录B:文档的操作符和符号中就好了。

Unpin是几个自动特征之一,它对任何与它兼容的类型自动实现。在Unpin的情况下,这基本上是所有的类型。

Auto-traits(以及onlyAuto-traits)可以通过在trait名前面加上!来实现否定的实现。

// By default, A implements Unpin
struct A {}
// But wait! Don't do that! I know something you don't, compiler.
impl !Unpin for A {}

Unpin,特别地,向Rust表明将实现类型T的值移出Pin是安全的。正常情况下,Pin表示不能移动里面的东西。Unpin则相反,它说"我知道我们只是固定了这个值,但是我,作为这个类型的作者,知道无论如何移动它都是安全的"。

一般来说,Safe Rust中的任何内容都是Unpin。你唯一想要标记为!Unpin的时候是如果它与另一种语言(如C)中的东西接口,如果你有一个数据类型,你在C中存储指针,例如,那么C代码可能是在假设数据永远不会改变地址的情况下编写的。在这种情况下,您会想要否定Unpin的实现。

最新更新