具体描述
WebAssembly是一种新兴的网页虚拟机标准,它的设计目标包括高可移植性、高安全性、高效率(包括载入效率和运行效率)、尽可能小的程序体积。本书详尽介绍了WebAssembly程序在JavaScript环境下的使用方法、WebAssembly汇编语言和二进制格式,给出了大量简单易懂的示例,同时以C/C++和Go语言开发环境为例,介绍了如何使用其他高级语言开发WebAssembly模块。
本书适合从事高性能Web前端开发、跨语言Web应用开发的技术人员学习参考,也可以作为WebAssembly标准参考手册随时查阅。
作者简介
柴树杉,青云QingCloud高级软件工程师,Go语言和WebAssembly技术专家,著有《Go语言高级编程》等书。GitHub 账号为chai2010。
丁尔男,Go语言爱好者,WebAssembly技术专家, 常年从事三维渲染引擎开发, 著有《C/C++面向WebAssembly编程》等书,现任武汉航天远景科技股份有限公司应用技术总监。GitHub 账号为3dgen。
目录信息
0.1 JavaScript简史 1
0.2 asm.js的尝试 2
0.3 WebAssembly的救赎 5
第 1章 JavaScript语言基础 7
1.1 console对象 7
1.2 函数和闭包 9
1.3 Promise对象 12
1.4 二进制数组 13
第 2章 WebAssembly快速入门 17
2.1 准备工作 17
2.2 首个例程 21
2.3 WebAssembly概览 22
2.4 你好,WebAssembly 25
2.5 WebAssembly调试及代码编辑环境 28
第3章 JavaScript中的WebAssembly对象 31
3.1 WebAssembly对象简介 31
3.2 全局方法 32
3.3 WebAssembly.Module对象 36
3.4 WebAssembly.Instance对象 41
3.5 WebAssembly.Memory对象 44
3.6 WebAssembly.Table对象 50
3.7 小结及错误类型 61
第4章 WebAssembly汇编语言 65
4.1 S-表达式 65
4.2 数据类型 66
4.3 函数定义 67
4.4 变量 69
4.5 栈式虚拟机 72
4.6 函数调用 75
4.7 内存读写 79
4.8 控制流 83
4.9 导入和导出 91
4.10 start()函数及指令折叠 96
第5章 WebAssembly二进制格式 99
5.1 LEB128编码 99
5.2 头部和段数据 101
5.3 内存段和数据段 104
5.4 表格段和元素段 106
5.5 开始段和函数索引 108
5.6 全局段 111
5.7 函数段、代码段和类型段 113
5.8 导入段和导出段 118
5.9 自定义段 121
5.10 补充说明 126
第6章 Emscripten和WebAssembly 127
6.1 安装环境 127
6.2 你好,Emscripten! 129
6.3 C/C++内联JavaScript代码 133
6.4 C/C++调用JavaScript函数 139
6.5 JavaScript调用C导出函数 149
6.6 运行时和消息循环 155
6.7 补充说明 162
第7章 Go语言和WebAssembly 163
7.1 你好,Go语言 163
7.2 浏览器中的Go语言 166
7.3 使用JavaScript函数 168
7.4 回调Go函数 170
7.5 syscall/js包 172
7.6 WebAssembly模块的导入函数 175
7.7 WebAssembly虚拟机 178
7.8 补充说明 180
附录 指令参考 181
· · · · · · (收起)
读后感
先说说好的方面: 为国内 Wasm 技术的推广添砖加瓦,这个确实是我们想要去看到的。 再来说说问题吧: 1、首先要强调的是 WebAssembly 不是一种新的语言,但书中多次提到其是一种新的类汇编语言,这个就显的不太严谨了。就算从 WAT 的角度来看,也只能算作一种新型 VM 的 ByteCo...
先说说好的方面: 为国内 Wasm 技术的推广添砖加瓦,这个确实是我们想要去看到的。 再来说说问题吧: 1、首先要强调的是 WebAssembly 不是一种新的语言,但书中多次提到其是一种新的类汇编语言,这个就显的不太严谨了。就算从 WAT 的角度来看,也只能算作一种新型 VM 的 ByteCo...
先说说好的方面: 为国内 Wasm 技术的推广添砖加瓦,这个确实是我们想要去看到的。 再来说说问题吧: 1、首先要强调的是 WebAssembly 不是一种新的语言,但书中多次提到其是一种新的类汇编语言,这个就显的不太严谨了。就算从 WAT 的角度来看,也只能算作一种新型 VM 的 ByteCo...
先说说好的方面: 为国内 Wasm 技术的推广添砖加瓦,这个确实是我们想要去看到的。 再来说说问题吧: 1、首先要强调的是 WebAssembly 不是一种新的语言,但书中多次提到其是一种新的类汇编语言,这个就显的不太严谨了。就算从 WAT 的角度来看,也只能算作一种新型 VM 的 ByteCo...
先说说好的方面: 为国内 Wasm 技术的推广添砖加瓦,这个确实是我们想要去看到的。 再来说说问题吧: 1、首先要强调的是 WebAssembly 不是一种新的语言,但书中多次提到其是一种新的类汇编语言,这个就显的不太严谨了。就算从 WAT 的角度来看,也只能算作一种新型 VM 的 ByteCo...
用户评价
这本关于WebAssembly的入门书,内容安排得相当扎实,从基础的概念讲起,逐步深入到具体的应用场景。作者在解释那些看似晦涩的技术细节时,总能用非常生活化的比喻来辅助理解,这一点让我这个对底层技术不太敏感的读者感到非常受用。比如,在讲解内存模型时,它不是简单地罗列一堆术语,而是通过模拟一个小型工厂的仓库管理流程来阐述,清晰地展示了线性内存是如何工作的,以及它与JavaScript的交互机制。另外,书中对工具链的介绍也极其详尽,从Emscripten的配置到Wasmtime的运行环境搭建,每一步骤都有清晰的截图和代码示例,使得读者可以无障碍地跟着操作。对于想要真正动手实践的读者来说,这些实操指南的价值是无可替代的。我特别欣赏它没有停留在理论层面,而是花了大量篇幅讲解了Wasm在Web端和非Web端(比如服务端或边缘计算)的应用案例,这让我对Wasm的未来潜力有了更直观的认识。总的来说,这本书为初学者提供了一个非常平稳且富有成效的学习曲线,是踏入Wasm世界的一把好钥匙。
当我翻开这本书时,我原本预期会看到一本充斥着大量晦涩的二进制格式定义的枯燥手册。然而,作者成功地将这门技术包装成了一场引人入胜的探索之旅。书中对于Wasm在特定应用场景下的“反直觉”行为的讨论,尤其令人耳目一新。比如,它详细分析了为什么在某些特定负载下,Wasm模块的启动时间可能比预期的要长,并提供了针对性的优化技巧,这些都是官方文档中难以轻易找到的“陷阱”和“窍门”。作者的行文充满了对社区现状的洞察力,对未来提案(如GC、SIMD等)的展望也给出了审慎而专业的评估,使这本书的知识具有了相当长的保质期。我特别喜欢它在章节末尾设置的“思考题”,这些问题引导读者跳出代码层面,去思考技术选型的更宏观的决策,这对于培养一个合格的架构师至关重要。这本书的价值远超一本技术规范的解读。
这本书的叙事风格非常独特,它更像是一位经验丰富的老工程师在手把手指导一个新入行的学徒。它的语言简洁有力,几乎没有多余的废话,每一个段落都承载着实质性的技术信息。我非常欣赏作者在处理复杂概念时的克制和精确性,它很少使用过于花哨的描述,而是直接切入问题的核心。例如,在讲解Wasm的引用类型(Reference Types)时,它没有回避其复杂性,而是通过对比传统垃圾回收机制,清晰地界定了新模型的必要性和优势。此外,本书对异步操作和多线程的讨论也相当到位,特别是关于共享内存模型的处理,它不仅解释了如何使用,还警示了潜在的数据竞争风险,并提供了规避的最佳实践。这种“授人以渔”的教学方式,极大地增强了我独立解决问题的能力。读完后,我感觉不再是简单地学会了几个API,而是真正理解了Wasm的设计意图和限制边界。
我必须承认,这本书的深度和广度超出了我作为“入门”读物的预期。它不仅仅是简单地介绍Wasm的指令集或者模块格式,而是深入挖掘了它在性能优化方面的哲学。作者对AOT编译和JIT编译的权衡分析得非常透彻,并且用图表清晰地展示了不同场景下Wasm相对于JavaScript的性能提升点在哪里。我尤其喜欢其中关于安全沙箱模型的章节,它用一种近乎“侦探小说”的笔法,层层剥开了Wasm如何保证宿主环境的安全,这让抽象的安全概念变得可视化和易于接受。读到这里,我感觉自己像是在进行一场技术考古,探究WebAssembly背后的设计智慧。书中对C/C++代码如何被编译和优化,以及如何与Rust等现代语言协同工作的讨论,也体现了作者对整个生态系统的全面掌控。对于希望从Web开发者转型到系统级开发或高性能计算领域的同行而言,这本书无疑是一本极佳的桥梁读物,它提供的视角是多维且深刻的。
这本书的排版和内容组织体现了一种极高的专业水准。图表的清晰度和代码示例的健壮性是其突出的优点。我留意到,书中对于不同编译目标(如Targeting JavaScript环境与Targeting Wasm Runtimes)的差异性描述得非常细致,这对于需要构建跨平台解决方案的开发者来说是福音。作者在介绍工具链时,对各种版本的兼容性问题也给出了明确的警告和解决方案,避免了读者在实践中因版本差异而浪费时间。更值得称赞的是,它对模块间的交互机制,特别是Host Function的调用细节,进行了深入的剖析,展示了如何安全有效地实现“胶水代码”。这种对细节的偏执,使得本书成为一本可以在案头随时翻阅的参考工具书,而不是读完就束之高阁的速朽读物。它的深度确保了即使是资深程序员也能从中汲取新的养分,而其清晰的结构保证了新手不会迷失在技术的汪洋大海中。
先了解WebAssembly标准,再学习相关的应用技术。谢谢关注🙏 配套视频地址:https://study.163.com/course/introduction/1209346823.htm
相关标准介绍,适合作为简单的工具书来查阅,不太适合作为WebAssembly入门书
随便看了看,算是对标准的一个介绍吧
WebAssembly终于开火了啊。开源图书《C/C++面向WebAssembly编程》 欢迎围观:https://github.com/3dgen/cppwasm-book
作为入门还是不错的,算是对官方标准的导读与扩展。WA 还是变化太快了,相比于书中的实践部分,我更关心作者怎么看待其中的设计与选择。 建议和官方 spec 交叉阅读 https://webassembly.github.io/spec/core/index.html