18个版本
| 0.7.4 | 2024年5月28日 |
|---|---|
| 0.7.3 | 2023年11月16日 |
| 0.7.2 | 2023年9月22日 |
| 0.7.1 | 2023年4月13日 |
| 0.2.3 | 2021年7月29日 |
#13 in 内存管理
432,851 每月下载量
用于 362 个crates(直接使用24个)
125KB
1K SLoC
yoke 
此crate提供 [Yoke<Y, C>][Yoke],允许将零拷贝反序列化对象(例如,一个 Cow<'a, str>)连接到其反序列化的源(例如,一个 Rc<[u8]>),在此crate中称为“车”,产生一种看起来像 Yoke<Cow<'static, str>, Rc<[u8]>> 的类型,并且可以随意移动。
简而言之,这允许将静态生命周期“擦除”并转换为动态的,类似于 dyn 如何允许将静态类型“擦除”并转换为动态的。
大多数情况下,可牵引的 Y 类型将是一种零拷贝可反序列化的抽象,可能还有一个拥有变体(如 Cow、ZeroVec 或包含此类类型的聚合),而购物车 C 将是一种智能指针,如 Box<T>、Rc<T> 或 Arc<T>,可能被一个 Option<T> 包装。
这个crate的关键在于 [Yoke::get()],其中在类型如 Yoke<Cow<'static, str>, _> 上调用 .get() 将得到一个短暂的生命周期 &'a Cow<'a, str>,限制在 .get() 期间使用的借用生命周期内。这是完全安全的,因为 Cow 从购物车类型 C 借用,只要在 .get() 期间 Yoke 被借用,就不能被干扰。当需要时,.get() 通过将擦除的生命周期重新实化为安全的地方生命周期来保护访问。
有关更多详细信息,请参阅 Yoke 的文档。
更多信息
有关开发、作者、贡献等方面的更多信息,请访问 ICU4X 主页。
依赖项
~200KB