Rust + WebAssembly 全链路解析

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 共存。

适合谁读

目录

开篇

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

第二部分:Rust → WASM 工具链

第三部分:性能与优化

第四部分:超越浏览器

第五部分:工程实践

源码版本

本书分析基于以下版本:

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

与其他书的关联

版权声明

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