Skip to content

Rust + WebAssembly 全链路解析

第一本把 WebAssembly 从规范到工具链到生产实践串成完整链路的中文技术专著。

Rust 和 WebAssembly 是天生搭档:Rust 的零成本抽象让它编译出的 WASM 模块体积小、执行快,而 WASM 的沙箱化安全模型恰好补上了 Rust 在浏览器场景的最后一公里。wasm-bindgen 让 Rust 调 JavaScript、JavaScript 调 Rust 像原生代码一样自然;wasm-pack 把编译、绑定生成、npm 发布一键搞定;WASI 让同一份 WASM 模块在浏览器外也能安全运行;组件模型正在把 WASM 从"单一功能的编译目标"推到"可组合的软件单元"。

但大多数人停留在 wasm-pack build 跑通 Demo 的阶段。WASM 的线性内存模型对 Rust 的所有权系统意味着什么?wasm-bindgen 生成的胶水代码到底做了什么?为什么一个 100 行的 Rust 函数编译出来 50KB 的 WASM?Guest-Host 通信的开销从哪来?WASI preview 2 和 preview 1 有什么本质区别?组件模型的"世界"和"接口"如何映射到代码?这些问题不搞清楚,WASM 永远只是玩具。

本书基于 wasm-bindgen 0.2.118 / wasm-pack 0.14 / WASI Preview 2 (Stable) / Component Model (Phase 1),从 W3C WASM 规范出发,经工具链实现,到生产架构,逐层拆解 Rust + WASM 全链路。每一章先回答"为什么这样设计",再看"代码怎么实现"。

这是 Rust 后端系列的第七本书,与《Rust 编译器与运行时揭秘》中的 LLVM 后端内容衔接——前者讲 Rust 如何编译到原生机器码,本书讲 Rust 如何编译到 WASM 虚拟指令集。与《Vue 3 设计与实现》《React 19 内核探秘》形成跨领域关联——前端框架如何消费 WASM 模块、WASM 组件如何在浏览器运行时中与 JS 共存。

适合谁读

  • Rust 开发者:想把 Rust 的性能优势带入浏览器、边缘计算、嵌入式等场景,需要理解 WASM 编译目标和工具链
  • 前端工程师:在性能敏感场景引入 WASM 模块,需要理解 JS-WASM 互操作的开销和陷阱
  • 系统程序员:关心 WASM 沙箱化安全模型的设计,以及 WASI 如何定义"安全的能力集"
  • 架构师:评估 WASM 组件模型能否支撑"可组合的软件架构",需要理解组件模型的核心抽象
  • 读过本系列 Rust 书籍的读者:从编译器到运行时到 Web 框架,补上 WASM 这个关键编译目标

目录

开篇

第一部分:WASM 规范与虚拟机

第二部分:Rust → WASM 工具链

第三部分:性能与优化

第四部分:超越浏览器

第五部分:工程实践

源码版本

本书分析基于以下版本:

  • wasm-bindgen 0.2.100(2026 年 4 月)— Rust ↔ JS 绑定生成器
  • wasm-pack 0.13.1 — 构建、测试、发布工具链
  • WASI preview 2(2026-04 快照)— 系统接口规范
  • Component Model 规范(Phase 3, 2026-04 快照)
  • Wasmtime 28 — 字节码联盟的 WASM 运行时
  • wit-bindgen 0.40 — WIT 接口绑定生成器

所有涉及的结构体、函数、宏均指向 GitHub 上对应 tag 的源文件。读者可通过 cargo install wasm-packgit clone https://github.com/rustwasm/wasm-bindgen 对照阅读。

与其他书的关联

  • 前置:《Rust 编译器与运行时揭秘》第 5 章的 LLVM 后端——理解 Rust 如何生成机器码后,本书第 5 章将展示同一套 MIR 如何走向 wasm32 目标。
  • 并读:《Vue 3 设计与实现》第 9 章(Vapor Mode)与《React 19 内核探秘》第 12 章(Server Components)——前端框架如何嵌入 WASM 模块做计算密集任务。
  • 后续:《Tokio 源码深度解析》的异步运行时模型与 WASI 的异步支持形成对比——两种"让出执行权"的不同设计哲学。

版权声明

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

基于 VitePress 构建