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

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

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

WebAssembly布道者撰写,详解使用C/C++/Rust开发WebAssembly应用的技术和方法。

内容简介

内容简介这是一部讲解如何用不错编程语言开发WebAssembly应用的著作,由国内WebAssembly领域的先驱者和布道者撰写。

全书一共10章,分为三个部分:

第一部分基础篇(1~3章)首先介绍了WebAssembly的基础和工具链Emscripten的用法,然后详细讲解了使用C/C语言和Emscripten开发WebAssembly模块的方法。

第二部分方法篇(第4~8章),对Emscripten运行时、WebAssembly友好的一般性方法、网络I/O、并发执行、GUI及交互等知识点展开了深入的讨论。

第三部分前沿篇(第9~10章),详细讲解了WASI以及如何使用Rust语言开发WebAssembly模块和WASI应用。

作者简介

作者丁尔男,WebAssembly技术专家,WebAssembly的先驱者和布道者,率先将WebAssembly技术引入实际工程中,合著有《WebAssembly标准入门》。长期从事三维地理信息系统软件开发工作,现任武汉航天远景科技股份有限公司应用技术总监,领导开发了3DMatrix系列产品及实景三维应用整体解决方案。

章节目录

版权信息

前言

第一篇 基础篇

第1章 认识WebAssembly

1.1 WebAssembly的诞生背景

1.2 Web的第4种语言

1.3 本章小结

第2章 Emscripten快速入门

2.1 安装Emscripten

2.1.1 使用emsdk命令行工具安装Emscripten

2.1.2 在Docker环境中安装Emscripten

2.1.3 校验安装

2.2 你好,世界!

2.2.1 生成.wasm文件

2.2.2 运行

2.2.3 使用Emscripten生成测试页面

2.3 胶水代码初探

2.3.1 WebAssembly汇编模块载入

2.3.2 导出函数封装

2.3.3 异步加载

2.4 编译目标及编译流程

2.4.1 编译目标的选择

2.4.2 编译流程

2.5 示例:放大镜特效

2.5.1 模板程序

2.5.2 静态的放大镜

2.5.3 动态的放大镜

2.6 本章小结

第3章 C与JavaScript互操作

3.1 JavaScript调用C函数

3.1.1 定义函数导出宏

3.1.2 在JavaScript中调用C导出函数

3.2 JavaScript函数注入C环境

3.2.1 C函数声明

3.2.2 JavaScript实现C函数

3.2.3 闭包限制及解决办法

3.2.4 JavaScript函数注入C环境的优缺点

3.3 单向透明的内存模型

3.3.1 Module.buffer

3.3.2 Module.HEAPX

3.3.3 在JavaScript中访问C/C++环境内存

3.4 JavaScript与C/C++交换数据

3.4.1 参数及返回值

3.4.2 通过内存交换数据

3.4.3 在JavaScript中分配内存

3.4.4 字符串

3.5 EM_ASM系列宏

3.5.1 EM_ASM

3.5.2 EM_ASM_/EM_ASM_DOUBLE

3.5.3 EM_ASM_INT_V/EM_ASM_DOUBLE_V

3.6 emscripten_run_script()系列函数

3.6.1 emscripten_run_script()

3.6.2 emscripten_run_script_int()

3.6.3 emscripten_run_script_string()

3.7 ccall()/cwrap()

3.7.1 ccall()

3.7.2 cwrap()

3.7.3 ccall()/cwrap()的潜在风险

3.8 本章小结

第二篇 方法篇

第4章 Emscripten运行时

4.1 main()函数与生命周期

4.2 消息循环

4.2.1 emscripten_set_main_loop()

4.2.2 消息循环的暂停、继续及终止

4.3 文件系统

4.3.1 Emscripten虚拟文件系统架构

4.3.2 基于MEMFS的打包文件系统

4.3.3 NODEFS文件系统

4.3.4 IDBFS

4.4 内存管理

4.4.1 内存容量/栈容量

4.4.2 可变内存

4.4.3 内存分配器

4.5 Module定制

4.6 示例:人脸检测

4.6.1 facedetect_cnn()函数

4.6.2 facedetect_cnn()函数再封装

4.6.3 读取图像并检测人脸

4.6.4 基于SDL显示IplImage图像

4.7 本章小结

第5章 WebAssembly友好的一般性方法

5.1 消息循环分离

5.1.1 emscripten_set_main_loop()的不足

5.1.2 在JavaScript中创建定时循环

5.2 内存对齐

5.2.1 asm.js

5.2.2 wasm

5.2.3 避免及检测未对齐的内存操作

5.3 使用C接口导出C++对象

5.4 C++对象生命周期管理

5.4.1 引用计数

5.4.2 AddRef()/Release()使用规则

5.4.3 导出AddRef()/Release()

5.5 使用C接口注入JavaScript对象

5.5.1 创建JavaScript对象/ID表

5.5.2 注入JavaScript对象的生命周期管理

5.6 小心64位整型数

5.6.1 WebAssembly原生支持int64

5.6.2 导出函数包含int64

5.6.3 注入函数包含int64

5.7 文件系统的缺陷

5.8 本章小结

第6章 网络I/O

6.1 XMLHttpRequest

6.1.1 XMLHttpRequest对象使用简介

