导读
开始读源码之前,先把两件事讲清楚:
- 怎么读这一卷:为什么是 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看生成代码。 - 源码地图:
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"]
💬 关联讨论
发起讨论加载中...