Skip to content

Serde 元编程:从过程宏到零成本抽象

第一本从编译期元编程视角系统剖析 Serde 工程实现的中文技术专著。

几乎每一个 Rust 项目都依赖 Serde。它的使用极其朴素——写一行 #[derive(Serialize, Deserialize)],任何数据结构就能在 JSON、YAML、TOML、Bincode、MessagePack 之间自由流转。但在这行轻量语法背后,隐藏着 Rust 生态最精巧的工程设计之一:一套由过程宏、trait、泛型和单态化共同构建的零成本抽象

本书不教读者"怎么用 Serde"。本书拆解 Serde 源码——从 syn 解析 AST、quote 生成 TokenStream,到 Data Model 如何把"M 种数据结构 × N 种格式"的组合爆炸降为 M+N 的实现复杂度;从 Serializer/Deserializer trait 的边界设计,到 Visitor 模式为什么是反序列化的唯一正解;从属性宏 #[serde(rename)] 的解析机制,到借用反序列化如何在编译期证明生命周期安全。

这是《Rust 源码之道》丛书的第四卷。读完本书,你不只学会了 Serde——你掌握了 Rust 过程宏这门"元能力"。再看 Axum 的 #[derive(FromRequest)]、sqlx 的 query!、clap 的 #[derive(Parser)]、tokio 的 #[tokio::main],你会发现它们共享同一套工程范式。

适合谁读

  • Rust 开发者:想从"会用 derive"进阶到"会写 derive"
  • 框架/库作者:准备为自己的项目设计 derive 宏或属性宏
  • 系统程序员:想深入理解"零成本抽象"在元编程层面如何落地
  • Serde 重度使用者:被 #[serde(with)]flattenuntagged 等高级特性卡住,想从源码层面彻底理解

前置阅读:本书假设读者已经能写 Rust 代码,理解 trait、泛型、生命周期的基本概念。如果对这些机制的编译期实现尚有疑问,建议先读丛书卷一《Rust 编译器》。本书不依赖 Tokio 相关知识,可独立阅读。

目录

第一部分:开篇

第二部分:Data Model 与 trait 抽象

第三部分:过程宏工程学

第四部分:serde_derive 源码剖析

第五部分:高阶主题

第六部分:生态与总结

源码版本

本书所有源码引用均基于以下版本(2026 年 4 月 20 日锁定):

Crate版本Git Commit
serde1.0.228fa7da4a93567ed347ad0735c28e439fca688ef26
serde_json1.0.149dc8003a88e7142529cf4a7429c4778af31dadf50
syn2.0.117e027fef2adcd6588fa8097c63dc916778d1aa11b
quote1.0.45ba07807af385afeff97a5e75186f7a92eb629a79

读者可通过以下命令获取与本书完全一致的源码:

bash
git clone https://github.com/serde-rs/serde.git
cd serde && git checkout fa7da4a

git clone https://github.com/serde-rs/json.git serde_json
cd serde_json && git checkout dc8003a

git clone https://github.com/dtolnay/syn.git
cd syn && git checkout e027fef

git clone https://github.com/dtolnay/quote.git
cd quote && git checkout ba07807

书中每一段源码引用都会标注文件路径和行号,读者可在对应版本的代码中逐行验证。

版权声明

本书采用 CC BY-NC 4.0 许可协议。转载或引用请署名 杨艺韬 并附原文链接,禁止商业用途。

基于 VitePress 构建