深入浅出WebAssembly 封面

深入浅出WebAssembly

评分 4.0
字数
27.6万字
章节数
180
ISBN
9787121352171

标签

内容简介

WebAssembly是一种新的二进制格式,它可以方便地将CC++等静态语言的代码快速地“运行”在浏览器中,这一特性为前端密集计算场景提供了无限可能。不仅如此,通过WebAssembly技术,我们还可以将基于Unity等游戏引擎开发的大型游戏快速地移植到Web端。WebAssembly技术现在已经被计划设计成W3C的标准,众多浏览器厂商已经提供了对其MVP版本标准的支持。

编辑推荐

《深入浅出WebAssembly》是一本填补中文技术书籍市场空白的力作。作者于航凭借其在云原生和边缘计算领域的深厚工程背景,没有停留在WebAssembly(简称Wasm)作为"浏览器内高性能代码"的浅层介绍,而是系统性地揭示了其作为通用,安全,高效的底层虚拟机技术的全貌。本书从计算机体系结构的基础讲起,循序渐进地阐释了Wasm的设计哲学,二进制格式,文本表示,执行引擎原理,并深入探讨了其在Web前端,服务端,区块链等场景的应用实践。其价值在于,它不仅是一本操作指南,更是一本帮助开发者构建对WAssembly完整心智模型的"地图"。书中对Emscripten,WASI等关键工具和标准的剖析尤为透彻,对于希望将C/C++/Rust等语言生态带入Web及其他沙箱环境的开发者而言,具有极高的参考价值。尽管技术演进迅速,但本书对核心原理的扎实解读,使其在相当长的时间内都不会过时。

适合谁读

适合

  • 希望系统掌握WebAssembly核心原理与技术细节的中高级前端或后端开发者
  • 有C/C++/Rust背景,希望探索代码跨平台部署(尤其是Web环境)的工程师
  • 对浏览器底层技术,虚拟机或编译原理有浓厚兴趣的技术研究者
  • 需要评估或实施Wasm技术方案的技术负责人和架构师

不适合

  • 仅想快速上手一个前端框架或寻找简单插件实现方案的纯入门级初学者
  • 希望寻找大量现成复制粘贴代码片段来解决具体业务问题的读者

阅读建议

  1. 建议具备基本的计算机组成原理和至少一门编程语言(如JavaScript/C/C++)的基础后再进行阅读,收获更大
  2. 阅读时可将重点放在第一部分的原理剖析和第三部分的实践展望,动手实践部分可结合官方最新文档进行
  3. 本书技术密度较高,建议分章节阅读,并配合书中提到的官方规范与社区项目进行拓展学习

出版社简介

电子工业出版社 中国 · 成立于 1982 年

电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。

