您好,欢迎来到聚文网。 登录 免费注册
深入浅出WebAssembly

深入浅出WebAssembly

  • 字数: 741千字
  • 装帧: 平装
  • 出版社: 电子工业出版社
  • 作者: 于航
  • 出版日期: 2018-12-01
  • 商品条码: 9787121352171
  • 版次: 1
  • 开本: 16开
  • 页数: 532
  • 出版年份: 2018
定价:¥128 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
   WebAssembly是一种新的二进制格式,它可以方便地将C/C++等静态语言的代码快速地“运行”在浏览器中,这一特性为前端密集计算场景提供了无限可能。不仅如此,通过WebAssembly技术,我们还可以将基于Unity等游戏引擎开发的大型游戏快速地移植到Web端。WebAssembly技术现在已经被计划设计成W3C的标准,众多浏览器厂商已经提供了对其MVP版本标准的支持。在GoogleI/O2017大会上,Google抢先发售针对WebAssembly技术进行了公开演讲和推广,其Post-MVP版本标准更是对诸如DOM操作、多线程和GC等特性提供了支持。WebAssembly所带来的Web技术变革势不可挡。本书力求从一些简单的实践入手,深入理论,到复杂的具有实际业务价值的综合实践,深入浅出地介绍Wasm技术发展至今,其背后所涉及的各种底层设计原理与实现、相关工具链以及未来发展方向等多方面内容。本书内容包括:WebAssembly技术的发展历程,从PNaCl到ASM.js再到WebAssembly,以及这些技术的基本应用方法与性能对比;WebAssembly的标准上层API、底层堆栈机的设计原理,以及对MVP标准理论的深入解读;与WebAssembly标准相关的进阶内容,如单指令多数据流(SIMD)、动态链接(DL)等;LLVM工具链与WAT可读文本格式的相关内容;基于Emscripten工具链开发WebAssembly应用的基本流程,以及工具链的一些基本常用功能和特性;基于Emscripten工具链实现C/C++语言动态关系绑定技术;Emscripten工具链所提供的一些如WebGL支持、虚拟文件系统、应用优化以及HTML5事件系统等不错应用特性;构建一个具有实际业务价值的WebAssembly应用,现阶段Wasm生态的发展情况,以及在Post-MVP标准中制订的一些WebAssembly未来发展规划。本书的目标读者为Web前端开发人员、C/C++开发人员和对WebAssembly技术感兴趣的人员。
作者简介
于航,现就职于阿里巴巴/饿了么事业部(BU),资深前端工程师,FreeCodeCamp(FCC) China上海社区负责人,QCon(2017)上海前端专场讲师。2016年开始研究WebAssembly技术,2017年加入WebAssembly中国社区,同年加入官方WCG(W3C Community Group),定期参与WCG组织的各种线上视频研讨会议,在跟进WebAssembly新发展的同时,也为 ebAssembly的标准化提出自己的建议和意见。生活中喜欢弹钢琴、演讲与分享。主要技术研究方向为Web前端与基础设施架构、WebAssembly、LLVM以及编译器等相关领域。
目录
   第1章漫谈WebAssembly发展史1

1.1JavaScript的发展和弊端1

1.1.1快速发展与基准测试1

1.1.2Web新时代与不断挑战8

1.1.3无法跨越的“阻碍”11

1.1.4ChromeV8引擎链路17

1.2曾经尝试——ASM.js与PNaCl28

1.2.1失落的ASM.js28

1.2.2古老的NaCl与PNaCl42

1.3新的可能——WebAssembly57

1.3.1改变与颠覆57

1.3.2一路向前,WCG与WWG85

第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.3Shunting-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动态链接(DynamicLinking)204

3.1.1ELF206

3.1.2符号重定向(SymbolRelocation)212

3.1.3GOT(GlobalOffsetTable,全局偏移表)225

3.1.4PLT(ProcedureLookupTable,过程查询表)229

3.1.5基于表的Wasm模块动态链接233

3.2单指令多数据流(SIMD)237

3.2.1SIMD应用239

3.2.2并行与并发243

3.2.3费林分类法244

3.2.4SIMD.js&TC39246

