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…
rust 笔记1: 黑魔法之 std::mem::transmute
1. 摘要 当我们在写工厂方法时,有时会希望同时返回两个值:一个目标对象 + 对该对象某个成员的引用。这种设计初听起来可能非常不合理,但是当使用某些封装不太完美的第三方库时是可能出现的。举个例子:我们需要一个对象 A(A 由第三方库提供,因而无法改造),而又要构造一个工具对象 B,其中 B 又持有 A 中某个成员的引用。 显然,A 和 B 是强绑定…
ld.so 相关知识
1. 引子 今天在工作中用 ldd 检查 tengine 的可执行文件时,出于好奇看了一下里面涉及的 ld-linux-x86-64.so.2 动态链接库,然后查到了这样一个神奇的问答: https://unix.stackexchange.com/questions/400621/what-is-lib64-ld-linux-x86-64-so-…