【为什么要写这本书】
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工程应该对编译目标不敏感,它既可以被编译为本地代码直接运行,也可以被编译为WebAssembly在网页中运行,切换二者只需要更改运行环境,这样便可充分利用现有IDE环境强大的开发、调试、分析、测试等功能,提高工程质量、降低开发成本。但WebAssembly的运行环境毕竟与本地环境有着巨大的差异,因此为了达到上述理想目标,从整体框架到接口设计甚至到函数间的数据交换层面都必须充分考虑Web环境的特点(或者说限制)。这也正是本书所贯彻的“WebAssembly友好”的内涵所在。
【读者对象】
本书可为以下两类读者带来直接收益:
以C/C++/Rust为主力开发语言,并且希望介入前端领域的开发者;
希望借助高性能的C/C++/Rust库解决前端性能问题的JavaScript开发者。
【如何阅读本书】
本书旨在介绍如何使用C/C++/Rust语言开发实用的WebAssembly模块,要求读者具备基本的JavaScript和C/C++开发技能。本书主要分为以下三篇。
基础篇(第1章至第3章):介绍了使用C/C++语言及Emscripten工具链开发WebAssembly模块的基本方法。
方法篇(第4章至第8章):对Emscripten运行时、WebAssembly友好的一般性方法、网络I/O、并发执行、GUI及交互展开讨论。
前沿篇(第9章和第10章):介绍了如何使用Rust语言开发WebAssembly模块和WASI应用。
t***h 2021-01-29 08:55:18
好评好评好评好评好评好评好评好评好评好评好评好评好评好评好评