3 个不稳定版本
0.3.0-alpha2 | 2021年11月8日 |
---|---|
0.3.0-alpha1 | 2021年10月11日 |
0.1.1 |
|
0.1.0 | 2020年4月1日 |
1304 在 数据结构
每月31 次下载
50KB
803 行
字符串池
Linux | Windows | Codecov | Coveralls | 文档 | Crates.io |
---|---|---|---|---|---|
一个高效缓存字符串的数据结构,具有最小的内存占用和将池化字符串与唯一符号关联的能力。这些符号允许对底层池化字符串内容进行常数时间比较和查找。此外,遍历池化字符串也是缓存高效的。
内部结构
- 内部使用一个哈希表
M
和一个向量V
。 V
存储池化字符串的内容,而M
则包含对V
中字符串的内部引用,以避免重复。V
通过间接引用存储字符串,以避免迭代器失效。- 返回的符号通常具有较低的内存占用,并且可以高效比较。
计划中的功能
- 安全的抽象包装器,可保护用户免受以下误用的侵害
- 使用不同字符串池实例的符号来解决另一个字符串。
- 使用已经不再有效的符号(即关联的字符串池不再可用)。
许可证
根据您的选择许可
- Apache 许可证,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
双许可:

贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,都将如上双重授权,没有任何附加条款或条件。
变更日志
-
0.7.1
- CRITICAL 修复了在
StringInterner::clone()
中的使用后释放的漏洞 - 为
StringInterner
实现了std::iter::Extend
Sym::from_usize
现在避免了使用unsafe
代码- 优化了
StringInterner
的FromIterator
实现 - 迁移到 Rust 2018 版本
感谢 YOSHIOKA Takuma 实现了这个版本。
- CRITICAL 修复了在
-
0.7.0
- 将许可证从 MIT 更改为 MIT/APACHE2.0
- 删除了类型
Symbol
的泛型实现,这些类型是From<usize>
和Into<usize>
- 由于使用该API会破坏不变性,因此删除了
StringInterner::clear
API - 添加了
StringInterner::{capacity, reserve}
API - 引入了一个新的默认符号类型
Sym
,它是对NonZeroU32
的薄包装(灵感来自 koute) - 将
DefaultStringInterner
定义为新StringInterner<Sym>
- 为
StringInterner<S: Sym>
添加了方便的FromIterator
实现 - dev
- 重写了所有单元测试(serde 测试仍然缺失)
- 完全重构了基准测试框架
- 将
html_root_url
添加到 crate 根目录
感谢 matklad 提供建议和推动
-
0.6.3
- 修复了一个错误,该错误使
StringInterner
的Send
实现没有遵守其泛型HashBuilder
参数。修复了 GitHub 问题 #4。
- 修复了一个错误,该错误使
-
0.6.2
- 为
StringInterner
添加了公共方法shrink_to_fit
-(由 artemshein 提供)
- 为
-
0.6.1
- 修复了一个错误,该错误由于悬垂指针导致插入非拥有字符串类型(例如
str
)而损坏(感谢 artemshein 修复它!)
- 修复了一个错误,该错误由于悬垂指针导致插入非拥有字符串类型(例如
-
0.6.0
- 添加了可选的 serde 序列化和反序列化支持
- 为
StringInterner
添加了更高效和泛型的PartialEq
实现 - 使
StringInterner
泛型化BuildHasher
以允许使用自定义哈希器
-
0.5.0
- 为
StringInterner
添加了IntoIterator
特征实现 - 大大简化了迭代器代码
- 为
-
0.4.0
- 删除了
Symbol
的Unsigned
限制
- 删除了
-
0.3.3
- 将
Send
和Sync
添加到InternalStrRef
中,以使StringInterner
本身Send
和Sync
- 将
依赖项
~0.5–1MB
~17K SLoC