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
衍生PartialOrd
和Ord
,以便更容易地在如petgraph
之类的 crate 中用作键。
- 为
-
0.1.0
- 初始实现。
依赖项
~48KB