【CSDN 编者按】所谓温故而知新,适当的梳理回溯历史发展,有利于对未来做出更加准确的判断和更加可靠的计划。本文,让我们一起来回顾 Wasm 2020 年的发展……

作者 | 夏歌   责编 | 张红月

出品 | CSDN(ID:CSDNnews)

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 虚拟机上运行。

  • Swift

  • Kotlin

  • Java

  • COBOL

  • .NET

  • Go

借助工具链 LLVM ,我们可以把多种语言写的库编译成 WebAssembly,进而在浏览器中运行:

  • TensorFlow.js:TensorFlow 官方团队实现了在 WebAssembly 中使用 SIMD 和多线程来增强 TensorFlow.js

  • FFMPEG:这是一个著名的处理音视频的库。在开发者 Jerome Wu 的努力下,将用 C 写的 FFmpeg 导出了 WebAssembly 格式,从而使 FFMPEG 可以在浏览器中运行。

上面只是列举了两个著名的库。在2020年,我们经常看到经典游戏借助 WebAssembly 可以直接在浏览器中运行。

借助这些高性能的 C 语言的库,我们看到一些公司的 Web 应用在浏览器中使用 wasm,主要集中在音视频领域

  • Zoom

  • Google Meet

  • Bilibili

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 似乎已经成为必须要做的事情。

  • Deno 支持 WASI

  • V8/Node.js 支持 WASI

  • 用于网络连接的 wasi-socket 已经有了原型

  • 用于机器学习的 wasi-nn 正在开发中

  • 字节码联盟之外的 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万亿参数语言模型 | 极客头条
☞新的一年,这7个“菜鸟坑”千万别再踩了!

破圈!不止于浏览器,WebAssembly 2020 大事记相关推荐

  1. 工匠精神消失的手机2020:衰落、变局、绝唱、破圈

    文/智能相对论(aixdlun) 作者/郭锴 2015年,华为终端总裁余承东曾预言,未来四到五年,国内的智能手机品牌将只会剩余三家.彼时还处于群雄逐鹿时代,这个结论在当时看起来颇有些武断.但今天,20 ...

  2. 洽洽食品2020年半年报:坚守与破圈,老瓜子能否发新芽?

    如果没有说错的话,提到洽洽,你会想到瓜子. 确实,在洽洽的总营收里,瓜子占据了七成. 当年那个辞去体制内工作,下海创业的安徽青年陈先保赶上了国产零食兴起的时代,也由于专注炒瓜子,在品牌和渠道上都发展出 ...

  3. B站回港受热捧——破圈下的资本新故事

    文/螳螂财经 作者/XL 1.B站回港,打新认购超40倍 过去一年,哔哩哔哩主攻两件事,而且目前看,都还完成得不错--用户增长和商业变现. "螳螂财经"翻了一下2020年Q4财报, ...

  4. 工业物联网再起云涌,大咖共叙破圈之道

    在工业 4.0 和数字经济高速发展的促进下,工业物联网作为连接工业经济的重要要素,成为推动实体经济数字化转型的重要载体和基础设施.据 Gartner 最新发布<2020全球工业互联网平台魔力象限 ...

  5. 我所知道的中国NLP「破圈」十年

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在,我们已经习惯了全球各类顶级学术会议上的中国力量. 从论文入选,到参会面孔,抑或赞助企业,中国代表几乎无处不在. 前不久刚落幕的ACL ...

  6. 解读B站Q4财报:Q4营收同比增74%,B站破圈能继续俘获大众芳心?

    北京时间3月18日,哔哩哔哩(下称B站)对外发布2019年Q4季度及全年的业绩报告.根据财报来看,B站在营收上同比增长74%,净亏损额度同比进一步扩大:财报发布后,B站盘后股价一度下跌超3%. 进入2 ...

  7. VR联机体验破圈难?VRChat进军移动端分析

    4年前,VR社交应用Rec Room为了扩大用户群体,宣布进军iOS移动生态,随后又陆续登陆了PlayStation.Xbox.安卓等主流的非VR硬件平台.而近期,另一款经典VR社交应用VRChat也 ...

  8. 步爱奇艺与腾讯视频的后尘,B站扬帆出海能否跨海破圈?

    2020年,"出海潮"成为不少互联网企业的动作之一,哔哩哔哩的出海计划也已经提上了日程. 12月28日消息,B站已经登陆东南亚市场.视频平台"出海",在哔哩哔哩 ...

  9. 百度景鲲:疫情居家让智能音箱经受了检验,下一步「破圈」

    鱼羊 发自 中关村软件园 量子位 报道 | 公众号 QbitAI 「智能语音助手,已经站到了下一次爆发式增长的前期.」 站在当前的时间节点,对于智能音箱这个赛道,百度集团副总裁.智能生活事业群组总经理 ...

最新文章

  1. 【ASP.NET Web API教程】2.3.3 创建Admin控制器
  2. PAT甲级1036 Boys vs Girls:[C++题解] 字符串处理
  3. 1.15 Java 9新增的不可变集合
  4. 服务器2003蓝屏A5修复,求助windows 2003 蓝屏分析
  5. ACMMM2021|在多模态训练中融入“知识+图谱”:方法及电商应用实践
  6. Linux下压缩、解压缩、效率,linux tar bz、bz2、gz、zip
  7. C++实现的大整数分解Pollard's rho算法程序
  8. python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程
  9. 七个习惯之一:积极主动
  10. Coreldraw x6离线激活注册机免费下载安装教程
  11. 用两种while循环求2的n次方,n是传入的值。
  12. C语言---14文件操作---01文件内容的顺序读写
  13. [3DsMAX]建模软件的分享
  14. AntDesign 分页 警告 [`dataSource` length is less than `pagination.total` but......] 解决方法
  15. 手眼标定eye-in-hand(一)AX=XB方程推导
  16. 数据库课设--基于Python+MySQL的餐厅点餐系统
  17. 使用Jt2Go控件显示3D模型 / View 3D Model with JT2GO
  18. 传感器实验——寻迹模块
  19. mmorpg游戏第2次内测问题总结
  20. I3C协议Single Data Rate(SDR)模式研读(五):热加入机制、带内中断以及第二主机功能(hot-join、In-Band Interrupt、Secondary Master)

热门文章

  1. 【LINQ】Linq to SQL -- Where语句
  2. Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
  3. redis与memcached区别
  4. 20155320 2016-2017-2 《Java程序设计》第五周学习总结
  5. 2014 ACM/ICPC Asia Regional Beijing Site
  6. Android学习二:Http操作
  7. SAP屏幕设计器专题:表格控件属性的设定(七)
  8. VBS操作XML文档,拷贝结点 (转)
  9. 趣味物理中的计算机科学,【趣味物理】10个有趣的科学实验,揭示物理原理。...
  10. 【前端】【cornerstone】【未完善】cornerstone重新加载图像大小问题——拒绝花里胡哨