国内首著《深入浅出WebAssembly》出版啦(。・ω・。)ノ


  • Global Moderator

    详情请见:https://zhuanlan.zhihu.com/p/47577104
    目录:

    # 第1章 漫谈WebAssembly发展史.... 1
    ## 1.1 JavaScript的发展和弊端.... 1
    1.1.1 快速发展与基准测试.... 1
    1.1.2 Web新时代与不断挑战.... 8
    1.1.3 无法跨越的“阻碍”.... 11
    1.1.4 Chrome V8引擎链路.... 17
    ## 1.2 曾经尝试——ASM.js与PNaCl. 28
    1.2.1 失落的ASM.js. 28
    1.2.2 古老的NaCl与PNaCl. 42
    ## 1.3 新的可能——WebAssembly.. 57
    1.3.1 改变与颠覆.... 57
    1.3.2 一路向前,WCG与WWG.. 85
    
    # 第2章 WebAssembly核心原理(基于MVP标准).... 90
    ## 2.1 应用与标准Web接口.... 90
    2.1.1 编译与初始化.... 90
    2.1.2 验证模块.... 106
    2.1.3 遇到错误.... 106
    2.1.4 内存分配.... 108
    2.1.5 表.... 112
    ## 2.2 深入设计模型——堆栈机.... 118
    2.2.1 堆栈式虚拟机.... 119
    2.2.2 逆波兰表达式.... 125
    2.2.3 Shunting-yard算法.... 126
    2.2.4 标签与跳转.... 130
    2.2.5 条件语句.... 135
    2.2.6 子程序调用.... 137
    2.2.7 变量.... 138
    2.2.8 栈帧.... 139
    2.2.9 堆.... 140
    ## 2.3 类型检查.... 141
    2.3.1 数据指令类型.... 142
    2.3.2 基本流程控制.... 144
    2.3.3 基于表达式的控制流.... 149
    2.3.4 类型堆栈的一致性.... 151
    2.3.5 不可达代码.... 155
    ## 2.4 二进制编码.... 156
    2.4.1 字节序——大端模式与小端模式.... 157
    2.4.2 基于LEB-128的整数编码.... 161
    2.4.3 基于IEEE-754—2008的浮点数编码.... 163
    2.4.4 基于UTF-8的字符串编码.... 167
    2.4.5 模块数据类型.... 168
    2.4.6 虚拟指令与编码.... 169
    2.4.7 类型构造符.... 174
    ## 2.5 模块.... 175
    2.5.1 段.... 175
    2.5.2 索引空间.... 185
    2.5.3 二进制原型结构.... 186
    ## 2.6 内存结构.... 196
    2.6.1 操作运算符.... 197
    2.6.2 寻址.... 197
    2.6.3 对齐.... 198
    2.6.4 溢出与调整.... 203
    
    # 第3章 动态链接与SIMD(基于MVP标准).... 204
    ## 3.1 动态链接(Dynamic Linking).... 204
    3.1.1 ELF.. 206
    3.1.2 符号重定向(Symbol Relocation).... 212
    3.1.3 GOT(Global Offset Table,全局偏移表).... 225
    3.1.4 PLT(Procedure Lookup Table,过程查询表).... 229
    3.1.5 基于表的Wasm模块动态链接.... 233
    ## 3.2 单指令多数据流(SIMD).... 237
    3.2.1 SIMD应用.... 239
    3.2.2 并行与并发.... 243
    3.2.3 费林分类法.... 244
    3.2.4 SIMD.js & TC39.. 246
    3.2.5 WebAssembly上的SIMD扩展.... 248
    
    # 第4章 深入LLVM与WAT.. 250
    ## 4.1 LLVM——底层虚拟机.... 250
    4.1.1 传统的编译器架构.... 251
    4.1.2 LLVM中间表示层.... 252
    4.1.3 基于LLVM的编译器架构.... 254
    4.1.4 LLVM优化策略.... 256
    4.1.5 LLVM命令行工具.... 261
    4.1.6 WebAssembly与LLVM... 268
    ## 4.2 基于LLVM定义新的编程语言.... 272
    4.2.1 图灵完备与DSL.. 276
    4.2.2 简易词法分析器.... 280
    4.2.3 RDP与OPP算法.... 287
    4.2.4 AST(抽象语法树).... 295
    4.2.5 简易语法分析器.... 296
    4.2.6 生成LLVM-IR代码.... 303
    4.2.7 链接优化器.... 307
    4.2.8 编译到目标代码.... 308
    4.2.9 整合I/O交互层.... 312
    ## 4.3 WAT.. 315
    4.3.1 S-表达式.... 317
    4.3.2 WAT/Wasm与Binary-AST.. 318
    4.3.3 其他与设计原则.... 320
    
    # 第5章 Emscripten基础应用.... 322
    ## 5.1 利器——Emscripten工具链.... 322
    5.1.1 Emscripten发展历史.... 322
    5.1.2 Emscripten组成结构.... 324
    5.1.3 Emscripten下载、安装与配置.... 326
    5.1.4 运行测试套件.... 330
    5.1.5 编译到ASM.js. 331
    ## 5.2 连接C/C++与WebAssembly.. 333
    5.2.1 构建类型.... 334
    5.2.2 Emscripten运行时环境.... 342
    5.2.3 在JavaScript代码中调用C/C++函数.... 351
    5.2.4 在C/C++代码中调用JavaScript函数.... 363
    
    # 第6章 基于Emscripten的语言关系绑定.... 382
    ## 6.1 基于Embind实现关系绑定.... 384
    6.1.1 简单类.... 389
    6.1.2 数组与对象类型.... 391
    6.1.3 高级类元素.... 393
    6.1.4 重载函数.... 407
    6.1.5 枚举类型.... 408
    6.1.6 基本类型.... 409
    6.1.7 容器类型.... 411
    6.1.8 转译JavaScript代码.... 413
    6.1.9 内存视图.... 416
    ## 6.2 基于WebIDL实现关系绑定.... 417
    6.2.1 指针、引用和值类型.... 420
    6.2.2 类成员变量.... 422
    6.2.3 常量“const”关键字.... 423
    6.2.4 命名空间..... 424
    6.2.5 运算符重载.... 425
    6.2.6 枚举类型.... 426
    6.2.7 接口类.... 429
    6.2.8 原始指针、空指针与void指针.... 431
    6.2.9 默认类型转换.... 434
    
    # 第7章 探索Emscripten高级特性.... 437
    ## 7.1 加入优化流程.... 437
    7.1.1 使用编译器代码优化策略.... 442
    7.1.2 使用GCC压缩代码.... 444
    7.1.3 使用IndexedDB缓存模块对象.... 446
    7.1.4 其他优化参数.... 453
    ## 7.2 使用标准库与文件系统.... 454
    7.2.1 使用基于musl和libc++的标准库.... 455
    7.2.2 虚拟文件系统结构.... 458
    7.2.3 打包初始化文件.... 460
    7.2.4 基本文件系统操作.... 461
    7.2.5 懒加载.... 470
    7.2.6 Fetch API. 474
    ## 7.3 处理浏览器事件.... 479
    7.3.1 事件注册函数.... 480
    7.3.2 事件回调函数.... 481
    7.3.3 通用类型与返回值类型.... 482
    7.3.4 常用事件.... 484
    ## 7.4 基于EGL、OpenGL、SDL和OpenAL的多媒体处理.... 487
    7.4.1 使用EGL与OpenGL处理图形.... 488
    7.4.2 使用SDL处理图形.... 494
    7.4.3 使用OpenAL处理音频.... 497
    ## 7.5 调试WebAssembly应用.... 500
    7.5.1 编译器的调试信息.... 500
    7.5.2 使用调试模式.... 502
    7.5.3 手动跟踪.... 503
    7.5.4 其他常用编译器调试选项.... 505
    
    # 第8章 WebAssembly综合实践、发展与未来.... 506
    ## 8.1 DIP综合实践应用.... 506
    8.1.1 应用描述.... 506
    8.1.2 滤镜与卷积.... 507
    8.1.3 基本组件类型与架构.... 511
    8.1.4 编写基本页面骨架(HTML与CSS).... 512
    8.1.5 编写核心卷积函数(C++).... 513
    8.1.6 编写主渲染循环与“胶水”代码(JavaScript).... 515
    8.1.7 使用Emscripten编译并运行应用.... 520
    8.1.8 性能对比.... 521
    ## 8.2 WebAssembly常用工具集.... 522
    8.2.1 Cheerp.. 522
    8.2.2 Webpack 4.. 524
    8.2.3 Go和Rust的WebAssembly实践.... 526
    8.2.4 Binaryen.. 529
    8.2.5 WasmFiddle. 530
    8.2.6 Wabt. 531
    8.2.7 AssemblyScript. 531
    ## 8.3 WebAssembly未来草案.... 531
    8.3.1 GC(垃圾回收).... 532
    8.3.2 Multi-Thread(多线程)与原子操作.... 532
    8.3.3 异常处理.... 532
    8.3.4 多返回值扩展.... 532
    8.3.5 ES模块.... 532
    8.3.6 尾递归.... 533
    8.3.7 BigInts的双向支持.... 533
    8.3.8 自定义注释语法.... 533
    

 

A community for developers looking to put WebAssembly to use today. Come rock WebAssembly with us!