Boxed类型上实现AsyncRead(Tokio)具有以下签名:

impl<T: ?Sized + AsyncRead + Unpin> AsyncRead for Box<T>

为什么这里的性状要求是Unpin呢?为什么Box还不足以保证地址的 solidity ?

推荐答案

为什么在这里需要解锁受特性约束?

普通老式Box<T>没有被钉住,因此它生成的任何异步操作都将要求底层T不关心钉住(即IS Unpin).

为什么Box还不能保证地址的 solidity ?

你可以在平坦的Box度内移动或更换物体,这会打破 solidity 保证.Pin不允许mut在没有unsafe的情况下访问,从而防止了值的转义.

Rust相关问答推荐

在‘await’点上使用‘std::同步::Mutex’是否总是会导致僵局?

MacOS(AARCH64)上Ghidra中的二进制补丁导致进程终止

关于如何初始化弱 struct 字段的语法问题

是否可以使用Rust宏来构建元组的项?

如何高效地将 struct 向量中的字段收集到单独的数组中

如何在不调用Collect()的情况下为新型vec实现IntoIterator?

为什么Deref类特征不构成?

将Vec<;U8&>转换为Vec<;{Float}&>

如何正确使用git2::Remote::push?

如何从borrow 的异步代码运行阻塞代码?

trait 对象指针的生命周期

`tokio::pin` 如何改变变量的类型?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

有没有办法通过命令获取 Rust crate 的可安装版本列表?

如何将这些测试放在一个单独的文件中?

为什么数组不像向量那样在 for 块之后移动?

在 Rust 中如何将值推送到枚举 struct 内的 vec?

为实现特征的所有类型实现显示

编写 TOML 文件以反序列化为 struct 中的枚举

有什么办法可以用 Rust 访问 Windows 最近的文件夹吗?