豆瓣读书:https://book.douban.com/subject/30368088/

    深入浅出WebAssembly - 图1
    这是今年双十一过后买的一本书,物流大概花了半个月的时间才到手。
    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页戛然而止的感觉,让人很不痛快。

    期待下册出版。