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 或 https://open-source.org.cn/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::clearAPI - 添加了
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