6.1.2 XMLHttpRequest对象的C接口封装

6.1.3 扩展回调处理

6.2 WebSocket

6.2.1 创建WebSocket测试服务

6.2.2 在JavaScript中使用WebSocket

6.2.3 WebSocket对象的C接口封装

6.3 本章小结

第7章 并发执行

7.1 JavaScript中的并发模型

7.2 在Worker中使用Emscripten

7.3 pthread线程

7.3.1 原子操作

7.3.2 pthread示例

7.3.3 在浏览器环境运行pthread示例

7.4 本章小结

第8章 GUI及交互

8.1 Canvas

8.2 鼠标事件

8.3 键盘事件

8.4 Life游戏

8.4.1 Life简介

8.4.2 设计要求

8.4.3 Life游戏C代码

8.4.4 Life游戏网页代码

8.4.5 运行Life

8.5 本章小结

第三篇 前沿篇

第9章 Rust和WebAssembly

9.1 Rust入门

9.1.1 安装Rust开发环境

9.1.2 你好,世界

9.1.3 Cargo管理工程

9.1.4 本地文档

9.2 你好,WebAssembly

9.2.1 安装WebAssembly开发环境

9.2.2 打印“你好,WebAssembly”

9.3 导入和导出函数

9.3.1 导出main()函数

9.3.2 导入宿主打印函数

9.3.3 导出自定义函数

9.4 打印命令行参数

9.4.1 打印字符串

9.4.2 准备导入env_print_str()函数

9.4.3 向Rust传入字符串

9.4.4 命令行参数封装

9.4.5 传入命令行参数

9.5 no_std

9.5.1 输出文件的大小

9.5.2 通过no_std裁剪标准

9.5.3 库

9.6 嵌入C代码

9.6.1 C语言思维

9.6.2 连接C语言库

9.6.3 集成C语言源码

9.6.4 build.rs自动构建

9.7 本章小结

第10章 WASI系统接口

10.1 WASI简介

10.2 探秘WASI工作原理

10.2.1 准备工作

10.2.2 探秘wasm32-wasi底层

10.2.3 Rust和wasm32-unknown-unknown

10.2.4 C/C++编译成WASI程序

10.2.5 汇编程序

10.3 WebAssembly虚拟机

10.3.1 准备WebAssembly测试模块

10.3.2 Node.js环境:基于wasi包

10.3.3 Node.js环境:手工实现fd_write()函数

10.3.4 Rust环境:导入wasi包

10.3.5 Rust环境:手工实现fd_write()函数

10.4 wapm包管理器

10.4.1 安装wapm包管理器

10.4.2 安装并运行cowsay小程序

10.4.3 创建wapm模块

10.5 本章小结

附录

附录A WebAssembly接口

A.1 WebAssembly对象

A.2 全局方法

A.2.1 WebAssembly.compile()

A.2.2 WebAssembly.instantiate()

A.2.3 WebAssembly.validate()

A.2.4 WebAssembly.compileStreaming()

A.2.5 WebAssembly.instantiateStreaming()

A.3 Module对象

A.3.1 WebAssembly.Module()

A.3.2 WebAssembly.Module.exports()

A.3.3 WebAssembly.Module.imports()

A.3.4 WebAssembly.Module.customSections()

A.4 Instance对象

A.4.1 WebAssembly.Instance()

A.4.2 Instance.prototype.exports

A.5 Memory对象

A.5.1 WebAssembly.Memory()

A.5.2 Memory.prototype.buffer

A.5.3 Memory.prototype.grow()

A.6 Table对象

A.6.1 WebAssembly.Table()

A.6.2 Table.prototype.get()

A.6.3 Table.prototype.length

A.6.4 Table.prototype.set()

A.6.5 Table.prototype.grow()

附录B 机器指令

B.1 常数指令

B.2 算术运算指令

B.3 位运算指令

B.4 变量访问指令

B.5 内存访问指令

B.6 比较指令

B.7 类型转换指令

B.8 控制流指令

B.9 其他指令

面向WebAssembly编程:应用开发方法与实践是2020年由机械工业出版社有限公司出版,作者柴树杉。

得书感谢您对《面向WebAssembly编程:应用开发方法与实践》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
Python气象应用编程 电子书
本书介绍了Python在气象数据处理与可视化方面的应用,以真实数据为基础进行气象数据整理和可视化。
Unity3D脚本编程与游戏开发 电子书
精选丰富实践案例,精讲游戏开发技术,总结一线游戏开发经验。
大学计算机——面向实践与创新能力培养 电子书
全书共分8章,内容包括:信息社会与计算思维、计算机硬件组成与工作原理、计算机软件平台与资源管理、工程文档与数字化编辑、数据库与信息管理、多媒体与信息可视化、计算机网络与数字化生存、问题求解与算法设计。本书以发展学生的计算思维和创新应用能力为导向,介绍计算机基础中共性和相对稳定的概念、知识和方法。
Python测试开发入门与实践 电子书
本书系统且深入阐释利用Python进行Web自动化测试涉及的方法和实践。
Web应用开发技术与案例教程 电子书
结合多个开发案例,详细介绍Web应用开发中多层次、多方面的内容,使你能够真正掌握系统开发中规律性的知识。