Hasty Briefsbeta

双语

Deser: Rethinking Rust Serialization

4 hours ago
  • Serde 由于其设计存在局限性,包括与内部标记枚举、flatten 和任意精度特性的交互不佳。
  • Deser 是一个新的序列化库,它反转了 Serde 的架构,采用基于堆状态的 sink/emitter 模型,从而避免递归并支持流式处理。
  • Deser 支持自描述格式,如 JSON、YAML、TOML、XML 和 CBOR,但不支持非自描述格式,如 protobuf。
  • Deser 的设计避免了对扩展(如任意精度、日期时间)使用带内信号,并提供了更好的错误定位。
  • Deser 提供了适配器和验证器(如 Hex、DisplayFromStr、Check),它们可以与泛型良好地组合。
  • 与 Serde 相比,Deser 在 XML 命名空间处理和未标记枚举缓冲方面有所改进。
  • 性能优劣参半:Deser 的读取速度平均比 serde_json 慢约 10%,但编译速度更快,二进制膨胀更小。
  • Deser 在内部对堆分配的 sink 使用 unsafe,但在现代工具链下被认为是安全的。
  • 最大的代价是 Deser 不是 Serde,因此生态兼容性有限。