搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
出版时间 :
WebAssembly原理与核心技术
0.00     定价 ¥ 79.00
浙江图书馆
  • ISBN:
    9787111665540
  • 作      者:
    张秀宏
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2020-09-01
收藏
编辑推荐

(1)作者是的WebAssembly技术专家,对WebAssembly的规范、源代码、核心技术都有非常深入的研究,而且在Web开发、游戏和区块链领域有丰富的实践经验。
(2)作者是的虚拟机技术专家,对Java、Go和Lua等语言及其虚拟机有非常深入的研究,撰写了《自己动手写Java虚拟机》和《自己动手实现Lua:虚拟机、编译器、标准库》。
(3)本书从工作原理、核心技术和规范3个维度全面解读WebAssembly,同时给出具体实现思路和代码

展开
作者简介

张秀宏
服务器开发工程师,在游戏服务器、区块链等领域有多年的开发和架构经验。曾在EA、乐元素、比特大陆等公司担任高级服务器工程师,对Java、Go、Lua等语言以及高级语言虚拟机有非常深入的研究。
曾独立撰写畅销书《自己动手写Java虚拟机》和《自己动手实现Lua:虚拟机、编译器、标准库》,广受读者好评。《WebAssembly原理与核心技术》是作者在高级语言虚拟机领域的又一力作。

展开
内容介绍


WebAssembly是栈式虚拟机和字节码技术的*新应用,在Web开发、后端开发、区块链等领域大显身手,越来越受欢迎。
本书是WebAssembly入门和进阶的必读书,它不仅对WebAssembly的工作原理、核心技术和规范进行了全面的剖析和解读,而且给出了实现WebAssembly解释器和AOT编译器的思路和代码。

本书共14章,分为四个部分:

★第壹部分 WebAssembly概述(第1章) 

主要介绍了WebAssembly的概念、发展历史以及阅读本书需要做的准备工作。

★第二部分 二进制和文本格式(第2~4章) 

详细讲解了WebAssembly的二进制格式、文本格式以及指令集。

★第三部分 虚拟机和解释器(第5~11章) 

详细讲解了WebAssembly的解释器和虚拟机的工作原理以及实现思路,包括操作数栈、内存、函数调用、控制指令、链接和实例化、错误处理和验证等。

★第四部分 WebAssembly进阶(第12~14章) 

深入地讲解了AOT编译器的实现思路和WebAssembly的提案等内容。
通过阅读本书,读者不仅可以理解WebAssembly核心原理,还可以学习如何实现WebAssembly解释器和AOT编译器。即收获了“鱼”,又学会了“渔”。

展开
精彩书评

★JavaScript的诞生极大地丰富了Web的可操作性,但它是一个有缺陷的速成语言,Wasm的设计更加严谨,将来不但有可能成为Web开发的主要语言,而且也可能会在后端开发、智能合约等领域大显身手。未来已至,Wasm值得每一个有追求的程序员学习和使用。本书详细讲解了Wasm的原理和核心技术,能帮助读者从底层了解Wasm。

—— 杨海坡 CoinEx CEO

 

★文字是死板和模糊的,而代码是灵活而精确的。因为工作需要,我曾耗费大量时间反复阅读WebAssembly规范,最终却不及阅读本书的示例代码来得更准确和深刻。如果你希望深入理解WebAssembly的原理,跟随本书的代码和讲解,定会有抽丝剥茧后豁然开朗的感觉。

—— 王逵 资深芯片架构师 Matrixport区块链技术专家

 

★区块链的发展日新月异,而智能合约是区块链的核心功能,一个高效的虚拟机对于智能合约的运行非常关键。WebAssembly作为新一代虚拟机的标准,将会对智能合约发展起到非常重要的推动作用,这本书详细地解释了WebAssembly技术以及其使用,如果你对于智能合约和虚拟机技术感兴趣,一定不能错过这本书。

——姜家志 区块链资深开发者 Matrixport CTO


展开
目录


【第一部分 概述】

●第1章  Wasm介绍 3

1.1 Wasm简史 3

1.2 Wasm简介 6

1.3 准备工作 10

1.4 你好Wasm 11

1.5 本章小结 13

 

【第二部分 二进制和文本格式】

●第2章 二进制格式 17

2.1 二进制格式介绍 17

2.1.1 Wasm二进制格式总体结构 18

2.1.2 索引空间 21

2.1.3 实体类型 23

2.2 二进制格式分析 25

2.2.0 魔数和版本号 25

2.2.1 类型段 26

2.2.2 导入段 28

2.2.3 函数段 30

2.2.4 表段 30

2.2.5 内存段 31

2.2.6 全局段 32

2.2.7 导出段 33

2.2.8 起始段 34

2.2.9 元素段 35

2.2.10 代码段 35

2.2.11 数据段 37

2.2.12 自定义段 38

2.3 二进制格式解码 39

2.3.1 LEB128介绍 39

2.3.2 解码基本类型 41

2.3.3 解码向量类型 44

2.3.4 处理tag 44

2.3.5 解码代码项和表达式 45

2.3.6 解码整体结构 45

2.3.7 处理错误情况 47

2.4 实现dump命令 48

2.5 本章小结 50

 

●第3章 指令集 51

3.1 指令集介绍 51

3.1.1 操作码 51

3.1.2 助记符 53

3.1.3 立即数 54

