3 个版本 (破坏性更新)
0.3.1 | 2023 年 8 月 27 日 |
---|---|
0.2.0 | 2023 年 8 月 27 日 |
0.1.0 | 2023 年 5 月 22 日 |
#2187 在 Rust 模式
26KB
493 行
一个基于固定容量、栈分配和 const 泛型的字符串。不能超出其给定的容量,并且总是占用精确的 CAPACITY
字节,无需额外的字节来存储长度。
为什么
因为我是一个吝啬鬼,认为在 8GB 内存的本本上节省字节很重要。
更正式地说,这是一个为需要少量字节(例如 4 或 8 个字节以完美适应寄存器)的领域优化的空间优化、栈分配字符串的证明概念,并且添加一个字节来存储长度会增加字符串的总大小,但这个增加并不显著。
当然需要基准测试来确定计算长度的开销是否值得,或者是否有一些字节专门用于长度最终会更快。无论如何,我的完美主义者倾向得到了满足,这个项目足够好,可以作为一个我正在工作的项目的内部依赖。
如何
UTF-8 是 上帝发送的编码 一种变长编码,Rust 通过确保所有字符串都是正确的有效 UTF-8 而充分利用了它。这意味着 Rust 中的任何字符串都不能包含任何非 UTF-8 字符或任何无效的 UTF-8 字节。这可以被利用,因为显然,数组的最后一个字节不能是有效的 UTF-8,如果它也是多字节字符的开始。由于有 64 个(0xC0..=0xFF),我们可以无歧义地编码长度值(0-63 带有前导字节,第 64 个是任何有效的 UTF-8)。
你应该使用这个吗?
可能不会。我在大约 2 或 3 天的时间里把它拼凑起来,进行了很少的正规测试,并且可能在未来几个月内立即进入维护模式。
依赖项
~165KB