#smart-pointers #cow #str #user-friendly #slice #path #borrow

无 std dairy

更紧凑、用户友好的写时复制智能指针

5 个版本

0.2.2 2021 年 7 月 11 日
0.2.1 2021 年 7 月 5 日
0.2.0 2021 年 7 月 4 日
0.1.1 2021 年 7 月 1 日
0.1.0 2021 年 6 月 27 日

#340内存管理

每月 23 次下载

MIT/Apache

56KB
1.5K SLoC

dairy

Crates.io Version Docs.rs Latest Build Status

更紧凑、用户友好的写时复制智能指针。

use dairy::Cow;
let borrowed: Cow<str> = Cow::borrowed("Hello World!");
let owned: Cow<str> = Cow::owned(String::from("Hello World!"));

🚀 入门指南

将以下内容添加到您的 Cargo 清单中。

[dependencies]
dairy = "0.2"

no_std 也支持通过禁用默认的 std 功能。需要分配器。

[dependencies]
dairy = { version = "0.2", default-features = false }

Serde 支持在 serde 功能之后。

[dependencies]
dairy = { version = "0.2", features = ["serde"] }

🤔 描述

dairy::Cow 是标准库中 std::borrow::Cow 的改进版本。根据平台和类型,这个 crate 提供了一个更好的底层实现,这将更加紧凑。这个 crate 目前支持以下类型: str[T]CStrOsStrPath

dairy::Cow 还能提供更多 From 实现;其中一些由于 allocstd 的分离,标准库无法提供。例如,现在 Cow<Path> 有一个有用的 From<&str> 实现。

底层实现

  • 在 64 位平台上,Cow 的紧凑实现为两个字宽,将长度、容量和所有者标记存储在同一词中。
  • 在32位平台上,紧凑型Cow实现为三个字宽,将容量和所有者标记存储在同一个字中。
  • 默认实现简单地使用标准库实现,为四个字宽。这通常在标准库没有为类型的所有权版本提供.into_raw_parts()或等效方法时使用。

以下表格记录了根据平台,如何为每种类型的Cow<T>实现。

Cow<T> Unix/WASI 其他
Cow<str> 紧凑型 紧凑型
Cow<[T]> 紧凑型 紧凑型
Cow<CStr> 紧凑型 紧凑型
Cow<OsStr> 紧凑型 默认
Cow<Path> 紧凑型 默认

致谢

一些实现细节来自优秀的beef crate。

许可证

在以下许可证中选择一项。

任选其一。

依赖关系

~170KB