这本书向读者介绍了 WebAssembly,这是一种令人兴奋的新技术,能够在浏览器中执行除 JavaScript 之外的其他语言。这本书描述了如何从头开始构建一个使用 WebAssembly 的 C/JavaScript 应用,以及在 Emscripten 的帮助下移植现有 C++ 代码库在浏览器中运行的过程。
WebAssembly 代表了 web 平台的一个重要转变。作为 C、C++ 和 Rust 等语言的编译目标,它提供了构建新的应用类的能力。所有主要浏览器供应商都支持 WebAssembly,它代表了一种协作努力。
在这本书里,我们将描述组成 WebAssembly 的元素,以及它的起源。我们将逐步完成安装所需工具、设置开发环境以及与 WebAssembly 交互的过程。我们将通过简单的例子进行工作,并通过越来越高级的用例进行进展。到本书结束时,您将准备好在 C、C++ 或 JavaScript 项目中使用 WebAssembly。
如果你是一个希望为 web 构建应用的 C/C++ 程序员,或者是一个希望提高其 JavaScript 应用性能的 web 开发人员,那么这本书就是为你准备的。这本书面向熟悉 JavaScript 的开发人员,他们不介意学习一些 C 和 C++(反之亦然)。这本书通过提供两个示例应用来适应 C/C++ 程序员和 JavaScript 程序员。
第一章什么是 WebAssembly?,描述了 WebAssembly 的起源,并提供了该技术的高级概述。它涵盖了如何使用 WebAssembly,支持哪些编程语言,以及它目前的局限性。
第 2 章、WebAssembly 的元素——Wat、Wasm 和 JavaScript API ,概述了构成 WebAssembly 的元素。它详细解释了文本和二进制格式,以及相应的 JavaScript 和 Web APIs。
第 3 章、设置开发环境,走完使用 WebAssembly 开发的工具。它提供了每个平台的安装说明,并提供了改善开发体验的建议。
第 4 章、安装所需的依赖项,提供了安装每个平台的工具链要求的说明。到本章结束时,您将能够将 C 和 C++ 编译成 WebAssembly 模块。
第 5 章、创建和加载 WebAssembly 模块解释了如何使用 Emscripten 生成 WebAssembly 模块,以及如何将标志传递给编译器来影响结果输出。它描述了在浏览器中加载 WebAssembly 模块的技术。
第 6 章、与 JavaScript 交互和调试,详细阐述了 Emscripten 的 Module 对象和浏览器的全局 WebAssembly 对象的区别。本章介绍 Emscripten 提供的功能以及生成源地图的说明。
第 7 章从头开始创建应用,介绍了与 WebAssembly 模块交互的 JavaScript 记帐应用的创建。我们将编写 C 代码来计算会计交易的值,并在 JavaScript 和编译后的 WebAssembly 模块之间传递数据。
第 8 章用 Emscripten 移植游戏采用循序渐进的方法,使用 Emscripten 将现有的 C++ 游戏移植到 WebAssembly。查看现有的 C++ 代码库后,对适当的文件进行更改,以使游戏能够在浏览器中运行。
第 9 章、与 Node.js 集成,演示了 Node.js 和 npm 如何在服务器端和客户端与 WebAssembly 一起使用。本章介绍了在快速应用中使用网络程序集、将网络程序集与网络包集成以及使用 Jest 测试网络程序集模块。
第 10 章、高级工具和即将推出的特性,涵盖了高级工具、用例和目前正在标准化过程中的新 WebAssembly 特性。本章介绍了 WABT、比纳莱恩和在线工具。在本章中,您将学习如何使用 LLVM 编译 WebAssembly 模块,以及 WebAssembly 模块如何与网络工作者一起使用。本章最后描述了标准化过程,并回顾了被添加到规范过程中的一些令人兴奋的特性。
你应该有一些编程经验,理解变量和函数等概念。如果您从未见过一行 JavaScript 或 C/C++ 代码,您可能想在阅读本书中的示例之前做一些初步研究。我选择使用 JavaScript ES6/7 特性,例如析构和箭头函数,所以如果您在过去 3 - 4 年中没有使用过 JavaScript,语法可能会看起来略有不同。
你可以从你在www.packtpub.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问www.packtpub.com/support并注册将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册www.packtpub.com。
- 选择“支持”选项卡。
- 点击代码下载和勘误表。
- 在搜索框中输入图书的名称,并按照屏幕指示进行操作。
下载文件后,请确保使用最新版本的解压缩文件夹:
- 视窗系统的 WinRAR/7-Zip
- zipeg/izp/un ARX for MAC
- 适用于 Linux 的 7-Zip/PeaZip
这本书的代码包也托管在 https://github.com/PacktPublishing/Learn-WebAssembly 的 GitHub 上。如果代码有更新,它将在现有的 GitHub 存储库中更新。
我们还有来自丰富的图书和视频目录的其他代码包,可在**【https://github.com/PacktPublishing/】**获得。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色图像。可以在这里下载:https://www . packtpub . com/sites/default/files/downloads/9781788997379 _ color images . pdf。
本书通篇使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄。这里有一个例子:“instantiate()
是编译和实例化 WebAssembly 代码的主要 API。”
代码块设置如下:
int addTwo(int num) {
return num + 2;
}
当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:
int calculate(int firstVal, int secondVal) {
return firstVal - secondVal;
}
任何命令行输入或输出都编写如下:
npm install -g webassembly
粗体:表示一个新的术语、一个重要的单词或者你在屏幕上看到的单词。例如,菜单或对话框中的单词像这样出现在文本中。下面是一个例子:“您可以通过按下开始菜单按钮,右键单击命令提示符应用并选择以管理员身份运行来实现这一点。”
Warnings or important notes appear like this. Tips and tricks appear like this.
我们随时欢迎读者的反馈。
综合反馈:发邮件[email protected]
并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发电子邮件至[email protected]
。
勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。
盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请通过[email protected]
联系我们,并提供材料链接。
如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或者投稿一本书,请访问authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packtpub.com。