目录

  1. 版权信息
  2. 作者简介
  3. 内容简介
  4. 序言(一)
  5. 序言(二)
  6. 前言
  7. 第1章 漫谈WebAssembly发展史
  8. 1.1 JavaScript的发展和弊端
  9. 1.1.1 快速发展与基准测试
  10. 1.1.2 Web新时代与不断挑战
  11. 1.1.3 无法跨越的“阻碍”
  12. 1.1.4 Chrome V8引擎链路
  13. 1.2 曾经尝试——ASM.js与PNaCl
  14. 1.2.1 失落的ASM.js
  15. 1.2.2 古老的NaCl与PNaCl
  16. 1.3 新的可能——WebAssembly
  17. 1.3.1 改变与颠覆
  18. 1.3.2 一路向前,WCG与WWG
  19. 第2章 WebAssembly核心原理(基于MVP标准)
  20. 2.1 应用与标准Web接口
  21. 2.1.1 编译与初始化
  22. 2.1.2 验证模块
  23. 2.1.3 遇到错误
  24. 2.1.4 内存分配
  25. 2.1.5 表
  26. 2.2 深入设计模型——堆栈机
  27. 2.2.1 堆栈式虚拟机
  28. 2.2.2 逆波兰表达式
  29. 2.2.3 Shunting-yard算法
  30. 2.2.4 标签与跳转
  31. 2.2.5 条件语句
  32. 2.2.6 子程序调用
  33. 2.2.7 变量
  34. 2.2.8 栈帧
  35. 2.2.9 堆
  36. 2.3 类型检查
  37. 2.3.1 数据指令类型
  38. 2.3.2 基本流程控制
  39. 2.3.3 基于表达式的控制流
  40. 2.3.4 类型堆栈的一致性
  41. 2.3.5 不可达代码
  42. 2.4 二进制编码
  43. 2.4.1 字节序——大端模式与小端模式
  44. 2.4.2 基于LEB-128的整数编码
  45. 2.4.3 基于IEEE-754—2008的浮点数编码
  46. 2.4.4 基于UTF-8的字符串编码
  47. 2.4.5 模块数据类型
  48. 2.4.6 虚拟指令与编码
  49. 2.4.7 类型构造符
  50. 2.5 模块
  51. 2.5.1 段
  52. 2.5.2 索引空间
  53. 2.5.3 二进制原型结构
  54. 2.6 内存结构
  55. 2.6.1 操作运算符
  56. 2.6.2 寻址
  57. 2.6.3 对齐
  58. 2.6.4 溢出与调整
  59. 第3章 动态链接与SIMD(基于MVP标准)
  60. 3.1 动态链接(Dynamic Linking)
  61. 3.1.1 ELF
  62. 3.1.2 符号重定向(Symbol Relocation)
  63. 3.1.3 GOT(Global Offset Table,全局偏移表)
  64. 3.1.4 PLT(Procedure Lookup Table,过程查询表)
  65. 3.1.5 基于表的Wasm模块动态链接
  66. 3.2 单指令多数据流(SIMD)
  67. 3.2.1 SIMD应用
  68. 3.2.2 并行与并发
  69. 3.2.3 费林分类法
  70. 3.2.4 SIMD.js & TC39
  71. 3.2.5 WebAssembly上的SIMD扩展
  72. 第4章 深入LLVM与WAT
  73. 4.1 LLVM——底层虚拟机
  74. 4.1.1 传统的编译器架构
  75. 4.1.2 LLVM中间表示层
  76. 4.1.3 基于LLVM的编译器架构
  77. 4.1.4 LLVM优化策略
  78. 4.1.5 LLVM命令行工具
  79. 4.1.6 WebAssembly与LLVM
  80. 4.2 基于LLVM定义新的编程语言
  81. 4.2.1 图灵完备与DSL
  82. 4.2.2 简易词法分析器
  83. 4.2.3 RDP与OPP算法
  84. 4.2.4 AST(抽象语法树)
  85. 4.2.5 简易语法分析器
  86. 4.2.6 生成LLVM-IR代码
  87. 4.2.7 链接优化器
  88. 4.2.8 编译到目标代码
  89. 4.2.9 整合I/O交互层
  90. 4.3 WAT
  91. 4.3.1 S-表达式
  92. 4.3.2 WAT/Wasm与Binary-AST
  93. 4.3.3 其他与设计原则
  94. 第5章 Emscripten基础应用
  95. 5.1 利器——Emscripten工具链
  96. 5.1.1 Emscripten发展历史
  97. 5.1.2 Emscripten组成结构
  98. 5.1.3 Emscripten下载、安装与配置
  99. 5.1.4 运行测试套件
  100. 5.1.5 编译到ASM.js
  101. 5.2 连接C/C++与WebAssembly
  102. 5.2.1 构建类型
  103. 5.2.2 Emscripten运行时环境
  104. 5.2.3 在JavaScript代码中调用C/C++函数
  105. 5.2.4 在C/C++代码中调用JavaScript函数
  106. 第6章 基于Emscripten的语言关系绑定
  107. 6.1 基于Embind实现关系绑定
  108. 6.1.1 简单类
  109. 6.1.2 数组与对象类型
  110. 6.1.3 高级类元素
  111. 6.1.4 重载函数
  112. 6.1.5 枚举类型
  113. 6.1.6 基本类型
  114. 6.1.7 容器类型
  115. 6.1.8 转译JavaScript代码
  116. 6.1.9 内存视图
  117. 6.2 基于WebIDL实现关系绑定
  118. 6.2.1 指针、引用和值类型
  119. 6.2.2 类成员变量
  120. 6.2.3 常量“const”关键字
  121. 6.2.4 命名空间
  122. 6.2.5 运算符重载
  123. 6.2.6 枚举类型
  124. 6.2.7 接口类
  125. 6.2.8 原始指针、空指针与void指针
  126. 6.2.9 默认类型转换
  127. 第7章 探索Emscripten高级特性
  128. 7.1 加入优化流程
  129. 7.1.1 使用编译器代码优化策略
  130. 7.1.2 使用GCC压缩代码
  131. 7.1.3 使用IndexedDB缓存模块对象
  132. 7.1.4 其他优化参数
  133. 7.2 使用标准库与文件系统
  134. 7.2.1 使用基于musl和libc++的标准库
  135. 7.2.2 虚拟文件系统结构
  136. 7.2.3 打包初始化文件
  137. 7.2.4 基本文件系统操作
  138. 7.2.5 懒加载
  139. 7.2.6 Fetch API
  140. 7.3 处理浏览器事件
  141. 7.3.1 事件注册函数
  142. 7.3.2 事件回调函数
  143. 7.3.3 通用类型与返回值类型
  144. 7.3.4 常用事件
  145. 7.4 基于EGL、OpenGL、SDL和OpenAL的多媒体处理
  146. 7.4.1 使用EGL与OpenGL处理图形
  147. 7.4.2 使用SDL处理图形
  148. 7.4.3 使用OpenAL处理音频
  149. 7.5 调试WebAssembly应用
  150. 7.5.1 编译器的调试信息
  151. 7.5.2 使用调试模式
  152. 7.5.3 手动跟踪
  153. 7.5.4 其他常用编译器调试选项
  154. 第8章 WebAssembly综合实践、发展与未来
  155. 8.1 DIP综合实践应用
  156. 8.1.1 应用描述
  157. 8.1.2 滤镜与卷积
  158. 8.1.3 基本组件类型与架构
  159. 8.1.4 编写基本页面骨架(HTML与CSS)
  160. 8.1.5 编写核心卷积函数(C++)
  161. 8.1.6 编写主渲染循环与“胶水”代码(JavaScript)
  162. 8.1.7 使用Emscripten编译并运行应用
  163. 8.1.8 性能对比
  164. 8.2 WebAssembly常用工具集
  165. 8.2.1 Cheerp
  166. 8.2.2 Webpack 4
  167. 8.2.3 Go和Rust的WebAssembly实践
  168. 8.2.4 Binaryen
  169. 8.2.5 WasmFiddle
  170. 8.2.6 Wabt
  171. 8.2.7 AssemblyScript
  172. 8.3 WebAssembly未来草案
  173. 8.3.1 GC(垃圾回收)
  174. 8.3.2 Multi-Thread(多线程)与原子操作
  175. 8.3.3 异常处理
  176. 8.3.4 多返回值扩展
  177. 8.3.5 ES模块
  178. 8.3.6 尾递归
  179. 8.3.7 BigInts的双向支持
  180. 8.3.8 自定义注释语法

