标签
内容简介
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技术方案的技术负责人和架构师
不适合
- 仅想快速上手一个前端框架或寻找简单插件实现方案的纯入门级初学者
- 希望寻找大量现成复制粘贴代码片段来解决具体业务问题的读者
阅读建议
- 建议具备基本的计算机组成原理和至少一门编程语言(如JavaScript/C/C++)的基础后再进行阅读,收获更大
- 阅读时可将重点放在第一部分的原理剖析和第三部分的实践展望,动手实践部分可结合官方最新文档进行
- 本书技术密度较高,建议分章节阅读,并配合书中提到的官方规范与社区项目进行拓展学习
出版社简介
电子工业出版社
中国 · 成立于 1982 年
电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。
目录
- 版权信息
- 作者简介
- 内容简介
- 序言(一)
- 序言(二)
- 前言
- 第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的人吗?
本书有入门引导,但更侧重于深度解析。完全零基础的读者可能会感到前几章的概念有一定门槛,建议先通过官方入门教程或网络文章对Wasm有一个最基础的感性认识,再阅读本书会事半功倍。
书中的代码和案例现在(2023年后)是否过时?
WebAssembly核心标准(如MVP)非常稳定,本书对其二进制格式,指令集,执行模型的讲解不会过时。书中涉及的Emscripten等工具链和WASI标准虽在持续演进,但本书对其设计思想和基本用法的阐述仍是宝贵的学习基础,读者可据此轻松过渡到最新的官方文档。
这本书与同类英文原版书相比如何?
本书是中文领域内最早系统讲解WebAssembly的专著之一,其深度和广度不亚于甚至超过部分英文入门书。作者结合了自身实践,对原理的剖析和中文语境下的表述,对国内开发者更为友好,是系统学习Wasm的优选中文资料。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。
作者简介
于航
作者
于航是一位作品横跨编程设计、管理、工业技术与励志成长等多个领域的中文作者。公开资料有限,其国籍、生卒年、学历与职业背景均未见明确记载,目前库内收录其作品五种。其中《深入浅出WebAssembly》面向前端与底层技术读者,介绍WebAssembly的原理与应用,体现出作者在编程技术写作上的普及意识;《波士顿咨询工作法(全3册)》及《波士顿咨询工作法:精准运用直觉》聚焦咨询思维与职场方法;《情商高的人都这么说话》则属于沟通与个人成长类读物。另有《污水深海排放扩散器设计技术与案例研究》,显示其在工业技术领域亦有涉猎。总体而言,于航的写作兼顾技术讲解与实务方法,题材跨度较大,语言倾向通俗易懂、面向实际应用,适合希望快速入门的普通读者阅读。