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 日 |
2681 在 Rust 模式 中
每月 26 次下载
48KB
1K SLoC
bos
灵活的 Borrowed, Owned 或 Shared (B.O.S.) 智能指针。类似于 std 的 Cow,但增加了 Arc
和 Rc
变体。与 std 的 Cow
不同,它们还可以用于不实现 Clone
或 ToOwned
的类型。
查看文档获取更多信息。
安全性
此存储库使用 #![forbid(unsafe_code)]
。我们希望保持此存储库 100% 安全,并尽量减少其依赖项。目前,此存储库没有使用不安全代码的依赖项,除非您激活了 serde
功能,这将引入具有一些使用 unsafe
代码的 serde 存储库。
许可证
根据您的选择,此存储库受Apache 许可证 2.0 版或MIT 许可证的许可。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义,您有意提交以包含在此存储库中的任何贡献,均应按上述方式双重许可,而无需任何附加条款或条件。
lib.rs
:
此存储库提供灵活的 Borrowed, Owned 或 Shared (B.O.S.) 智能指针。它们类似于 std 的 Cow
,但增加了额外的 Arc
和 Rc
变体。与 std 的 Cow
不同,它们还可以用于不实现 Clone
或 ToOwned
的类型。
bos
智能指针允许您
- 高效共享数据
- 在运行时决定所有者
- 避免在必要时才复制数据
"A" 代表 "原子"
例如,Abos
实现了 Send
和 Sync
,但没有 Rc
变体。
[Bos
] 没有实现 Send
或 Sync
,但有 Rc
变体。
AbosStr
和 BosStr
类型
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