Rust in Everything
基于 serde 1.0.229

导读

开始读源码之前,先把两件事讲清楚:

  1. 怎么读这一卷:为什么是 serde 1.0.229 和 serde_json 1.0.154;和本站锁的 1.0.228 相比,syn 3 和 serde_derive 自身的 llvm-lines 优化都不改生成代码,用两个版本展开同一个文件,只差 #2936 去掉的几处 ?;serde_json 1.0.150 之后的五项改动都不在默认读写路径上。序列化、反序列化、缓冲三条主线每一步落在哪个函数、哪一页讲;阅读路线、前置知识,以及怎么用 cargo expand 看生成代码。
  2. 源码地图:serde_core、serde、serde_derive、serde_derive_internals 各管什么;serde_core 用一条永远不编译的 cfg(any()) 依赖把 serde_derive 锁成同一版本,版本不配对时 cargo 在求解阶段就报错;1.0.220 为了编译并行拆出 serde_core,derive 却必须依赖 serde;build.rs 按补丁号生成 __private229;feature 一览;test_suite/ 的 Token 测试、trybuild 用例和各文件行数。
flowchart TB
  read[怎么读这一卷] --> ver["版本:1.0.228 到 1.0.229"]
  read --> lines[三条主线]
  read --> expand["cargo expand 看生成代码"]
  map[源码地图] --> crates[四个 crate]
  map --> lock["版本锁与 cfg(any())"]
  map --> priv["__private229"]
  map --> tests["feature 与 test_suite"]

💬 关联讨论

发起讨论
加载中...