面向WebAssembly编程:应用开发方法与实践

丁尔男 柴树杉
前言 为什么要写这本书 WebAssembly是新一代Web虚拟机标准,可以让用各种语言编写的代码都能以接近原生的速度在Web中运行。比如,C/C++代码可以通过Emscripten工具链编译为wasm二进制文件,进而导入网页中供JavaScript调用。这意味着使用C/C++编写的程序可以直接在网页中运行,而Rust语言更是内置了对WebAssembly的支持。 作为一种新兴技术,目前WebAssembly的相关技术资料尚不丰富,再加上WebAssembly的开发涉及多种语言和开发环境,导致其工程化门槛较高。作为国内最早的一批WebAssembly开发者,我们非常希望能分享相关知识和方法给读者。 在2018年,借WebAssembly草案1.0发布的契机,我们出版了《WebAssembly标准入门》一书。但《WebAssembly标准入门》重点讨论的是WebAssembly技术本身,花了大量篇幅讲述虚拟机的底层结构、汇编语言、模块的二进制格式等内容,并未过多讨论如何使用高级语言开发WebAssembly应用。因此在2018年年底,我们重新思考了如何用Emscripten编写友好的Web应用这个问题,并形成了本书的前半部分。 2019年年底,机械工业出版社发出约稿,其时WASI技术已经诞生,我们希望能在书中包含WASI以及Rust等新的技术内容,最终打造了本书目前的结构。本书从Emscripten的基本使用开始,介绍了用C/C++开发WebAssembly模块的方法,并且以作者在实际工程项目中获取的一手经验为基础,提出了一些一般性的设计原则和技术框架,同时讨论了如何用Rust语言与C/C++语言混合开发WebAssembly应用。 本书理念 我们认为,一个理想的面向Web的C/C++/Rust工程应该对编译目标不敏感,它既可以被编译为本地代码直接运行,也可以被编译为Web…