31 个版本 (4 个稳定版)

1.3.0 2024年1月23日
1.2.0 2023年7月29日
1.0.0 2023年6月20日
0.13.0 2023年3月21日
0.9.0 2022年11月16日

#213Rust 模式

Download history 7/week @ 2024-04-22 6/week @ 2024-04-29 11/week @ 2024-05-20 23/week @ 2024-06-03 10/week @ 2024-06-10 5/week @ 2024-06-17 8/week @ 2024-06-24 4/week @ 2024-07-08 8/week @ 2024-07-15 58/week @ 2024-07-22 8/week @ 2024-07-29 4/week @ 2024-08-05

每月下载量 78
用于 6 crates

MIT/Apache

125KB
2.5K SLoC

该库定义了具有写时复制语义的字符串。

CowStr

是一种 String,可以初始化为静态字符串或动态构建。其内容可以不可变地共享和引用计数。当需要修改时,字符串将被复制。

这类似于改进的 Arc<Cow<'static, str>>,有一些不同

  • ArcString 到实际数据的引用没有双重解引用。
  • 没有 Weak 引用。
  • CowStr 可以进行内部可变扩展(在末尾追加)。
  • 改进的 AllocationStrategy

CowStr 实现了许多 std::String 方法。需要添加的方法将按需添加,欢迎 PR。

SubStr

指向 CowStr 内部的不可变切片。这与 String/&str 的关系有些相似,而 SubStr 保持对其原始 CowStr 的强引用,因此不需要生命周期。

功能

  • serde 包装默认字符串(反)序列化。
  • nightly 启用一些 nightly 优化和扩展

实现说明

CowStr 旨在共享不可变字符串,一个简短的 CowStr 比标准的 String 占用略多的内存。但是一旦 CowStr 被克隆或使用了 SubStr's,它就会得到回报。特别是由于 SubStr 不需要生命周期,因为它们使用引用计数内存管理,这使得内存管理变得显著更容易。

由于Rust对DST的CowStr支持尚不完整,因此需要一些不安全代码。当可能时,由debug_assert强制执行合约。

测试

CowStr附带了一个全面的测试套件。"cargo-mutants"用于检测缺少的测试。发布版本必须在"miri"下通过测试。

依赖项

~79–305KB