#string-interning #string #interning #编译时 #字符串转换

无 std intern-str

高效的 Rust 编译时字符串池化

1 个不稳定版本

0.1.0 2022年9月25日

#2407 in 算法


用于 2 crates

MIT/Apache

26KB
476

intern-str

intern-str 是一个用于 Rust 字符串池化的库。它允许你构建一个图,可以将字符串(和字节字符串)转换为任意值。此外,这些图是 no_std,可以在编译时嵌入到项目中。

目标是实现低成本的、高效的字符串池化,而不需要分配器或标准库。预期的用例是 MIME 类型,但它也可能在其他许多情况下很有用。

intern-strno_std,无 extern crate allocforbid(unsafe_code),并且除了 Rust 的 core 库之外没有依赖。

实现

intern-str 生成一个由给定字符串集合的所有可能选项组成的确定有限自动机(DFA)。然后使用这个 DFA 将字符串转换为值。DFA 在编译时生成,并嵌入到二进制文件中。这允许在没有分配器或标准库的情况下进行高效的字符串池化。

在许多情况下,这种方法比将字符串转换为小写并匹配它要快得多。当在 /usr/share/dict/words 上匹配时,intern-str 通常在 50 纳秒内完成查询。

这种方法的主要优势是它可以用来创建不区分大小写的匹配,这在其他库(如 phf)中要困难得多。当与 phf 进行比较时,如果 phf 在运行前需要将字符串转换为小写,那么 intern-str 通常与 phf 一样快,甚至更快。

MSRV

当前的最低安全 Rust 版本(MSRV)是 Rust 1.31.0。任何 MSRV 的变化都至少会导致小版本号的提升。

许可协议

intern_str 根据以下其中之一进行许可:

任选。

无运行时依赖