主编推荐语
WebAssembly是一种新的二进制格式,它可以方便地将C/C++等静态语言的代码快速地“运行”在浏览器中,这一特性为前端密集计算场景提供了无限可能。
内容简介
WebAssembly技术现在已经被计划设计成W3C的标准,众多浏览器厂商已经提供了对其MVP版本标准的支持。在Google I/O 2017大会上,Google首次针对WebAssembly技术进行了公开演讲和推广,其Post-MVP版本标准更是对诸如DOM操作、多线程和GC等特性提供了支持。WebAssembly所带来的Web技术变革势不可挡。本书力求从一些简单的实践入手,深入理论,到复杂的具有实际业务价值的综合实践,深入浅出地介绍Wasm技术发展至今,其背后所涉及的各种底层设计原理与实现、相关工具链以及未来发展方向等多方面内容。本书内容包括:WebAssembly技术的发展历程,从PNaCl到ASM.js再到WebAssembly,以及这些技术的基本应用方法与性能对比;WebAssembly的标准上层API、底层堆栈机的设计原理,以及对MVP标准理论的深入解读;与WebAssembly标准相关的进阶内容,如单指令多数据流(SIMD)、动态链接(DL)等;LLVM工具链与WAT可读文本格式的相关内容;基于Emscripten工具链开发WebAssembly应用的基本流程,以及工具链的一些基本常用功能和特性;基于Emscripten工具链实现C/C++语言动态关系绑定技术;Emscripten工具链所提供的一些如WebGL支持、虚拟文件系统、应用优化以及HTML 5事件系统等高级应用特性;构建一个具有实际业务价值的WebAssembly应用,现阶段Wasm生态的发展情况,以及在Post-MVP标准中制订的一些WebAssembly未来发展规划。本书的目标读者为Web前端开发人员、C/C++开发人员和对WebAssembly技术感兴趣的人员。
目录
- 版权信息
- 作者简介
- 序言(一)
- 序言(二)
- 前言
- 第1章 漫谈WebAssembly发展史
- 1.1 JavaScript的发展和弊端
- 1.1.1 快速发展与基准测试
- 1.1.2 Web新时代与不断挑战
- 1.1.3 无法跨越的“阻碍”
- 1.1.4 Chrome V8引擎链路
- 1.2 曾经尝试——ASM.js与PNaCl
- 1.2.1 失落的ASM.js
- 1.2.2 古老的NaCl与PNaCl
- 1.3 新的可能——WebAssembly
- 1.3.1 改变与颠覆
- 1.3.2 一路向前,WCG与WWG
- 第2章 WebAssembly核心原理(基于MVP标准)
- 2.1 应用与标准Web接口
- 2.1.1 编译与初始化
- 2.1.2 验证模块
- 2.1.3 遇到错误
- 2.1.4 内存分配
- 2.1.5 表
- 2.2 深入设计模型——堆栈机
- 2.2.1 堆栈式虚拟机
- 2.2.2 逆波兰表达式
- 2.2.3 Shunting-yard算法
- 2.2.4 标签与跳转
- 2.2.5 条件语句
- 2.2.6 子程序调用
- 2.2.7 变量
- 2.2.8 栈帧
- 2.2.9 堆
- 2.3 类型检查
- 2.3.1 数据指令类型
- 2.3.2 基本流程控制
- 2.3.3 基于表达式的控制流
- 2.3.4 类型堆栈的一致性
- 2.3.5 不可达代码
- 2.4 二进制编码
- 2.4.1 字节序——大端模式与小端模式
- 2.4.2 基于LEB-128的整数编码
- 2.4.3 基于IEEE-754—2008的浮点数编码
- 2.4.4 基于UTF-8的字符串编码
- 2.4.5 模块数据类型
- 2.4.6 虚拟指令与编码
- 2.4.7 类型构造符
- 2.5 模块
- 2.5.1 段
- 2.5.2 索引空间
- 2.5.3 二进制原型结构
- 2.6 内存结构
- 2.6.1 操作运算符
- 2.6.2 寻址
- 2.6.3 对齐
- 2.6.4 溢出与调整
- 第3章 动态链接与SIMD(基于MVP标准)
- 3.1 动态链接(Dynamic Linking)
- 3.1.1 ELF
- 3.1.2 符号重定向(Symbol Relocation)
- 3.1.3 GOT(Global Offset Table,全局偏移表)
- 3.1.4 PLT(Procedure Lookup Table,过程查询表)
- 3.1.5 基于表的Wasm模块动态链接
- 3.2 单指令多数据流(SIMD)
- 3.2.1 SIMD应用
- 3.2.2 并行与并发
- 3.2.3 费林分类法
- 3.2.4 SIMD.js & TC39
- 3.2.5 WebAssembly上的SIMD扩展
- 第4章 深入LLVM与WAT
- 4.1 LLVM——底层虚拟机
- 4.1.1 传统的编译器架构
- 4.1.2 LLVM中间表示层
- 4.1.3 基于LLVM的编译器架构
- 4.1.4 LLVM优化策略
- 4.1.5 LLVM命令行工具
- 4.1.6 WebAssembly与LLVM
- 4.2 基于LLVM定义新的编程语言
- 4.2.1 图灵完备与DSL
- 4.2.2 简易词法分析器
- 4.2.3 RDP与OPP算法
- 4.2.4 AST(抽象语法树)
- 4.2.5 简易语法分析器
- 4.2.6 生成LLVM-IR代码
- 4.2.7 链接优化器
- 4.2.8 编译到目标代码
- 4.2.9 整合I/O交互层
- 4.3 WAT
- 4.3.1 S-表达式
- 4.3.2 WAT/Wasm与Binary-AST
- 4.3.3 其他与设计原则
- 第5章 Emscripten基础应用
- 5.1 利器——Emscripten工具链
- 5.1.1 Emscripten发展历史
- 5.1.2 Emscripten组成结构
- 5.1.3 Emscripten下载、安装与配置
- 5.1.4 运行测试套件
- 5.1.5 编译到ASM.js
- 5.2 连接C/C++与WebAssembly
- 5.2.1 构建类型
- 5.2.2 Emscripten运行时环境
- 5.2.3 在JavaScript代码中调用C/C++函数
- 5.2.4 在C/C++代码中调用JavaScript函数
- 第6章 基于Emscripten的语言关系绑定
- 6.1 基于Embind实现关系绑定
- 6.1.1 简单类
- 6.1.2 数组与对象类型
- 6.1.3 高级类元素
- 6.1.4 重载函数
- 6.1.5 枚举类型
- 6.1.6 基本类型
- 6.1.7 容器类型
- 6.1.8 转译JavaScript代码
- 6.1.9 内存视图
- 6.2 基于WebIDL实现关系绑定
- 6.2.1 指针、引用和值类型
- 6.2.2 类成员变量
- 6.2.3 常量“const”关键字
- 6.2.4 命名空间
- 6.2.5 运算符重载
- 6.2.6 枚举类型
- 6.2.7 接口类
- 6.2.8 原始指针、空指针与void指针
- 6.2.9 默认类型转换
- 第7章 探索Emscripten高级特性
- 7.1 加入优化流程
- 7.1.1 使用编译器代码优化策略
- 7.1.2 使用GCC压缩代码
- 7.1.3 使用IndexedDB缓存模块对象
- 7.1.4 其他优化参数
- 7.2 使用标准库与文件系统
- 7.2.1 使用基于musl和libc++的标准库
- 7.2.2 虚拟文件系统结构
- 7.2.3 打包初始化文件
- 7.2.4 基本文件系统操作
- 7.2.5 懒加载
- 7.2.6 Fetch API
- 7.3 处理浏览器事件
- 7.3.1 事件注册函数
- 7.3.2 事件回调函数
- 7.3.3 通用类型与返回值类型
- 7.3.4 常用事件
- 7.4 基于EGL、OpenGL、SDL和OpenAL的多媒体处理
- 7.4.1 使用EGL与OpenGL处理图形
- 7.4.2 使用SDL处理图形
- 7.4.3 使用OpenAL处理音频
- 7.5 调试WebAssembly应用
- 7.5.1 编译器的调试信息
- 7.5.2 使用调试模式
- 7.5.3 手动跟踪
- 7.5.4 其他常用编译器调试选项
- 第8章 WebAssembly综合实践、发展与未来
- 8.1 DIP综合实践应用
- 8.1.1 应用描述
- 8.1.2 滤镜与卷积
- 8.1.3 基本组件类型与架构
- 8.1.4 编写基本页面骨架(HTML与CSS)
- 8.1.5 编写核心卷积函数(C++)
- 8.1.6 编写主渲染循环与“胶水”代码(JavaScript)
- 8.1.7 使用Emscripten编译并运行应用
- 8.1.8 性能对比
- 8.2 WebAssembly常用工具集
- 8.2.1 Cheerp
- 8.2.2 Webpack 4
- 8.2.3 Go和Rust的WebAssembly实践
- 8.2.4 Binaryen
- 8.2.5 WasmFiddle
- 8.2.6 Wabt
- 8.2.7 AssemblyScript
- 8.3 WebAssembly未来草案
- 8.3.1 GC(垃圾回收)
- 8.3.2 Multi-Thread(多线程)与原子操作
- 8.3.3 异常处理
- 8.3.4 多返回值扩展
- 8.3.5 ES模块
- 8.3.6 尾递归
- 8.3.7 BigInts的双向支持
- 8.3.8 自定义注释语法
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。