-
内容大纲
WebAssembly是一种新兴的网页虚拟机标准,它的设计目标包括高可移植性、高安全性、高效率(包括载入效率和运行效率)、尽可能小的程序体积。柴树杉,丁尔男著的《WebAssembly标准入门》详尽介绍了WebAssembly程序在JavaScript环境下的使用方法、WebAssembly汇编语言和二进制格式,给出了大量简单易懂的示例,同时以C/C++和Go语言开发环境为例,介绍了如何使用其他高级语言开发WebAssembly模块。
本书适合从事高性能Web前端开发、跨语言Web应用开发的技术人员学习参考,也可以作为WebAssembly标准参考手册随时查阅。 -
作者介绍
-
目录
第0章 WebAssembly诞生背景
0.1 JavaScript简史
0.2 asm.js的尝试
0.3 WebAssembly的救赎
第1章 JavaScript语言基础
1.1 console对象
1.2 函数和闭包
1.3 Promise对象
1.4 二进制数组
第2章 WebAssembly快速入门
2.1 准备工作
2.1.1 WebAssembly兼容性
2.1.2 WebAssembly文本格式与wabt工具集
2.2 首个例程
2.3 WebAssembly概览
2.3.1 WebAssembly中的关键概念
2.3.2 WebAssembly程序生命周期
2.3.3 WebAssembly虚拟机体系结构
2.4 你好,WebAssembly
2.4.1 WebAssembly部分
2.4.2 JavaScript部分
2.5 WebAssembly调试及代码编辑环境
第3章 JavaScript中的WebAssembly对象
3.1 WebAssembly对象简介
3.2 全局方法
3.2.1 WebAssembly.compile()
3.2.2 WebAssembly.instantiate()
3.2.3 WebAssembly.validate()
3.2.4 WebAssembly.compileStreaming()
3.2.5 WebAssembly.instantiateStreaming()
3.3 WebAssembly.Module对象
3.3.1 WebAssembly.Module()
3.3.2 WebAssembly.Module.exports()
3.3.3 WebAssembly.Module.imports()
3.3.4 WebAssembly.Module.customSections()
3.3.5 缓存Module
3.4 WebAssembly.Instance对象
3.4.1 WebAssembly.Instance()
3.4.2 WebAssembly.Instance.prototype.exports
3.4.3 创建WebAssembly.Instance的简洁方法
3.5 WebAssembly.Memory对象
3.5.1 WebAssembly.Memory()
3.5.2 WebAssembly.Memory.prototype.buffer
3.5.3 WebAssembly.Memory.prototype.grow()
3.6 WebAssembly.Table对象
3.6.1 WebAssembly.Table()
3.6.2 WebAssembly.Table.prototype.get()
3.6.3 WebAssembly.Table.prototype.length
3.6.4 在WebAssembly内部使用表格
3.6.5 多个实例通过共享表格及内存协同工作
3.6.6 WebAssembly.Table.prototype.set()
3.6.7 WebAssembly.Table.prototype.grow()
3.7 小结及错误类型
第4章 WebAssembly汇编语言
4.1 S-表达式
4.2 数据类型
4.3 函数定义
4.3.1 函数签名
4.3.2 局部变量表
4.3.3 函数体
4.3.4 函数别名
4.4 变量
4.4.1 参数与局部变量
4.4.2 变量别名
4.4.3 全局变量
4.5 栈式虚拟机
4.5.1 栈
4.5.2 WebAssembly栈式虚拟机
4.5.3 栈式调用
4.6 函数调用
4.6.1 直接调用
4.6.2 间接调用
4.6.3 递归
4.7 内存读写
4.7.1 内存初始化
4.7.2 读取内存
4.7.3 写入内存
4.7.4 获取内存容量及内存扩容
4.8 控制流
4.8.1 nop和unreachable
4.8.2 block指令块
4.8.3 if指令块
4.8.4 loop指令块
4.8.5 指令块的label索引及嵌套
4.8.6 br
4.8.7 br_if
4.8.8 return
4.8.9 br_table
4.9 导入和导出
4.9.1 导出对象
4.9.2 导入对象
4.10 start()函数及指令折叠
4.10.1 start()函数
4.10.2 指令折叠
第5章 WebAssembly二进制格式
5.1 LEB128编码
5.1.1 LEB128编码原理
5.1.2 无符号数的LEB128编码
5.1.3 有符号数的LEB128编码
5.2 头部和段数据
5.2.1 头部
5.2.2 段类型列表
5.2.3 段数据结构
5.3 内存段和数据段
5.3.1 内存段
5.3.2 数据段
5.4 表格段和元素段
5.4.1 表格段
5.4.2 元素段
5.5 开始段和函数索引
5.5.1 开始段
5.5.2 函数索引
5.6 全局段
5.6.1 全局变量索引
5.6.2 全局段编码方式
5.7 函数段、代码段和类型段
5.7.1 函数段、代码段和类型段之间的关系
5.7.2 更简单的例子
5.7.3 函数段
5.7.4 类型段
5.7.5 代码段
5.8 导入段和导出段
5.8.1 例子
5.8.2 类型段
5.8.3 导入段
5.8.4 导出段
5.9 自定义段
5.9.1 自定义段结构
5.9.2 模块的名字
5.9.3 全局变量的名字
5.9.4 函数的名字
5.9.5 局部变量的名字
5.10 补充说明
第6章 Emscripten和WebAssembly
6.1 安装环境
6.1.1 emsdk命令安装
6.1.2 Docker环境安装
6.1.3 验证emcc命令
6.2 你好,Emscripten!
6.2.1 生成wasm文件
6.2.2 浏览器环境
6.2.3 自动生成HTML测试文件
6.3 C/C++内联JavaScript代码
6.3.1 EM_ASM宏
6.3.2 EM_ASM_宏
6.3.3 EM_ASM_*宏
6.3.4 函数参数
6.3.5 注意问题
6.4 C/C++调用JavaScript函数
6.4.1 C语言版本的eval()函数
6.4.2 打造带参数的eval()函数
6.4.3 打造可变参数的eval()函数
6.4.4 eval()函数返回字符串
6.5 JavaScript调用C导出函数
6.5.1 调用导出函数
6.5.2 辅助函数ccall()和cwrap()
6.6 运行时和消息循环
6.6.1 Emscripten运行时
6.6.2 消息循环
6.7 补充说明
第7章 Go语言和WebAssembly
7.1 你好,Go语言
7.2 浏览器中的Go语言
7.3 使用JavaScript函数
7.4 回调Go函数
7.5 syscall/js包
7.6 WebAssembly模块的导入函数
7.7 WebAssembly虚拟机
7.8 补充说明
附录 指令参考
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...