7个版本
0.1.7 | 2024年1月21日 |
---|---|
0.1.6 | 2024年1月19日 |
#79 in 缓存
每月42次下载
11KB
208 行
简介
一个用于与ID字符串一起使用的基本原子(字符串)注册表。
对于包含并传递许多常量字符串(主要是反序列化字符串)的应用程序,这应该会减少整体内存占用,并略微增加缓存使用率
警告:此crate的性能影响应进行测试,以确保它适合您的用例。在许多情况下,这种缓存机制是多余的,并且此crate可能会因为注册原子所需的内存分配以及哈希查找而损害性能。
此项目的灵感来源
- 使用Arc而不是Vec - Logan Smith (YouTube/@_noisecode)
- 原子表 - Microsoft Windows
用法
原子可以直接创建,并作为引用传递给函数,或克隆以避免Rust的所有权语义。
use tomt_atom::Atom;
fn construct_example()
{
// Create atoms directly with `new()` constructor
let atom = Atom::new("My &'static str example");
// `new()` accepts any type that implements `AsRef<str>`
let atom = Atom::new(String::new("My owned String example"));
}
fn convert_example()
{
// Atom supports `From<&str>` and `From<String>``
let atom: Atom = "Another &'static str example".into();
// This should help if you need pass atoms directly
let result = function_accepting_atom("Quick convert example".into())
}
理想情况下,原子应注册到全局表中。这将提供查找以返回现有原子(如果存在)或创建一个(如果不存在)。仅有的原子可能会减少整体内存占用,但使用注册表,相同的字符串将始终产生相同的原子。
use tomt_atom::*;
fn global_registry()
{
// Use built-in global registry
let accept = AtomRegistry::global().register("application/json");
// Create your own registry to pass via a service
let mimes = AtomRegistry::new();
let accept = mimes.register("application/json");
// Unregistering will remove the entry in the lookup table, but all existing
// Atoms will remain valid, and may continue to be cloned and passed around
mimes.unregister("application/json");
}
注册表是间接的,支持Send
/Sync
,并且可以廉价地克隆。克隆的注册表指向相同的原子表,一个中的更新将在两个中反映。
更新日志
版本 | 更改 |
---|---|
0.1.0 | 初始发布 |
0.1.1 | 修复潜在的哈希冲突错误 |
0.1.2 | 更新readme用法。改进构造语义 |
0.1.3 | 为Atom 添加了Display 特质 |
0.1.4 | 为Atom 添加了PartialEq 和Eq 特质 |
0.1.5 | 添加了功能 "serde",以实现 Deserialize /Serialize |
0.1.6 | 向 Atom 和 AtomRegistry 添加了 Default 特性 |
0.1.7 | 向 Atom 添加了不可失败 FromStr 特性(我需要在更高层级的项目中使用它,因此通过功能 "from_str" 实现)。向 Atom 添加了 Hash 特性 |
贡献
有任何想法、反馈、问题或发现了bug吗?随时欢迎在GitHub上创建问题!
许可证
TOMT_Atom 可以选择以下任一许可证
这意味着您可以选择您喜欢的许可证!这种双许可证的方法是Rust生态系统中的事实标准,并且包含两个许可证都有很好的原因。
依赖项
~170KB