9 个不稳定版本 (3 个破坏性更改)
0.4.1 | 2024年2月23日 |
---|---|
0.4.0 | 2024年2月23日 |
0.3.1 | 2024年2月23日 |
0.2.4 |
|
0.1.0 | 2023年11月18日 |
#1070 在 Rust 模式
用于 orchidlang
19KB
336 行
一个用于混合/任意类型数据的互斥器。它使用弱引用和默认分配器,因此可以在长时间运行的过程中使用。
use std::env;
use std::path::PathBuf;
use intern_all::{i, Tok};
// Intern a value
let a: Tok<String> = i("foo");
// Intern a path
let b: Tok<PathBuf> = i(&env::current_dir().unwrap());
还提供了一些方便的方法,以便更容易地处理列表
use intern_all::{i, ibv, iv, Tok};
// Intern a list as a slice of tokens
let v1: Tok<Vec<Tok<String>>> = i(&[i("bar"), i("quz"), i("quux")][..]);
// Intern a list of internable values
let v2: Tok<Vec<Tok<String>>> =
iv(["bar".to_string(), "quz".to_string(), "quux".to_string()]);
// Intern a list of the borrowed form of internable values
let v3: Tok<Vec<Tok<String>>> = ibv(["bar", "quz", "quux"]);
assert!(v1 == v2 && v2 == v3)
互斥器使用弱引用,但未引用的值仍然在令牌表中占用空间。为了避免内存泄漏,您可以使用 sweep
或 sweep_t
定期从互斥器中删除引用未引用值的条目。
use intern_all::{sweep, sweep_t};
// use this for general housekeeping
sweep();
// use this if a lot of temporary values of a particular interned type
// had been dropped recently
sweep_t::<String>();
依赖关系
~3.5MB
~59K SLoC