Skip to content

Latest commit

 

History

History
112 lines (64 loc) · 8.13 KB

File metadata and controls

112 lines (64 loc) · 8.13 KB

零、前言

这本书向读者介绍了 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并注册将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 登录或注册www.packtpub.com
  2. 选择“支持”选项卡。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书的名称,并按照屏幕指示进行操作。

下载文件后,请确保使用最新版本的解压缩文件夹:

  • 视窗系统的 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.

取得联系

我们随时欢迎读者的反馈。

综合反馈:发邮件feedback@packtpub.com并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发电子邮件至questions@packtpub.com

勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。

盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com联系我们,并提供材料链接。

如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或者投稿一本书,请访问authors.packtpub.com

复习

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!

更多关于 Packt 的信息,请访问packtpub.com