3.2.5WebAssembly上的SIMD扩展248

第4章深入LLVM与WAT250

4.1LLVM——底层虚拟机250

4.1.1传统的编译器架构251

4.1.2LLVM中间表示层252

4.1.3基于LLVM的编译器架构254

4.1.4LLVM优化策略256

4.1.5LLVM命令行工具261

4.1.6WebAssembly与LLVM268

4.2基于LLVM定义新的编程语言272

4.2.1图灵完备与DSL276

4.2.2简易词法分析器280

4.2.3RDP与OPP算法287

4.2.4AST(抽象语法树)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.3WAT315

4.3.1S-表达式316

4.3.2WAT/Wasm与Binary-AST318

4.3.3其他与设计原则320

第5章Emscripten基础应用321

5.1利器——Emscripten工具链321

5.1.1Emscripten发展历史321

5.1.2Emscripten组成结构323

5.1.3Emscripten下载、安装与配置325

5.1.4运行测试套件329

5.1.5编译到ASM.js330

5.2连接C/C++与WebAssembly332

5.2.1构建类型333

5.2.2Emscripten运行时环境341

5.2.3在JavaScript代码中调用C/C++函数350

5.2.4在C/C++代码中调用JavaScript函数362

第6章基于Emscripten的语言关系绑定381

6.1基于Embind实现关系绑定383

6.1.1简单类388

6.1.2数组与对象类型390

6.1.3高级类元素392

6.1.4重载函数406

6.1.5枚举类型407

6.1.6基本类型408

6.1.7容器类型410

6.1.8转译JavaScript代码412

6.1.9内存视图415

6.2基于WebIDL实现关系绑定416

6.2.1指针、引用和值类型419

6.2.2类成员变量421

6.2.3常量“const”关键字422

6.2.4命名空间423

6.2.5运算符重载424

6.2.6枚举类型425

6.2.7接口类428

6.2.8原始指针、空指针与void指针430

6.2.9默认类型转换433

第7章探索Emscripten高级特性436

7.1加入优化流程436

7.1.1使用编译器代码优化策略441

7.1.2使用GCC压缩代码443

7.1.3使用IndexedDB缓存模块对象445

7.1.4其他优化参数452

7.2使用标准库与文件系统453

7.2.1使用基于musl和libc++的标准库454

7.2.2虚拟文件系统结构457

7.2.3打包初始化文件459

7.2.4基本文件系统操作460

7.2.5懒加载469

7.2.6FetchAPI473

7.3处理浏览器事件478

7.3.1事件注册函数479

7.3.2事件回调函数480

7.3.3通用类型与返回值类型481

7.3.4常用事件483

7.4基于EGL、OpenGL、SDL和OpenAL的多媒体处理.486

7.4.1使用EGL与OpenGL处理图形487

7.4.2使用SDL处理图形493

7.4.3使用OpenAL处理音频496

7.5调试WebAssembly应用499

7.5.1编译器的调试信息499

7.5.2使用调试模式501

7.5.3手动跟踪502

7.5.4其他常用编译器调试选项504

第8章WebAssembly综合实践、发展与未来505

8.1DIP综合实践应用505

8.1.1应用描述505

8.1.2滤镜与卷积506

8.1.3基本组件类型与架构510

8.1.4编写基本页面骨架(HTML与CSS)511

8.1.5编写核心卷积函数(C++)512

8.1.6编写主渲染循环与“胶水”代码(JavaScript)514

8.1.7使用Emscripten编译并运行应用519

8.1.8性能对比520

8.2WebAssembly常用工具集521

8.2.1Cheerp521

8.2.2Webpack4523

8.2.3Go和Rust的WebAssembly实践525

8.2.4Binaryen528

8.2.5WasmFiddle529

8.2.6Wabt530

8.2.7AssemblyScript530

8.3WebAssembly未来草案530

8.3.1GC(垃圾回收)531

8.3.2Multi-Thread(多线程)与原子操作531

8.3.3异常处理531

8.3.4多返回值扩展531

8.3.5ES模块531

8.3.6尾递归532

8.3.7BigInts的双向支持532

8.3.8自定义注释语法532

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网