#string-interning #interning #symbol #intern #cache

simple-symbol

方便的、基本的字符串内联

5 个版本 (稳定版)

3.1.0 2021年1月3日
3.0.0 2020年4月28日
2.0.0 2019年6月20日
1.0.0 2018年7月19日
0.1.0 2018年7月17日

#155 in 缓存

自定义许可证

9KB
132

simple-symbol

已经有许多字符串内联库了,所以这个库主要是为了我的个人使用案例:编写一个不需要在所有地方传递结构的编译器。

示例

use simple_symbol::{intern, resolve};

pub fn main() {
    let a = intern("A");
    let b = intern("A");

    assert_eq!(a, a);

    let c = intern("B");

    assert_ne!(a, c);
    assert_ne!(b, c);

    // Prints "A"
    println!("{}", a);

    let str_a = resolve(a);

    assert_eq!(str_a, "A");
}

符号通过 usize 索引进行比较,并且在打印或转换时自动查询全局 INTERNER 结构。

限制

在整个程序运行期间都会泄漏内联字符串。不适合长时间运行的程序。

更新日志

  • 3.1.0

    • 使用字典序而不是插入序进行比较,这较慢,但更稳定。
    • lazy_static 切换到 once_cell
  • 3.0.0

    • intern 函数更改为接受更常见的 S: AsRef<str> 而不是 S: Into<Cow<'a, str>>
    • 添加了一个新的 intern_static 函数,以避免泄漏已经 'static 的数据。
  • 2.0.0

    • 泄漏字符串而不是进行双重分配。
    • 更改为 RwLock 并使用 lazy_static 以支持多线程程序。
    • 更新 API。
  • 1.0.0

    • Symbol 衍生 PartialOrdOrd,以便更容易地在如 petgraph 之类的 crate 中用作键。
  • 0.1.0

    • 初始实现。

依赖项

~48KB