3 个版本 (破坏性更新)
0.3.0 | 2022年12月29日 |
---|---|
0.2.1 | 2022年12月29日 |
0.1.0 | 2022年12月28日 |
43 在 #string-interning
7KB
98 行
Stagiaire
这个 Rust 包提供了一种 字符串内部化。
请参阅 包文档 以获取详细信息。
已经有了几个类似的包,但我一直在各种个人项目中使用这个包,我需要找个理由来学习如何发布到 crates.io。
lib.rs
:
字符串内部化
字符串内部化存储一个不可变的字符串池,每个字符串值只有一个副本。一个 Symbol
是对这些唯一字符串值指针的包装。符号可以快速比较(指针而不是字符串比较),并且当给定字符串存在多个实例时,存储符号比字符串便宜。
示例
use stagiaire::Symbol;
// Create a new symbol.
let a_foo = Symbol::new("foo");
assert_eq!(a_foo.as_str(), "foo");
// Create another symbol that refers to an existing value.
let another_foo = Symbol::new("foo");
assert_eq!(a_foo, another_foo);
// Both symbols point to the same underlying value.
assert_eq!(a_foo.as_str().as_ptr(), another_foo.as_str().as_ptr());
// A symbol has the same size as a reference.
assert_eq!(std::mem::size_of::<Symbol>(), std::mem::size_of::<&str>());
// Symbols pointing to different values are not equal.
let a_bar = Symbol::new("bar");
assert_ne!(a_bar, a_foo);
生命周期
内部化是一个进程范围内的单例,不通过程序暴露,存储在该处的字符串值在拥有进程终止之前一直存在,因此具有 'static
生命周期。
线程安全性
Symbol
值可以从多个线程创建和访问。
序列化
依赖项
~175KB