万本电子书0元读

万本电子书0元读

顶部广告

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

售       价:¥

20人正在读 | 0人评论 6.4

作       者:丁尔男,柴树杉

出  版  社:机械工业出版社

出版时间:2021-01-01

字       数:16.2万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(1条)
  • 读书简介
  • 目录
  • 累计评论(1条)
这是一部讲解如何用高级编程语言开发WebAssembly应用的著作,由国内WebAssembly领域的先驱者和布道者撰写。      全书一共10章,分为三个部分。      *部分 基础篇(第1~3章)      首先介绍了WebAssembly的基础和工具链Em*en的用法,然后详细讲解了使用C/C++语言和Em*en开发WebAssembly模块的方法。      第二部分 方法篇(第4~8章)      对Em*en运行时、WebAssembly友好的一般性方法、网络 I/O、并发执行、GUI 及交互等知识点展开了深入的讨论。      第三部分 前沿篇(第9~10章)      详细讲解了WASI以及如何使用Rust语言开发WebAssembly模块和WASI应用。
目录展开

前言

第一篇 基础篇

第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接口

附录B 机器指令

累计评论(1条) 1个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部