#智能指针 #引用计数 #不可变性 #克隆 #Cow #字符串 #存储

oco_ref

一种用于存储具有相对较低克隆成本的不可变值的智能指针。(类似于 Cow 与 Rc 的结合!)

3 个不稳定版本

0.2.0 2024 年 4 月 27 日
0.1.1 2024 年 4 月 16 日
0.1.0 2024 年 4 月 16 日

295Rust 模式

Download history 72/week @ 2024-04-29 28/week @ 2024-05-06 23/week @ 2024-05-13 36/week @ 2024-05-20 167/week @ 2024-05-27 3101/week @ 2024-06-03 3626/week @ 2024-06-10 4069/week @ 2024-06-17 5060/week @ 2024-06-24 2903/week @ 2024-07-01 3553/week @ 2024-07-08 4782/week @ 2024-07-15 5524/week @ 2024-07-22 6252/week @ 2024-07-29 4915/week @ 2024-08-05 5583/week @ 2024-08-12

22,716 每月下载量
用于 135 个crate(2个直接使用)

MIT 许可证

22KB
494 代码行

此模块包含 Oco(所有克隆一次)智能指针,用于存储值的不可变引用。这对于存储字符串等非常有用。

想象一下,这是一个带有额外引用计数的分支的 [Cow] 的替代品。

use oco_ref::Oco;
use std::sync::Arc;

let static_str = "foo";
let arc_str: Arc<str> = "bar".into();
let owned_str: String = "baz".into();

fn uses_oco(value: impl Into<Oco<'static, str>>) {
    let mut value = value.into();

    // ensures that the value is either a reference, or reference-counted
    // O(n) at worst
    let clone1 = value.clone_inplace();

    // these subsequent clones are O(1)
    let clone2 = value.clone();
    let clone3 = value.clone();
}

uses_oco(static_str);
uses_oco(arc_str);
uses_oco(owned_str);

lib.rs:

此模块包含 Oco(所有克隆一次)智能指针,用于存储值的不可变引用。这对于存储字符串等非常有用。

依赖项

~0.4–1MB
~22K SLoC