1. 名词解释 X509 公钥证书的格式标准(或规范)。一本 X509 证书的内容里,最重要是以下三个部分: 身份信息(identity):可以是 hostname,组织名,或个人名 公钥(public key):略 数字签名(digital signature):由 CA 签署或者自签 此外还有一些其他数据,例如证书主体的国家、区域、名字;使用的…
1. 共性与区别 写异步 rust 时,我们经常需要一种一次性的通知手段,用于实现线程同步。tokio 提供了两种满足上述需求的同步工具:tokio::sync::oneshot::channel 和 tokio::sync::Notify。 二者主要有以下几点差距: 1.1. 单端与双端设计 对于 oneshot::channel ,自然地分为发…
Pin 是一个结构 struct,Unpin 是一个特征 trait。 Pin 唯一的结构体成员就是一个指针(例如引用和 Box)。它能保证这个指针指向的数据不被移动。 Unpin 代表数据可以被安全地移动,!Unpin 代表数据不可以被安全移动。通常 !Unpin 的都是自引用类型。 如果一个 Unpin 类型的指针被放入 Pin 中,实际上没有…
1. 基本结构 入口类型 ConnectionPool 由一个 Hashmap pool 和一个 lru Lru 组成。 /// Connection pool /// /// [ConnectionPool] holds reusable connections. A reusable connection is released to this…
1. String, &str 和 str 想要搞清楚这三者的差别,要从 str 开始说起。 1.1. str 和 &str str 是字符串切片(string slice),是对部分连续的 UTF8 字符序列的引用。 所有的切片类型,例如 str、[u8]、[i32] ,都是 Unsized 的(不定长类型,或称动态大小类型,Dy…
本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对不当之处进行指正。 这是本系列文章的第 3 篇。 1. 前言 在 rust 中,我们通常使用强制类型转换(coercion)来将一些类型转换为特征对象,下面…
本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对不当之处进行指正。 这是本系列文章的第 2 篇。 1. 前言 dyn Trait 作为所有实现了 Trait 的 base type 的抽象,其自身当然也需…
1. 译者注 本文是 rust 社区大神 quinedot 的系列文章 的翻译版。我在国内各个平台似乎都没有看到现存的翻译,因此尝试做些搬运工作。由于本人的技术和翻译水平都非常有限,难免有错误,非常欢迎大家对翻译不当之处进行指正。 这是本系列文章的第 1 篇。 一些比较难以定夺的翻译: base type 原作者在文中大量使用该词,其本意是指实现了…
1. Fn, FnMut, FnOnce 1.1. 讨论的范畴:闭包 or 通常函数 讨论这三个 trait 时,通常是关于闭包的。普通的 rust 函数被视为实现了以上所有三个trait。可以用下面这段代码证明: fn apply_fn<T>(value: T, f: impl Fn(T) -> T) -> T { f(v…
1. 场景 当我们需要用特征对象的时候,大部分情况下 Rust 编译器可以自动进行类型推断。但是在少数场景下,我们可能需要显式声明特征对象,其中一个例子就是引用 + 关联类型同时出现。 直接来看一个例子,为了更加形象地解释,我们用服务器端程序的场景来命名出现的类型和特征。首先,我们需要一个 Listener 的 trait: trait Liste…