常见问题

这本书适合完全没接触过WebAssembly的人吗?
本书有入门引导,但更侧重于深度解析。完全零基础的读者可能会感到前几章的概念有一定门槛,建议先通过官方入门教程或网络文章对Wasm有一个最基础的感性认识,再阅读本书会事半功倍。
书中的代码和案例现在(2023年后)是否过时?
WebAssembly核心标准(如MVP)非常稳定,本书对其二进制格式,指令集,执行模型的讲解不会过时。书中涉及的Emscripten等工具链和WASI标准虽在持续演进,但本书对其设计思想和基本用法的阐述仍是宝贵的学习基础,读者可据此轻松过渡到最新的官方文档。
这本书与同类英文原版书相比如何?
本书是中文领域内最早系统讲解WebAssembly的专著之一,其深度和广度不亚于甚至超过部分英文入门书。作者结合了自身实践,对原理的剖析和中文语境下的表述,对国内开发者更为友好,是系统学习Wasm的优选中文资料。

读者评论

查询本书

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

作者简介

于航 作者

于航是一位作品横跨编程设计、管理、工业技术与励志成长等多个领域的中文作者。公开资料有限,其国籍、生卒年、学历与职业背景均未见明确记载,目前库内收录其作品五种。其中《深入浅出WebAssembly》面向前端与底层技术读者,介绍WebAssembly的原理与应用,体现出作者在编程技术写作上的普及意识;《波士顿咨询工作法(全3册)》及《波士顿咨询工作法:精准运用直觉》聚焦咨询思维与职场方法;《情商高的人都这么说话》则属于沟通与个人成长类读物。另有《污水深海排放扩散器设计技术与案例研究》,显示其在工业技术领域亦有涉猎。总体而言,于航的写作兼顾技术讲解与实务方法,题材跨度较大,语言倾向通俗易懂、面向实际应用,适合希望快速入门的普通读者阅读。

同一作者

同类高分