3.1.4 操作数 57

3.2 指令分析 58

3.2.1 数值指令 58

3.2.2 变量指令 60

3.2.3 内存指令 61

3.2.4 结构化控制指令 62

3.2.5 跳转指令 64

3.2.6 函数调用指令 65

3.3 指令解码 66

3.4 完善dump命令 69

3.5 本章小结 70

 

●第4章 文本格式 71

4.1 基本结构 71

4.1.1 类型域 72

4.1.2 导入和导出域 73

4.1.3 函数域 75

4.1.4 表域和元素域 75

4.1.5 内存域和数据域 76

4.1.6 全局域 77

4.1.7 起始域 77

4.2 指令 78

4.2.1 普通形式 78

4.2.2 折叠形式 79

4.3 本章小结 81

 

【第三部分 虚拟机和解释器】

●第5章 操作数栈 85

5.1 操作数栈 85

5.2 虚拟机 87

5.2.1 指令循环 88

5.2.2 指令分派 88

5.3 参数指令 89

5.3.1 drop指令 90

5.3.2 select指令 90

5.4 数值指令 91

5.4.1 常量指令 92

5.4.2 测试指令 92

5.4.3 比较指令 93

5.4.4 一元算术指令 95

5.4.5 二元算术指令 96

5.4.6 类型转换指令 99

5.5 本章效果 103

5.6 本章小结 105

 

●第6章 内存 107

6.1 内存介绍 107

6.2 内存实现 108

6.3 内存指令 109

6.3.1 size和grow指令 110

6.3.2 加载指令 111

6.3.3 存储指令 113

6.4 本章效果 115

6.5 本章小结 117

 

●第7章 函数调用(上) 119

7.1 函数调用介绍 119

7.2 函数调用实现 122

7.2.1 增强操作数栈 123

7.2.2 添加调用栈 124

7.2.3 增强虚拟机 126

7.2.4 call指令 127

7.3 局部变量指令 129

7.3.1 local.get指令 130

7.3.2 local.set指令 130

7.3.3 local.tee指令 131

7.4 全局变量指令 132

7.4.1 global.get指令 132

7.4.2 global.set指令 133

7.5 本章效果 134

7.6 本章小结 135

 

●第8章 控制指令 137

8.1 控制指令介绍 137

8.1.1 跳转标签 138

8.1.2 跳转标签索引 139

8.1.3 块类型 141

8.2 控制指令实现 142

8.2.1 block和loop指令 142

8.2.2 if指令 144

8.2.3 br指令 146

8.2.4 br_if指令 148

8.2.5 br_table指令 149

8.2.6 return指令 150

8.2.7 unreachable和nop指令 151

8.3 本章效果 152

8.4 本章小结 153

 

●第9章 函数调用(下) 155

9.1 本地函数调用 155

9.1.1 本地函数介绍 155

9.1.2 统一两种函数 158

9.1.3 调用本地函数 159

9.1.4 链接本地函数 161

9.1.5 测试本节代码 162

9.2 间接函数调用 163

9.2.1 间接函数调用介绍 163

9.2.2 实现表 165

9.2.3 初始化表 166

9.2.4 call_indirect指令 167

9.2.5 测试本节代码 168

9.3 本章小结 169

 

●第10章 链接和实例化 171

10.1 定义实例接口 171

10.2 实现实例接口 174

10.2.1 函数 174

10.2.2 表 176

10.2.3 全局变量 177

10.2.4 虚拟机 177

10.3 实例化模块 178

10.4 本章效果 180

10.5 本章小结 183

 

●第11章 错误处理和验证 185

11.1 各种错误 186

11.1.1 解码错误 186

11.1.2 结构错误 188

11.1.3 实例化错误 189

11.1.4 运行时错误 190

11.2 验证整体结构 190

11.3 验证函数字节码 192

11.3.1 数据结构 193

11.3.2 操作数栈 194

11.3.3 控制栈 195

11.3.4 验证指令 197

11.4 本章效果 198

11.5 本章小结 199

 

【第四部分 进阶】

●第12章 编译为Wasm 203

12.1 控制指令 203

12.2 参数指令 207

12.3 变量指令 208

12.4 内存指令 210

12.5 数值指令 213

12.6 本章小结 215

 

●第13章 AOT编译器 217

13.1 AOT介绍 217

13.2 编译模块 219

13.3 编译函数 220

13.3.1 内部函数 221

13.3.2 外部函数 222

13.3.3 导出函数 222

13.3.4 辅助方法 223

13.4 编译指令 224

13.4.1 参数指令 224

13.4.2 变量指令 225

13.4.3 内存指令 226

13.4.4 数值指令 227

13.4.5 结构化控制指令 228

13.4.6 跳转指令 230

13.4.7 函数调用指令 231

13.5 本章效果 233

13.6 本章小结 234

 

●第14章 提案和前景 235

14.1 提案 235

14.1.1 多块内存 237

14.1.2 内存块操作 237

14.1.3 引用类型 239

14.1.4 尾递归调用 241

14.1.5 异常处理 242

14.1.6 多线程支持 244

14.1.7 其他提案 247

14.2 前景 248

附录A Wasm指令表 249

附录B 二进制格式 253

附录C WAT语法 255






展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

温馨提示:请使用浙江图书馆的读者帐号和密码进行登录

点击获取验证码
登录