#string-interning #interning #string #symbol

stagiaire

又一个字符串内部化库

3 个版本 (破坏性更新)

0.3.0 2022年12月29日
0.2.1 2022年12月29日
0.1.0 2022年12月28日

43#string-interning

MIT 许可证

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 值可以从多个线程创建和访问。

序列化

Symbol 可以可选地使用 serde 进行序列化和反序列化。要启用此功能,请使用带有 serde 功能构建。

依赖项

~175KB