12 个不稳定版本 (4 个破坏性更新)

0.6.0 2024年6月13日
0.5.0 2024年5月31日
0.4.2 2023年12月3日
0.4.1 2023年7月27日
0.1.3 2023年2月13日

#570解析器实现

Download history 25/week @ 2024-04-25 4/week @ 2024-05-16 24/week @ 2024-05-23 591/week @ 2024-05-30 93/week @ 2024-06-06 291/week @ 2024-06-13 16/week @ 2024-06-20 20/week @ 2024-06-27 58/week @ 2024-07-04 30/week @ 2024-07-11 63/week @ 2024-07-18 45/week @ 2024-07-25 41/week @ 2024-08-01 24/week @ 2024-08-08

每月174次下载

MPL-2.0 许可证

220KB
6K SLoC

alox-48

alox-48(铝氧化物48的缩写)是一个用于反序列化和序列化的crate,同时支持Ruby的Marshal数据格式,使用类似于serde的自定义数据格式。

alox-48旨在提供几乎完美的往返反序列化,但有例外

  • 对象链接不被保留。对象链接是Ruby在marshal中压缩数据的一种方式。它们高度依赖于Ruby拥有GC,因此不适合映射到Rust。
  • 大数不支持。

为什么使用自定义数据格式

最初这个crate依赖于nightly来扩展serde,使用 min_speciailization。不幸的是,这有很多缺点,反序列化器经常在有效输入上卡住,而序列化器会输出无效数据。

大多数问题都与符号有关- Ruby使用 @ 前缀的符号作为实例变量,但也接受没有前缀的变量,默默地丢弃它们。

我正在开发一个独立的serde适配器,该适配器可以与serde的数据格式与alox的数据格式进行接口,但这看起来将是nightly-only。

依赖关系

~1.1–2MB
~39K SLoC