【CSDN 编者按】所谓温故而知新,适当的梳理回溯历史发展,有利于对未来做出更加准确的判断和更加可靠的计划。本文,让我们一起来回顾 Wasm 2020 年的发展……
WebAssembly(WASM)最初由 W3C 的Mozilla、谷歌、微软、苹果等公司合作研发,是浏览器内应用程序的高性能执行引擎。目前已经在主流浏览器中如 Chrome、Firefox、Edge、Safari 中得到了广泛的支持。
但是随着 WASM 在开发者社区中越来越流行,WASM 也正在成为服务端以及云计算平台上的新锐。2019 年 12 月,Bytecode Alliance 字节码联盟宣布正式成立。这个联盟成立的主要目标就是通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。服务端的 WebAssembly 正式被人所熟知。回到 2020 年,WebAssembly 的 2020 年是以年初在 Google 总部举办的 WebAssembly summit 开始的,这是 WASM 社区第一次大型线下会议。对 WebAssembly 感兴趣的开发者从世界各地出发,汇聚 Mountain View。虽然这次会议只有一天,但是涵盖了众多议题包括 Wasm 在浏览器与服务端的发展。这也是疫情前最后的国际技术大会之一。要把 WebAssembly 用于服务端,我们必须将它与浏览器之外的计算环境进行适配。语言、库与工具链是关键。
语言、库与工具链
相比 2019 年, WebAssembly 在2020年支持的语言新增了这些!下面这些语言都可以被编译成 Wasm 字节码在浏览器或者 Wasm 虚拟机上运行。借助工具链 LLVM ,我们可以把多种语言写的库编译成 WebAssembly,进而在浏览器中运行:- TensorFlow.js:TensorFlow 官方团队实现了在 WebAssembly 中使用 SIMD 和多线程来增强 TensorFlow.js
- FFMPEG:这是一个著名的处理音视频的库。在开发者 Jerome Wu 的努力下,将用 C 写的 FFmpeg 导出了 WebAssembly 格式,从而使 FFMPEG 可以在浏览器中运行。
上面只是列举了两个著名的库。在2020年,我们经常看到经典游戏借助 WebAssembly 可以直接在浏览器中运行。借助这些高性能的 C 语言的库,我们看到一些公司的 Web 应用在浏览器中使用 wasm,主要集中在音视频领域
Mozilla 之变
时间来到 8 月份,Mozilla 宣布裁员 250 人,这其中比较受影响的团队之一就是 WebAssembly 团队,包括 Cranelift 与 WASI 的开发者。而 WASI 正是服务端 WebAssembly 的最重要规范。一时间,与这个世界一样,WebAssembly 的未来产生了很多不确定性。
Bytecode Alliance 字节码联盟
字节码联盟经过1年的发展,联盟成员没有任何变化,无新增,也无删减。但是在 WebAssembly 规范上有了不少的进展。其成员公司 Fastly 雇佣了 Mozilla 裁掉的 WebAssembly 团队,为整个生态的稳定发展做出了重要贡献。Bytecode Alliance 主要围绕 nanoprocess 进行创新:将 WebAssembly 从一种应用程序的“编译目标”,发展成为一种可以用来组织应用程序的“模块化生态系统”。首先便是 WASI ,这是针对 WebAssembly 平台的系统接口。在 2020 年,我们看到更多的 Wasm 实施支持了 WASI,支持 WASI 似乎已经成为必须要做的事情。- 用于网络连接的 wasi-socket 已经有了原型
- 字节码联盟之外的 SSVM 贡献了 wasi-tensorflow ,使 TensorFlow 可以在 WebAssembly 程序中以 native speed 运行。
其次是 Module Linking(模块连接),可以被视为是两个 Wasm 模块直接相互通信的一种方式。然后是 Interface Types,可以使 Wasm 与一系列丰富的值类型“沟通。为了实现这一系列目标,字节码联盟也将开发一系列 Wasm-tools。- wasmparser,这是一个 Wasm 文件解析器。它非常节省内存资源,因为不会进行任何额外的资源分配,并且可以通过“流加载”的方式进行解析;
- wasmprinter,这个工具可以将一个以 .wasm 结尾的 Wasm 二进制格式文件转换为对应的 .wat 文本格式,这对于调试和测试将会很有帮助;
- Wat & wast,这两个工具可以将以 .wat 和 .wast 结尾的 Wasm 文本格式代码转换为对应的二进制格式字节码,这对于运行测试用例非常有用(因为在文本格式下,维护测试用例将会更加方便);
- wasm-smith,这是一个测试用例生成器。可以生成“伪随机”的 Wasm 模块,并且保证这些 Wasm 模块是合法有效的,可以将其用于模糊测试。
电商平台 Shopify 基于 WebAssembly 搭建了一个函数服务,让使用 Shopify 搭建电商网站的商户可以根据自己的业务需求在 Shopify 平台上传自己的函数代码。Shopify 团队选择 WebAssembly 是因为 WebAssembly 是安全的,不会写入外部的恶意代码;同时也是高性能的,能够满足电商对运行速度的要求。同样的模式,在其他 SaaS 平台上也有尝试,比如图片处理服务商 Cloudinary、流数据处理商 YoMo。
超越字节码联盟
同时,不在 Bytecode Alliance 的 Wasm 虚拟机团队也在以自己的方式为社区做贡献。Wamser 在2020年底发布 1.0.0 版本,这是 Wasm 虚拟机中第一发布 1.0.0 版本的虚拟机。Wasmer 支持将多种语言编译成 wasm 字节码,并且能够在 Mac、Linux、Windows 上运行。Wasmer 同时也支持多种编译器,Cranelift、LLVM 以及编译成智能合约的 Singlepass。SSVM 对 WebAssembly 的贡献在于类 WASI 的扩展。WASI 规范为开发者提供了一种机制,可以有效、安全地扩展 WebAssembly 虚拟机。根据实际场景的需求,SSVM 做了 Tensorflow、存储、命令界面、以太坊、Substrate 等扩展。除了通用的云计算与边缘计算,WebAssembly 虚拟机在区块链领域有了显著的采用。目前市面上比较大的公链项目都采用 WebAssembly 虚拟机作为智能合约的执行引擎,如 Polkadot 的 wasmi 虚拟机、Cosmos 的 cosmos-wasm、EOS、Ethereum、Oasis Labs、Solana、Near、ParaState 等公链。
社区活动
2020年,除了第一届 Wasm Summit ,我们还看到了许多其他的 WebAssembly meetup,例如 WebAssembly Live。2021 年初,Linux Foundation 要举办 Cloud Native Wasm Day,这或许可以被视为服务端 WebAssembly 将也被更广泛的开发者社区认可的信号。与此同时,第二届 WebAssembly Summit 也已经确定了举办日期。2021 年,中国的 Wasm 大会也在筹备中。虽然 WebAssembly 的 2020 年充满波折,但 WebAssembly 的 2021 年依然充满希望。Bytecode Alliance: One year update:https://bytecodealliance.org/articles/1-year-update
WebAssembly Landscape:https://webassemblytoday.substack.com/p/webassembly-landscape
WebAssembly Summit 2020:https://medium.com/wasm/webassembly-summit-2020-881510ccb0c2
How Shopify Uses WebAssembly Outside of the Browser:https://shopify.engineering/shopify-webassembly
Wasmer 1.0:https://medium.com/wasmer/wasmer-1-0-3f86ca18c043
The SSVM 0.7 release brings WebAssembly to the public cloud:https://blog.secondstate.io/post/20210202-ssvm-release/
Cloudinary:https://cloudinary.com/documentation/custom_functions#webassembly_functions
YoMo:https://github.com/yomorun/yomo-flow-ssvm-example
☞X86 "将死"?RISC-V 正当立
☞程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条