< 返回版块

shaitao 发表于 2019-11-23 17:27

关于Pin, 看了文档和一些资料, 就很绕. 是不是最后的意思是

Pin<T> === Pin<Box<T>> where T:Unpin

Pin<T>: Unpin where T:!Unpin

晕了


Ext Link: https://doc.rust-lang.org/nightly/std/pin/index.html

评论区

写评论
作者 shaitao 2019-12-06 13:30

嗯嗯

对以下内容的回复:

kylidboy 2019-12-02 16:39

Jon的视频是真的不错 对以下内容的回复:

laizy 2019-11-25 01:01
简单来说,P是一个指针类型,Pin<P> 是对指针类型的约束,防止拿到指针指向对象的&mut 引用。
1. T :Unpin时,约束失效, Pin<Box<T>> === Box<T>, Pin<&mut T> === &mut T.
2. 另外Pin本身也是一个类型,不管T是不是Unpin,都有Pin<Box<T>>: Unpin,Pin<&mut T> : Unpin.
这也是为啥当一个Future没有实现Unpin时,放进一个Pin<Box<Future>> 就行了。

同时,1和2联合起来可得: Pin<Box<Pin<Box<T>>>> === Box<Pin<Box<T>>>, Pin<&mut Pin<Box<T>>> === &mut Pin<Box<T>>.

我在知乎上也写了篇文章,你可以搜索:"Pin概念解析",应该能找到。
7sDream 2019-11-23 22:01

概念是挺绕的。

可以看一下 Jon 几个月前的直播视频《The Why, What, and How of Pinning in Rust》。

另外他还有一个计划中的 Topic 是《Non-async pinning》,准备介绍 Pin 在异步领域之外的用法。如果比较喜欢这个 Topic 的话,可以在他的 Rust live-stream voting 网站里投上一票~

不过最近 IRLO 里各大佬正在讨论当前 Pin 的实现的问题,因为有人发现它可能会破坏 Rust 内存安全保证。

1 共 4 条评论, 1 页