#string #byte #byte-string #comparison #german #heap #prefix

german-str

小字符串优化字符串类型,具有快速比较功能

1个不稳定版本

新版本 0.1.0 2024年8月20日

#5 in #german

MIT许可证

34KB
657

german-str

German字符串是一种具有以下属性的字符串类型

  • 它们是不可变的。
  • size_of::<GermanStr>() == 16
  • 它们的长度不能超过2^32字节。
  • 12个或更少字节的字符串完全位于栈上。
  • 仅取决于前4个字节的比较非常快。

它们在这里被描述 这里. TL;DR: 它是一个16字节的结构,其中

  • 结构的第一个4字节是一个 u32,表示字符串的长度。
  • 字符串的前4个字节直接存储在其后。
  • 如果字符串的其余部分可以适应剩余的8个字节,则直接存储在那里。
  • 否则,最后8个字节是指向堆上字符串缓冲区的指针(该缓冲区包括4个字节的前缀)。

实现受到了 SmolStr 的极大启发。

SmolStr 相比,GermanStr 的主要缺点是默认情况下堆缓冲区之间不共享:这是通过调用 leaky_shared_clone 实现的,它在O(1)时间内克隆,但引入了与手动内存管理相关的风险。

需求

  • [cfg(target_pointer_width= "64")]
  • 该包与 [no_std] 兼容。

基准测试

以下图形由包的基准测试生成。在行的前半部分,对随机ASCII字符串进行比较。因此,绝大多数比较只需要比较前缀。在后半部分(最坏情况),比较的字符串是相同的,每对字节都必须进行比较。除非字符串足够短可以内联,否则性能与比较两个常规 String 相当。

benches

依赖关系

~215KB