深入浅出WebAssembly

深入浅出WebAssembly

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

    关注微信公众号

因版权原因待上架

编辑推荐

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技术感兴趣的人员。

作者简介

作者于航,现就职于阿里巴巴 / 饿了么事业部(BU),资深前端工程师,FreeCodeCamp(FCC) China 上海社区负责人,QCon(2017)上海前端专场讲师。2016 年开始研究 WebAssembly 技术,2017 年加入 WebAssembly 中国社区,同年加入官方WCG(W3C Community Group),定期参与 WCG组织的各种线上视频研讨会议,在跟进 WebAssembly 新发展的同时,也为 WebAssembly 的标准化提出自己的建议和意见。生活中喜欢弹钢琴、演讲与分享。主要技术研究方向为Web前端与基础设施架构、WebAssembly、LLVM以及编译器等相关领域。

章节目录

版权信息

作者简介

序言(一)

序言(二)

前言

第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 自定义注释语法

深入浅出WebAssembly是2018年由电子工业出版社出版,作者于航。

得书感谢您对《深入浅出WebAssembly》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
深入浅出云网融合 电子书
云网融合是当前信息网络发展的趋势,本书对云、网发展历程及数字经济和新基建进行了介绍,提出了云网融合的概念;然后分析了运营商、互联网企业、ICT厂商当前的云网发展策略,重点从云、网和5G3个方面分别介绍行业现状、发展趋势,以及融合业务诉求和建设建议,并对云网融合对安全、基础设施和运营系统等保障要求进行了分析;对算力网络的发展趋势进行了展望。本书可作为运营商、互联网企业、通信设备厂商等信息通信产业链相
深入浅出密码学 电子书
本书由资深的密码学大咖David Wong编写,由专业研究密码学的博士和硕士团队翻译完成。
深入浅出人工神经网络 电子书
作为一本讲解人工神经网络原理的图书,《深入浅出人工神经网络》旨在让读者在短的时间内对这些原理知识有一个清晰明了的认识和理解。《深入浅出人工神经网络》总共分为3部分,总计9章。第1部分讲解了人工神经网络的源头—生物神经网络的基础知识,第2部分讲解了学习人工神经网络的数学知识,第3部分讲解了几种常见而典型的人工神经网络模型,比如感知器、多层感知器、径向基函数神经网络、卷积神经网络、循环神经网络等。《深
深入浅出 ASP.NET Core 电子书
本书使用ASP.NETCore从零开始搭建一个实际的项目。从基本的控制台应用程序开始,介绍ASP.NETCore基本的启动流程,涵盖ASP.NETCore框架中各个技术的实际应用。同时,本书也会介绍一些ASP.NETCore的高级概念。
深入浅出5G移动通信 电子书
适读人群 :从事移动通信网络规划、研究、设计等工程技术的人员与广大通信爱好者 本书由实战派通信网络工程师撰写,完美阐述5G移动通信网络的基本原理、网络架构、关键技术、网络部署策略、网络规划、三大典型应用场景与案例