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