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日 |
#213 在 Rust 模式
每月下载量 78
用于 6 crates
125KB
2.5K SLoC
该库定义了具有写时复制语义的字符串。
CowStr
是一种 String,可以初始化为静态字符串或动态构建。其内容可以不可变地共享和引用计数。当需要修改时,字符串将被复制。
这类似于改进的 Arc<Cow<'static, str>>
,有一些不同
- 从
Arc
到String
到实际数据的引用没有双重解引用。 - 没有
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