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