Rust Trait+ 系列

这篇文章介绍了一系列 Rust 中利用 trait 实现的通用能力或惯用法,这些内容也是 Rust 编程中较常见的概念、方法和技巧,实用性很强,我称之为“Trait+ 系列”。

建议先阅读 Rust 中的特征 (Trait) 一文,配合食用效果更佳。

理解 Rust 异步编程

Rust 的异步特性很强大,相对也比较复杂。

为了更好的理解 Rust 的异步特性,本文分别从 Rust 异步的特点、与多线程的对比、异步的用法介绍及注意事项、内部实现机制、和其他语言的横向对比等多个方面进行阐述。

Rust 中的 Pin, Unpin 和 !Unpin

为什么需要 Pin?

引入 Pin 的目的主要是为了支持 自引用类型 (self-referential types) 。下面我们以 Future 为例,解释一下自引用类型以及引入 Pin 的必要性。

由于异步块/异步函数中可能包含对局部变量的引用,例如下面的代码:

理解 Rust 的生命周期 (Lifetime)

Lifetime 的主要目的是防止悬空引用 (dangling references)

下面的例子中, borrow checker 会检查 r 的生命周期 'a 比其引用的数据的生命周期 'b 要长,因此会拒绝编译通过。