展开全部

主编推荐语

WebAssembly布道者撰写,详解使用C/C++/Rust开发WebAssembly应用的技术和方法。

内容简介

内容简介这是一部讲解如何用不错编程语言开发WebAssembly应用的著作,由国内WebAssembly领域的先驱者和布道者撰写。

全书一共10章,分为三个部分:
第一部分基础篇(1~3章)首先介绍了WebAssembly的基础和工具链Emscripten的用法,然后详细讲解了使用C/C语言和Emscripten开发WebAssembly模块的方法。
第二部分方法篇(第4~8章),对Emscripten运行时、WebAssembly友好的一般性方法、网络I/O、并发执行、GUI及交互等知识点展开了深入的讨论。
第三部分前沿篇(第9~10章),详细讲解了WASI以及如何使用Rust语言开发WebAssembly模块和WASI应用。

目录

  • 版权信息
  • 前言
  • 第一篇 基础篇
  • 第1章 认识WebAssembly
  • 1.1 WebAssembly的诞生背景
  • 1.2 Web的第4种语言
  • 1.3 本章小结
  • 第2章 Emscripten快速入门
  • 2.1 安装Emscripten
  • 2.1.1 使用emsdk命令行工具安装Emscripten
  • 2.1.2 在Docker环境中安装Emscripten
  • 2.1.3 校验安装
  • 2.2 你好,世界!
  • 2.2.1 生成.wasm文件
  • 2.2.2 运行
  • 2.2.3 使用Emscripten生成测试页面
  • 2.3 胶水代码初探
  • 2.3.1 WebAssembly汇编模块载入
  • 2.3.2 导出函数封装
  • 2.3.3 异步加载
  • 2.4 编译目标及编译流程
  • 2.4.1 编译目标的选择
  • 2.4.2 编译流程
  • 2.5 示例:放大镜特效
  • 2.5.1 模板程序
  • 2.5.2 静态的放大镜
  • 2.5.3 动态的放大镜
  • 2.6 本章小结
  • 第3章 C与JavaScript互操作
  • 3.1 JavaScript调用C函数
  • 3.1.1 定义函数导出宏
  • 3.1.2 在JavaScript中调用C导出函数
  • 3.2 JavaScript函数注入C环境
  • 3.2.1 C函数声明
  • 3.2.2 JavaScript实现C函数
  • 3.2.3 闭包限制及解决办法
  • 3.2.4 JavaScript函数注入C环境的优缺点
  • 3.3 单向透明的内存模型
  • 3.3.1 Module.buffer
  • 3.3.2 Module.HEAPX
  • 3.3.3 在JavaScript中访问C/C++环境内存
  • 3.4 JavaScript与C/C++交换数据
  • 3.4.1 参数及返回值
  • 3.4.2 通过内存交换数据
  • 3.4.3 在JavaScript中分配内存
  • 3.4.4 字符串
  • 3.5 EM_ASM系列宏
  • 3.5.1 EM_ASM
  • 3.5.2 EM_ASM_/EM_ASM_DOUBLE
  • 3.5.3 EM_ASM_INT_V/EM_ASM_DOUBLE_V
  • 3.6 emscripten_run_script()系列函数
  • 3.6.1 emscripten_run_script()
  • 3.6.2 emscripten_run_script_int()
  • 3.6.3 emscripten_run_script_string()
  • 3.7 ccall()/cwrap()
  • 3.7.1 ccall()
  • 3.7.2 cwrap()
  • 3.7.3 ccall()/cwrap()的潜在风险
  • 3.8 本章小结
  • 第二篇 方法篇
  • 第4章 Emscripten运行时
  • 4.1 main()函数与生命周期
  • 4.2 消息循环
  • 4.2.1 emscripten_set_main_loop()
  • 4.2.2 消息循环的暂停、继续及终止
  • 4.3 文件系统
  • 4.3.1 Emscripten虚拟文件系统架构
  • 4.3.2 基于MEMFS的打包文件系统
  • 4.3.3 NODEFS文件系统
  • 4.3.4 IDBFS
  • 4.4 内存管理
  • 4.4.1 内存容量/栈容量
  • 4.4.2 可变内存
  • 4.4.3 内存分配器
  • 4.5 Module定制
  • 4.6 示例:人脸检测
  • 4.6.1 facedetect_cnn()函数
  • 4.6.2 facedetect_cnn()函数再封装
  • 4.6.3 读取图像并检测人脸
  • 4.6.4 基于SDL显示IplImage图像
  • 4.7 本章小结
  • 第5章 WebAssembly友好的一般性方法
  • 5.1 消息循环分离
  • 5.1.1 emscripten_set_main_loop()的不足
  • 5.1.2 在JavaScript中创建定时循环
  • 5.2 内存对齐
  • 5.2.1 asm.js
  • 5.2.2 wasm
  • 5.2.3 避免及检测未对齐的内存操作
  • 5.3 使用C接口导出C++对象
  • 5.4 C++对象生命周期管理
  • 5.4.1 引用计数
  • 5.4.2 AddRef()/Release()使用规则
  • 5.4.3 导出AddRef()/Release()
  • 5.5 使用C接口注入JavaScript对象
  • 5.5.1 创建JavaScript对象/ID表
  • 5.5.2 注入JavaScript对象的生命周期管理
  • 5.6 小心64位整型数
  • 5.6.1 WebAssembly原生支持int64
  • 5.6.2 导出函数包含int64
  • 5.6.3 注入函数包含int64
  • 5.7 文件系统的缺陷
  • 5.8 本章小结
  • 第6章 网络I/O
  • 6.1 XMLHttpRequest
  • 6.1.1 XMLHttpRequest对象使用简介
  • 6.1.2 XMLHttpRequest对象的C接口封装
  • 6.1.3 扩展回调处理
  • 6.2 WebSocket
  • 6.2.1 创建WebSocket测试服务
  • 6.2.2 在JavaScript中使用WebSocket
  • 6.2.3 WebSocket对象的C接口封装
  • 6.3 本章小结
  • 第7章 并发执行
  • 7.1 JavaScript中的并发模型
  • 7.2 在Worker中使用Emscripten
  • 7.3 pthread线程
  • 7.3.1 原子操作
  • 7.3.2 pthread示例
  • 7.3.3 在浏览器环境运行pthread示例
  • 7.4 本章小结
  • 第8章 GUI及交互
  • 8.1 Canvas
  • 8.2 鼠标事件
  • 8.3 键盘事件
  • 8.4 Life游戏
  • 8.4.1 Life简介
  • 8.4.2 设计要求
  • 8.4.3 Life游戏C代码
  • 8.4.4 Life游戏网页代码
  • 8.4.5 运行Life
  • 8.5 本章小结
  • 第三篇 前沿篇
  • 第9章 Rust和WebAssembly
  • 9.1 Rust入门
  • 9.1.1 安装Rust开发环境
  • 9.1.2 你好,世界
  • 9.1.3 Cargo管理工程
  • 9.1.4 本地文档
  • 9.2 你好,WebAssembly
  • 9.2.1 安装WebAssembly开发环境
  • 9.2.2 打印“你好,WebAssembly”
  • 9.3 导入和导出函数
  • 9.3.1 导出main()函数
  • 9.3.2 导入宿主打印函数
  • 9.3.3 导出自定义函数
  • 9.4 打印命令行参数
  • 9.4.1 打印字符串
  • 9.4.2 准备导入env_print_str()函数
  • 9.4.3 向Rust传入字符串
  • 9.4.4 命令行参数封装
  • 9.4.5 传入命令行参数
  • 9.5 no_std
  • 9.5.1 输出文件的大小
  • 9.5.2 通过no_std裁剪标准
  • 9.5.3 库
  • 9.6 嵌入C代码
  • 9.6.1 C语言思维
  • 9.6.2 连接C语言库
  • 9.6.3 集成C语言源码
  • 9.6.4 build.rs自动构建
  • 9.7 本章小结
  • 第10章 WASI系统接口
  • 10.1 WASI简介
  • 10.2 探秘WASI工作原理
  • 10.2.1 准备工作
  • 10.2.2 探秘wasm32-wasi底层
  • 10.2.3 Rust和wasm32-unknown-unknown
  • 10.2.4 C/C++编译成WASI程序
  • 10.2.5 汇编程序
  • 10.3 WebAssembly虚拟机
  • 10.3.1 准备WebAssembly测试模块
  • 10.3.2 Node.js环境:基于wasi包
  • 10.3.3 Node.js环境:手工实现fd_write()函数
  • 10.3.4 Rust环境:导入wasi包
  • 10.3.5 Rust环境:手工实现fd_write()函数
  • 10.4 wapm包管理器
  • 10.4.1 安装wapm包管理器
  • 10.4.2 安装并运行cowsay小程序
  • 10.4.3 创建wapm模块
  • 10.5 本章小结
  • 附录
  • 附录A WebAssembly接口
  • A.1 WebAssembly对象
  • A.2 全局方法
  • A.2.1 WebAssembly.compile()
  • A.2.2 WebAssembly.instantiate()
  • A.2.3 WebAssembly.validate()
  • A.2.4 WebAssembly.compileStreaming()
  • A.2.5 WebAssembly.instantiateStreaming()
  • A.3 Module对象
  • A.3.1 WebAssembly.Module()
  • A.3.2 WebAssembly.Module.exports()
  • A.3.3 WebAssembly.Module.imports()
  • A.3.4 WebAssembly.Module.customSections()
  • A.4 Instance对象
  • A.4.1 WebAssembly.Instance()
  • A.4.2 Instance.prototype.exports
  • A.5 Memory对象
  • A.5.1 WebAssembly.Memory()
  • A.5.2 Memory.prototype.buffer
  • A.5.3 Memory.prototype.grow()
  • A.6 Table对象
  • A.6.1 WebAssembly.Table()
  • A.6.2 Table.prototype.get()
  • A.6.3 Table.prototype.length
  • A.6.4 Table.prototype.set()
  • A.6.5 Table.prototype.grow()
  • 附录B 机器指令
  • B.1 常数指令
  • B.2 算术运算指令
  • B.3 位运算指令
  • B.4 变量访问指令
  • B.5 内存访问指令
  • B.6 比较指令
  • B.7 类型转换指令
  • B.8 控制流指令
  • B.9 其他指令
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

机械工业出版社有限公司

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。