采访嘉宾 | 于航
编辑 | 闫园园
2021 年 6 月 21 日,Scott Logic 发布了 2021 年 WebAssembly (以下简称 Wasm)用户报告。报告中显示 69% 的受访者认为 Wasm 将对未来的 Web 开发产生非常大的影响,同时受访者还预计 Wasm 将会对不同应用领域产生重要影响。
不难看出,作为一项相对年轻的技术,Wasm 本身还是吸引了不少眼球。但另一方面,也有开发者注意到,虽然 Wasm 目前在多个领域都有相应的落地实践,但距离大规模应用还是有一定差距。甚至,还有部分开发者提出 “ Wasm 的声音在这两年渐渐弱了”,那么究竟这门技术的现状如何?今年 Wasm 2.0 草案的发布是否会对其发展有所推动?展望未来 Wasm 的前景又是怎样?带着这些问题,InfoQ 采访了 PayPal Staff Engineer 、《 深入浅出 WebAssembly 》的作者于航。
在开始探讨 Wasm 现状之前,我们先来回顾下它的历史。
众所周知,当年 Brendan Eich 大神只用了 10 天时间便发明出了 JavaScript ,随后这门语言便一路蹿红,并且一直到现在 JavaScript 仍是互联网技术领域里最流行的编程语言之一。不过,即便如此,这门语言还是存在其自身的短板,其中,变量的动态类型就经常被大家诟病,虽然这也是它简单易用的原因之一,但相较于静态类型语言而言,这一点确实会带来额外的运行时性能开销。
因此,为了提升 Web 应用的性能,Wasm 应运而生,2015 年 Mozilla 在 asm.js 的基础上发布了 Wasm。不过,Wasm 的出现绝不是要成为一门新的编程语言,正如其官方定义提到,WebAssembly(缩写为 Wasm)是一种基于堆栈式虚拟机的二进制指令集。Wasm 被设计成为一种编程语言的可移植编译目标,并且可以通过将其部署在各类环境中(浏览器、k8s 等),以便为客户端及服务端应用程序提供服务。
以上就是 Wasm 的诞生以及它的定义,“当下 Wasm 仍然处在快速发展的过程当中,截至其目前发展历史来看,其中有两个年份是比较关键的”,于航总结道:
第一个关键年份是 2017 年。2017 年 2 月,四大浏览器(Firefox、Chrome、Edge 和 Webkit)在 Wasm MVP(最小可用版本) 标准的设计上达成共识,“这是一个很好的现象,说明大家对 Wasm 这项技术的潜在价值是认可的”;2017 年 8 月,WebAssembly Working Group(以下简称 WWG) 成立,Wasm 正式成为 W3C 众多技术标准中的一员;2017 年末,Mozilla 宣布四大浏览器(引擎)完全支持 Wasm MVP 版本的特性。可以看到,2017 年 Wasm 发展很快,“这时候,大家看到了一种趋势,就是 Wasm 可能会对目前的 Web 技术格局产生影响”。
第二个关键年份是 2019 年。2019 年 3 月,Docker 创始人 Solomon Hykes 在 Twitter 上说了一段话,大概意思为“如果 WASM 和 WASI 早在 2008 年就存在,那么我们就不需要创建 Docker”。此话一出,在社区产生了非常大的反响,“这一次,Wasm 的潜在价值从 Web 逐渐开始向 out-of-web 的其他领域,比如云原生、AI 以及区块链等领域开始传播”;2019 年 12 月,W3C 宣布 Wasm 成为第 4 种 Web 语言,同时 Wasm 1.0 标准正式落地;也是在这一年,由个人和公司组成的团体——字节码联盟(Bytecode Alliance)也宣告成立,联盟旨在通过协作的方式,来共同实现 Wasm 及 WASI 相关标准,并通过提出新标准的方式来共同打造 Wasm 在浏览器之外的未来。“我们常见的一些 Wasm 虚拟机,比如 Wasmtime、Lucet 等也都是由他们负责设计和研发的。”
总结来看,在这两个关键年份集中发生了一些意义重大的事情,对这门技术的发展起到了重要的推动作用。
到了 2020 年和 2021 年,Wasm 本身标准方面并没有出现比较大的动作,或许也是由于此,导致部分开发者认为“ Wasm 渐渐没了声音”。不过,据于航介绍,其实在 2020 年和 2021 年 ,Wasm 本身也是在不断完善和发展中的:
在 Wasm 1.0 标准基础上,各类围绕 Wasm 的基础工具不断涌现,浏览器和基础设施加快了 Wasm 标准的实现速度。“这里有个改变值得关注,开发者的聚焦点开始逐渐从标准本身移向了 Wasm 在工业界的实践和应用。”
另外,WWG 也在不断推进 Wasm 2.0 相关特性的设计和落地,在此过程中,官方研究人员开始更多地去思考这门技术和开发者之间的关系。例如,对于开发者来说,Wasm 最初的官方文档比较晦涩难读,意识到这个问题之后,WWG 进行了相关调整和优化。“可以看出,Wasm 官方也逐步开始从关注技术本身转而去关注它的推广和应用。”
最后到了今年,Wasm 2.0 草案正式发布,包括很多处于 Phase 3 的提案也正在被实现。总体而言,最近这几年并没有像前几年一样,有看似特别重要的节点,但就一门新技术来说,它自身的发展仍然是在持续有序地进行的。“各类浏览器厂商也正以超预期的速度去整合那些试验性的 Wasm 特性,从中大家也可以看到它们在这门技术上的赌注”。
回顾这门技术的整体发展脉络,与 Java、C++ 等历经几十年磨砺的技术相比,Wasm 还是比较年轻的,不过,这门技术本身受关注度颇高,也从侧面反映出它还是具有潜力的。目前,也已在多个领域有相应的落地,本次采访中,于航按照类别为大家进行了盘点:
除了在浏览器内部的应用之外,Wasm 在浏览器之外的应用场景也很多:
不仅在上述“热点”领域,Wasm 还在物联网、操作系统、AI、密码学等领域均有相应的落地实践,同时作为技术设施的编译器和虚拟机应用也比较常见。不过于航也表示,这些领域的实践更多是一种“有限”实践,换句话说,本质上还没有为该领域做出突出贡献。
所以,目前来看 Wasm 应用试水的领域还是很广泛的,但距离大规模的应用还有一定的距离,那么是否是这门技术本身存在一定的局限性呢?对此,于航认为眼下的应用现状与技术本身其实并无直接关系,具体原因还需要从不同角度来分析:
一方面,还是在于大部分互联网公司对于新技术的采用是非常谨慎的,并且通常情况下,不会轻易改变自己原有的技术栈。个中缘由不难理解,老的技术栈由于发展时间较长,遇到问题可以相对轻松地找到对应解决方案,“即使在技术性能上稍微有些损耗,但这些损耗往往可以通过简单地横向扩展就得以解决,简单来讲就是用钱就可以解决。”
同时,对于互联网公司来说,采用新技术则需要考虑多方面因素:第一,团队现有人员的技术栈是否可以以较低成本使用这个新技术;第二,新技术的采用对现有组织架构的影响;第三,采用新技术带来的价值是否能够抵消它带来的潜在风险等等。
在这种背景下,对大多数公司来说,现阶段对 Wasm 还是持有一个相对谨慎的态度,更多的先尝试将其用在相对较小、较初期的业务中。
今年 4 月, Wasm 2.0 草案正式发布,虽然作为一个草案,它不一定会得到 W3C 及其成员的认可,甚至随时可能被其他文件更新、替换或弃用,但技术本身自带的热度还是使得这份草案关注度颇高。相比 Wasm 1.0,Wasm 2.0 草案中加入了很多值得关注的新特性,比如引用类型(Reference Types)、固定宽度的 SIMD(Fixed-width SIMD)、批量内存操作(Bulk Memory Operations) 等等。这里,于航也为大家详细解读了 2.0 草案:
同时,本次草案中,大家还会关注到仍有一些在讨论中的提案,包括:分支提示(Branch Hinting)、尾部调用优化(Tail Call)、异常处理(Exception Handling)、线程功能(Threads)、宽松 SIMD(Relaxed SIMD)等等。于航提到,他对这些新提案还是相当期待的,因为这些特性可以继续优化 WebAssembly 在各个场景中的使用体验。展开来说:
“本次草案的发布,更多的是为下一步 GC 等复杂提案的实现打下坚实基础,”于航谈到,他认为就现阶段来看,2.0 草案的发布不会改变语言的写法,甚至对于对于上层用户来说,可能不会有太大感知,但是这次草案的最大意义正是为后续 Wasm 体验的改进做了很多铺垫,“大部分人可能会觉得这几个提案无关痛痒,但本质上它们是后续几个大提案实现的重要前提”。
回到开头,在 2021 年 Wasm 用户报告中,不少开发者曾预计 Wasm 将会对 Web 开发以及不同应用领域产生重大影响。那么经过上述分析到底 Wasm 的前景如何呢?本次采访的最后,于航谈到判断 Wasm 的前景的话还需要大家持续关注以下两个方面:
第一,官方提案的进度。对于开发者来说,可以每周或者每个月去跟进 GitHub 上相关提案的推进进度,如果这些提案在不断推进,意味着对于这门技术是个很好的迹象,“至少能够说明 Working Group 作为一个核心的官方团队,是重视这个事情的。”
第二,基础设施厂商的实现进度。毕竟对于 Wasm 厂商和基础设施厂商来说,如果它们愿意花更多精力来实现 Working group 新的提案,前提一定是看好这门技术的,也能从侧面说明 Wasm 的发展前景。
“大家可能会担心,觉得现阶段看不到 Wasm 的更多落地,但我觉得落地还是要关注加入 WWG 的大公司的实践情况。”于航谈到,不过,也可以预见的是,随着这门技术标准和相关生态的逐渐完善,参与制定的互联网领头公司,比如 Google 等势必会率先在自己的业务场景中采用 Wasm 这门技术,届时,在这些巨头的影响下,没有直接参与标准制定的公司或者规模较小的公司也会逐渐将 Wasm 进行落地实践。
于航
PayPal Staff Engineer
曾先后在 Tapatalk、饿了么等国内外企业工作。目前在 PayPal 负责 “Compliance Insights” 相关的技术研发和管理工作。曾多次作为 QCon、GMTC、TLC 等技术大会的优秀讲师、优秀出品人。2018 年底出版名为《深入浅出 WebAssembly》的国内第一本 Wasm 技术书籍,随后陆续推出了《深入 C 语言与程序运行原理》等多个在线技术专栏。个人擅长的主要技术领域为:Web 前端基础架构、Wasm、C/C++ 系统软件设计与开发、X86-64 汇编等。同时也擅长演讲、跨团队协作及中小型技术团队管理。
领取专属 10元无门槛券
私享最新 技术干货