破圈!不止于浏览器,WebAssembly 2020 大事记
【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 大事记相关推荐
- 工匠精神消失的手机2020:衰落、变局、绝唱、破圈
文/智能相对论(aixdlun) 作者/郭锴 2015年,华为终端总裁余承东曾预言,未来四到五年,国内的智能手机品牌将只会剩余三家.彼时还处于群雄逐鹿时代,这个结论在当时看起来颇有些武断.但今天,20 ...
- 洽洽食品2020年半年报:坚守与破圈,老瓜子能否发新芽?
如果没有说错的话,提到洽洽,你会想到瓜子. 确实,在洽洽的总营收里,瓜子占据了七成. 当年那个辞去体制内工作,下海创业的安徽青年陈先保赶上了国产零食兴起的时代,也由于专注炒瓜子,在品牌和渠道上都发展出 ...
- B站回港受热捧——破圈下的资本新故事
文/螳螂财经 作者/XL 1.B站回港,打新认购超40倍 过去一年,哔哩哔哩主攻两件事,而且目前看,都还完成得不错--用户增长和商业变现. "螳螂财经"翻了一下2020年Q4财报, ...
- 工业物联网再起云涌,大咖共叙破圈之道
在工业 4.0 和数字经济高速发展的促进下,工业物联网作为连接工业经济的重要要素,成为推动实体经济数字化转型的重要载体和基础设施.据 Gartner 最新发布<2020全球工业互联网平台魔力象限 ...
- 我所知道的中国NLP「破圈」十年
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在,我们已经习惯了全球各类顶级学术会议上的中国力量. 从论文入选,到参会面孔,抑或赞助企业,中国代表几乎无处不在. 前不久刚落幕的ACL ...
- 解读B站Q4财报:Q4营收同比增74%,B站破圈能继续俘获大众芳心?
北京时间3月18日,哔哩哔哩(下称B站)对外发布2019年Q4季度及全年的业绩报告.根据财报来看,B站在营收上同比增长74%,净亏损额度同比进一步扩大:财报发布后,B站盘后股价一度下跌超3%. 进入2 ...
- VR联机体验破圈难?VRChat进军移动端分析
4年前,VR社交应用Rec Room为了扩大用户群体,宣布进军iOS移动生态,随后又陆续登陆了PlayStation.Xbox.安卓等主流的非VR硬件平台.而近期,另一款经典VR社交应用VRChat也 ...
- 步爱奇艺与腾讯视频的后尘,B站扬帆出海能否跨海破圈?
2020年,"出海潮"成为不少互联网企业的动作之一,哔哩哔哩的出海计划也已经提上了日程. 12月28日消息,B站已经登陆东南亚市场.视频平台"出海",在哔哩哔哩 ...
- 百度景鲲:疫情居家让智能音箱经受了检验,下一步「破圈」
鱼羊 发自 中关村软件园 量子位 报道 | 公众号 QbitAI 「智能语音助手,已经站到了下一次爆发式增长的前期.」 站在当前的时间节点,对于智能音箱这个赛道,百度集团副总裁.智能生活事业群组总经理 ...
最新文章
- 【ASP.NET Web API教程】2.3.3 创建Admin控制器
- PAT甲级1036 Boys vs Girls:[C++题解] 字符串处理
- 1.15 Java 9新增的不可变集合
- 服务器2003蓝屏A5修复,求助windows 2003 蓝屏分析
- ACMMM2021|在多模态训练中融入“知识+图谱”:方法及电商应用实践
- Linux下压缩、解压缩、效率,linux tar bz、bz2、gz、zip
- C++实现的大整数分解Pollard's rho算法程序
- python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程
- 七个习惯之一:积极主动
- Coreldraw x6离线激活注册机免费下载安装教程
- 用两种while循环求2的n次方,n是传入的值。
- C语言---14文件操作---01文件内容的顺序读写
- [3DsMAX]建模软件的分享
- AntDesign 分页 警告 [`dataSource` length is less than `pagination.total` but......] 解决方法
- 手眼标定eye-in-hand(一)AX=XB方程推导
- 数据库课设--基于Python+MySQL的餐厅点餐系统
- 使用Jt2Go控件显示3D模型 / View 3D Model with JT2GO
- 传感器实验——寻迹模块
- mmorpg游戏第2次内测问题总结
- I3C协议Single Data Rate(SDR)模式研读(五):热加入机制、带内中断以及第二主机功能(hot-join、In-Band Interrupt、Secondary Master)
热门文章
- 【LINQ】Linq to SQL -- Where语句
- Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
- redis与memcached区别
- 20155320 2016-2017-2 《Java程序设计》第五周学习总结
- 2014 ACM/ICPC Asia Regional Beijing Site
- Android学习二:Http操作
- SAP屏幕设计器专题:表格控件属性的设定(七)
- VBS操作XML文档,拷贝结点 (转)
- 趣味物理中的计算机科学,【趣味物理】10个有趣的科学实验,揭示物理原理。...
- 【前端】【cornerstone】【未完善】cornerstone重新加载图像大小问题——拒绝花里胡哨