8 个版本 ()
1.0.0-rc.2 | 2022 年 12 月 3 日 |
---|---|
0.14.0 | 2023 年 3 月 29 日 |
0.13.0 | 2023 年 2 月 18 日 |
0.12.0 | 2023 年 1 月 27 日 |
0.12.0-rc.2 | 2023 年 1 月 20 日 |
#1752 在 解析器实现 中
每月 43 次下载
31KB
700 行
Zeroio 提供了与客户机高效通信的实用工具。
这类似于 serde 的 "序列化" 和 "反序列化",但设计目标不同
- 客户机运行时性能至关重要。
- 如果客户机必须读取一个未对齐在 32 位边界上的值,这将导致显著的性能下降。
- 空间效率很好,但不如客户机运行时性能重要。
- 我们希望能够方便地获取结构的加密散列。
作为回应,zeroio 与 serde 的实现方式不同
- 只有一个网络格式;zeroio 不会试图像 serde 一样功能丰富。
- 可用的数据类型更加有限
- 我们不希望消耗任何周期进行反序列化或复制,因此我们将数据存储在一个易于访问的格式中,类似于 `rkyv' crate。
- 与 rkyv 相比,我们使用切片而不是指针来引用可用的序列化数据。这使我们能够避免不安全代码。
- 我们将所有数据缓冲区存储为 [u32](而不是更常见的 [u8])。
- 有一个规范格式;任何同一数据的序列化都将构建相同的结构。为了获取加密散列,我们只需对 [u32] 切片进行散列。
- 我们将所有数据缓冲区填充为空值,直到散列块的大小(剩下一个单词),以避免在计算散列时进行复制。
请注意,对于反序列化,虽然我们保证 sha(a) == sha(b) 意味着 deserialize_from(a) == deserialize_from(b),但我们不保证相反,即 deserialize_from(a) == deserialize_from(b) 意味着 a == b。
依赖关系
~0.7–1.4MB
~26K SLoC