《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编译器。即收获了“鱼”,又学会了“渔”。
《WebAssembly原理与核心技术》目录:
前言
第一部分 概述
第1章 Wasm介绍3
11 Wasm简史3
12 Wasm简介6
13 准备工作10
14 你好Wasm11
15 本章小结13
第二部分 二进制和文本格式
第2章 二进制格式17
21 二进制格式介绍17
211 Wasm二进制格式总体结构18
212 索引空间21
213 实体类型23
22 二进制格式分析25
220 魔数和版本号25
221 类型段26
222 导入段28
223 函数段30
224 表段30
225 内存段31
226 全局段32
227 导出段33
228 起始段34
229 元素段35
2210 代码段35
2211 数据段37
2212 自定义段38
23 二进制格式解码39
231 LEB128介绍39
232 解码基本类型41
233 解码向量类型44
234 处理tag44
235 解码代码项和表达式45
236 解码整体结构45
237 处理错误情况47
24 实现dump命令48
25 本章小结50
第3章 指令集51
31 指令集介绍51
311 操作码51
312 助记符53
313 立即数54
314 操作数57
32 指令分析58
321 数值指令58
322 变量指令60
323 内存指令61
324 结构化控制指令62
325 跳转指令64
326 函数调用指令65
33 指令解码66
34 完善dump命令69
35 本章小结70
第4章 文本格式71
41 基本结构71
411 类型域72
412 导入和导出域73
413 函数域75
414 表域和元素域75
415 内存域和数据域76
416 全局域77
417 起始域77
42 指令78
421 普通形式78
422 折叠形式79
43 本章小结81
第三部分 虚拟机和解释器
第5章 操作数栈85
51 操作数栈85
52 虚拟机87
521 指令循环88
522 指令分派88
53 参数指令89
531 drop指令90
532 select指令90
54 数值指令91
541 常量指令92
542 测试指令92
543 比较指令93
544 一元算术指令95
545 二元算术指令96
546 类型转换指令99
55 本章效果103
56 本章小结105
第6章 内存107
61 内存介绍107
62 内存实现108
63 内存指令109
631 size和grow指令110
632 加载指令111
633 存储指令113
64 本章效果115
65 本章小结117
第7章 函数调用(上)119
71 函数调用介绍119
72 函数调用实现122
721 增强操作数栈123
722 添加调用栈124
723 增强虚拟机126
724 call指令127
73 局部变量指令129
731 localget指令130
732 localset指令130
733 localtee指令131
74 全局变量指令132
741 globalget指令132
742 globalset指令133
75 本章效果134
76 本章小结135
第8章 控制指令137
81 控制指令介绍137
811 跳转标签138
812 跳转标签索引139
813 块类型141
82 控制指令实现142
821 block和loop指令142
822 if指令144
823 br指令146
824 br_if指令148
825 br_table指令149
826 return指令150
827 unreachable和nop指令151
83 本章效果152
84 本章小结153
第9章 函数调用(下)155
91 本地函数调用155
911 本地函数介绍155
912 统一两种函数158
913 调用本地函数159
914 链接本地函数161
915 测试本节代码162
92 间接函数调用163
921 间接函数调用介绍163
922 实现表165
923 初始化表166
924 call_indirect指令167
925 测试本节代码168
93 本章小结169
第10章 链接和实例化171
101 定义实例接口171
102 实现实例接口174
1021 函数174
1022 表176
1023 全局变量177
1024 虚拟机177
103 实例化模块178
104 本章效果180
105 本章小结183
第11章 错误处理和验证185
111 各种错误186
1111 解码错误186
1112 结构错误188
1113 实例化错误189
1114 运行时错误190
112 验证整体结构190
113 验证函数字节码192
1131 数据结构193
1132 操作数栈194
1133 控制栈195
1134 验证指令197
114 本章效果198
115 本章小结199
第四部分 进阶
第12章 编译为Wasm203
121 控制指令203
122 参数指令207
123 变量指令208
124 内存指令210
125 数值指令213
126 本章小结215
第13章 AOT编译器217
131 AOT介绍217
132 编译模块219
133 编译函数220
1331 内部函数221
1332 外部函数222
1333 导出函数222
1334 辅助方法223
134 编译指令224
1341 参数指令224
1342 变量指令225
1343 内存指令226
1344 数值指令227
1345 结构化控制指令228
1346 跳转指令230
1347 函数调用指令231
135 本章效果233
136 本章小结234
第14章 提案和前景235
141 提案235
1411 多块内存237
1412 内存块操作237
1413 引用类型239
1414 尾递归调用241
1415 异常处理242
1416 多线程支持244
1417 其他提案247
142 前景248
附录A Wasm指令表249
附录B 二进制格式
附录C WAT语法255
· · · · · ·