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 内存管理

Download history 41273/week @ 2024-05-02 39456/week @ 2024-05-09 39899/week @ 2024-05-16 42662/week @ 2024-05-23 42312/week @ 2024-05-30 291787/week @ 2024-06-06 586973/week @ 2024-06-13 259399/week @ 2024-06-20 184129/week @ 2024-06-27 105039/week @ 2024-07-04 102061/week @ 2024-07-11 101106/week @ 2024-07-18 100153/week @ 2024-07-25 109644/week @ 2024-08-01 115029/week @ 2024-08-08 91183/week @ 2024-08-15

432,851 每月下载量
用于 362 个crates(直接使用24个)

Unicode-3.0

125KB
1K SLoC

yoke crates.io

此crate提供 [Yoke<Y, C>][Yoke],允许将零拷贝反序列化对象(例如,一个 Cow<'a, str>)连接到其反序列化的源(例如,一个 Rc<[u8]>),在此crate中称为“车”,产生一种看起来像 Yoke<Cow<'static, str>, Rc<[u8]>> 的类型,并且可以随意移动。

简而言之,这允许将静态生命周期“擦除”并转换为动态的,类似于 dyn 如何允许将静态类型“擦除”并转换为动态的。

大多数情况下,可牵引的 Y 类型将是一种零拷贝可反序列化的抽象,可能还有一个拥有变体(如 CowZeroVec 或包含此类类型的聚合),而购物车 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