#智能指针 #指针 #cow #共享 #共享指针 #字符串 #rc

bos

灵活的借用、所有或共享(B.O.S.)智能指针。类似于 std 的 Cow,但具有 Rc/Arc,并且没有 ToOwned 要求

10 个版本

0.3.1 2021 年 8 月 22 日
0.3.0 2021 年 8 月 22 日
0.2.2 2021 年 7 月 24 日
0.1.1 2021 年 7 月 18 日

2681Rust 模式

每月 26 次下载

MIT/Apache

48KB
1K SLoC

bos

灵活的 Borrowed, Owned 或 Shared (B.O.S.) 智能指针。类似于 std 的 Cow,但增加了 ArcRc 变体。与 std 的 Cow 不同,它们还可以用于不实现 CloneToOwned 的类型。

查看文档获取更多信息。

安全性

此存储库使用 #![forbid(unsafe_code)]。我们希望保持此存储库 100% 安全,并尽量减少其依赖项。目前,此存储库没有使用不安全代码的依赖项,除非您激活了 serde 功能,这将引入具有一些使用 unsafe 代码的 serde 存储库

许可证

根据您的选择,此存储库受Apache 许可证 2.0 版MIT 许可证的许可。

贡献

除非您明确表示,否则根据 Apache-2.0 许可证定义,您有意提交以包含在此存储库中的任何贡献,均应按上述方式双重许可,而无需任何附加条款或条件。


lib.rs:

此存储库提供灵活的 Borrowed, Owned 或 Shared (B.O.S.) 智能指针。它们类似于 std 的 Cow,但增加了额外的 ArcRc 变体。与 std 的 Cow 不同,它们还可以用于不实现 CloneToOwned 的类型。

bos 智能指针允许您

  • 高效共享数据
  • 在运行时决定所有者
  • 避免在必要时才复制数据

"A" 代表 "原子"

例如,Abos 实现了 SendSync,但没有 Rc 变体。

[Bos] 没有实现 SendSync,但有 Rc 变体。

AbosStrBosStr 类型

Abos 和 [Bos] 经常与 [str] 或类似类型一起使用。请随意查看下面的便捷 类型别名

功能

通过在您的 Cargo.toml 中添加以下内容来启用附加功能或可选依赖项,将 "x.y" 替换为您想要的版本。

[dependencies]
bos = { version = "x.y", features = ["serde", "lifetime"] }

示例

use std::sync::Arc;
use bos::AbosStr;

// No need to allocate memory for a &'static str
let title = AbosStr::Borrowed("Dune");

// The author's name shouldn't be too long.
// So we can just store it in a normal String.
let author = AbosStr::Owned(read_file("dune/author.txt"));

// A whole book is really long.
// And we want to share this string with multiple threads.
// So it would be efficient to store in an Arc,
// since cloning the Arc does not clone the String data inside of it.
let book_text = AbosStr::Arc(Arc::new(read_file("dune/book.txt")));

// We can store a &str, String and Arc<String> inside the same Vec
// because we are using the AbosStr enum.
let book_infos: Vec<AbosStr> = vec![title, author, book_text];

fn read_file(path: &str) -> String {
// ...
}

依赖项

~175KB