#string #atom #cache #registry #constant #applications #memory

tomt_atom

基本原子(字符串)注册表,用于与ID字符串一起使用。对于包含并传递许多常量字符串(主要是反序列化字符串)的应用程序,这应该会减少整体内存占用,并略微增加缓存使用率

7个版本

0.1.7 2024年1月21日
0.1.6 2024年1月19日

#79 in 缓存

每月42次下载

MIT/Apache

11KB
208

MIT/Apache 2.0 Crate Realease Doc

简介

一个用于与ID字符串一起使用的基本原子(字符串)注册表。

对于包含并传递许多常量字符串(主要是反序列化字符串)的应用程序,这应该会减少整体内存占用,并略微增加缓存使用率

警告:此crate的性能影响应进行测试,以确保它适合您的用例。在许多情况下,这种缓存机制是多余的,并且此crate可能会因为注册原子所需的内存分配以及哈希查找而损害性能。

此项目的灵感来源

用法

原子可以直接创建,并作为引用传递给函数,或克隆以避免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添加了PartialEqEq特质
0.1.5 添加了功能 "serde",以实现 Deserialize/Serialize
0.1.6 AtomAtomRegistry 添加了 Default 特性
0.1.7 Atom 添加了不可失败 FromStr 特性(我需要在更高层级的项目中使用它,因此通过功能 "from_str" 实现)。向 Atom 添加了 Hash 特性

贡献

有任何想法、反馈、问题或发现了bug吗?随时欢迎在GitHub上创建问题!

许可证

TOMT_Atom 可以选择以下任一许可证

  • MIT 许可证(在 仓库 或从 [源代码][licence-MIT-remote] 获取)
  • Apache License,版本 2.0(在 仓库 或从 源代码 获取)

这意味着您可以选择您喜欢的许可证!这种双许可证的方法是Rust生态系统中的事实标准,并且包含两个许可证都有很好的原因。

依赖项

~170KB