豆瓣读书:https://book.douban.com/subject/30368088/
这是今年双十一过后买的一本书,物流大概花了半个月的时间才到手。
WebAssembly是前几年人们才提到的一个名词,最近是越来越火了,
但很多人仍然也只是处于观望之中。
学习WebAssembly,需要一些不同于传统前端开发的前置知识,
因此,跑通官网的例子虽然简单,但是深入下去却十分困难。
去年,为了对WebAssembly的栈机实现有所了解,
我还啃了一段时间《虚拟机:系统与进程的通用平台》。
好了,言归正传,下面是读后感。
首先,我是被这本书的目录,以及内容的全面性所吸引的,
它写的足够深入足够专业,
给人一种,读完了就能立即成为WebAssembly技术大牛的心理预期。
果不其然,书的内容写的非常扎实,
背景和前置知识的铺垫也足够啰嗦,
我很喜欢这种作者能放下身段不厌其烦的教导小白的书。
本书对V8引擎,编译原理,计算机体系结构,虚拟机,汇编语言,LLVM,
都有系统性的介绍。
这一方面降低了阅读的门槛,
另一方面也让读者认识到之前读的“闲书”都没白费。
如果看过《编译器设计》《程序员的自我修养》或《LLVM Cookbook》,
了解过一些编译原理,汇编语言,
读起这本书来,定会觉得驾轻就熟。
本书大概用了近一半的章节把这些知识串联起来,
如果对WebAssembly没什么太大兴趣,
但是对编译器感兴趣,也可以读一下这些内容,并无大碍。
后面的内容,都在介绍Emscripten工具链。
Emscripten说白了,就是基于JavaScript和WebAssembly的底层交互原理,
通过编译的手段,补充出一堆更便于使用的“胶水代码”,从而降低应用层的使用成本。
其中,主要介绍了Embind和WebIDL两种方式,
将C/C++语言中的概念映射到了JavaScript中。
除此之外,作者还介绍了,使用标准库和文件系统的C/C++代码的应对策略,
以上这些章节读起来,给人一种豁然开朗的感觉,
浏览器中那些经常用不到的特性,原来也十分重要。
例如,IndexedDB,WebGL,TypedArray,SharedArrayBuffer,
当时读HTML5和ECMAScript规范的时候,
总是不理解浏览器为什么要加入这些东西。
读下来给人的感觉是,Emscripten生态非常繁荣,细节很多,
而拿WebAssembly本身与之相比,真是小巫见大巫了。
书读完之后,回过头来反思一下,
我认为作者在介绍基础概念的时候,真的是非常用心,
甚至还在书中手动实现了一门自制的编程语言——Cinderella。
另外一个令人拍案惊奇章节是,P188页 2.5.3,
作者对WebAsssembly二进制模块中的内容进行了分析,
魔术代码,版本号,各种段结构,等等,现在想起来还是印象颇深。
更有甚者,作者后面还介绍了动态链接原理,以及构建共享库的方式,
几处反汇编处理,让我感受到作者的技术栈确实非常之稳健,
我们对力量真是一无所知。。
总之,这本书非常值得推荐,
如果非要指出美中不足之处,那可能就是末尾没有后记和参考文献了吧,
P532页戛然而止的感觉,让人很不痛快。
期待下册出版。