webassembly学习——介绍

一、基本介绍

WebAssembly,wasm,这是什么东西?是一门新语言还是一个新框架?亦或是一种新的技术方向?在回答这个问题前,首先要回顾一下JavaScript的历史,js是一个宝啊,几天时间搞出的一个小东西,迅速的风靡了整个互联网。js好使是好使,却有着很多缺点,这其中最让人诟病的,就是慢。为啥?解释型语言,各种推断分析,不慢就怪了。不过,自然有能人出手,JIT即时编译器将js的运行速度提高了一个层次水准。可惜的是,这也是js自身发展的一个瓶颈了,再往后发展,专门靠js自己,就有些心有余而力有所不逮了。而随着互联网的快速普及和人们对音视频以及游戏的需求井喷式的增长,开发者迫切的需要一种既能有js的简单易学,又能兼顾速度的一种解决方案。
做浏览器的三大巨头,微软、Google和FireFox都推出了自己的解决方案。微软推出了TypeScript,Google推出了Dark语言,而Firefox推出了asm.js。在随后的技术发展中,四大浏览器厂商(除了上述的三个外,增加了Apple Safari),认为asm.js的优势更为明显,于是便组织起来,为其制定了新的标准,即webassembly(wasm)。2015年,推出了第一个版本,2019年正式被Web标准接受。
所以,webassembly不是一门新语言,更不是一个框架,它是一个标准。webassembly“是一个可移植、体积小、加载快并且兼容 Web 的全新格式”。
“WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.”
WebAssembly有四个规范:
1、核心规范:定义与平台无关的 Wasm 模块的语义。
2、JavaScript API :定义 JavaScript 和wasm内部访问JavaScript 类和对象 的机制。
3、Web API :定义其在浏览器中 JavaScript API 扩展。
4、WASI API : 定义模块化的系统接口来用来在Web 外运行 Wasm,如文件操作等。
WebAssembly有四种表现形式:
1、二进制格式: wasm 的主要编码格式,以 .wasm 后缀结尾。
2、文本格式:以 .wat 后缀结尾,相当于汇编语言程序,便于理解和测试。
3、内存格式:wasm模块加载到内存的情形,与具体的wasm虚拟机的实现有关。
4、模块实例:模块就是wasm的具体的实例

二、特点

WebAssembly作为一个新兴的标准,有以下几个特点:
1、必须接近底层代码,便于向机器语言编译,即有利于解释器进行 AOT/JIT 编译,从而靠近原生程序的执行速度;
2、作为其它高级语言的一种编译目标代码;
3、基于Web的需要,代码安全可控;
4、编译出的代码必须是平台无关,实现跨平台执行,因此wasm采用了虚拟机/字节码技术。

三、应用前景

从理论上讲,webassembly可以应用到所有的场景上,毕竟它不是一门语言,只是一个标准。但其实在受众上更广泛和更容易被人们熟悉的其实就是游戏(3D、VR等)和音视频、图片。更多的应用场景如下:
A、浏览器内
1、更好的让一些语言和工具可以编译到 Web 平台运行。
2、图片/视频编辑。
3、游戏:需要快速打开的小游戏,AAA 级,资源量很大的游戏,游戏门户(代理/原创游戏平台)
4、P2P 应用(游戏,实时合作编辑)
5、音乐播放器(流媒体,缓存)
6、图像识别
7、视频直播
8、VR 和虚拟现实
9、CAD 软件
10、科学可视化和仿真
11、互动教育软件和新闻文章。
12、模拟/仿真平台(ARC, DOSBox, QEMU, MAME, …)。
13、语言编译器/虚拟机。
14、POSIX用户空间环境,允许移植现有的POSIX应用程序。
15、开发者工具(编辑器,编译器,调试器…)
16、远程桌面。
17、VPN。
18、加密工具。
19、本地 Web 服务器。
20、使用 NPAPI 分发的插件,但会受限于 Web 安全协议,可以使用 Web APIs。
21、企业软件功能性客户端(比如:数据库)
B、浏览器外
1、游戏分发服务(便携、安全)。
2、服务端执行不可信任的代码。
3、服务端应用。
4、移动混合原生应用。
5、多节点对称计算

  • 上述表述来自wasm官网
    从另外一个角度来看,wasm是一个二进制指令格式(或者说字节码),它的引入,可以极大的提高js编译后的可执行速度,并可根据实际情况对其代码进行优化,进一步提高运行的速度 。据一些测试表明,其最终的执行速度和原生的C\C++语言的编译结果已经相差不多。需要说明的是,wasm的执行,需要编译成最终的机器码,所以也可以把其看作一种中间格式(IR),但这种格式其实更倾向于底层,即这也是把webassembly看作Web上的汇编语言的原因。不过,看起来,应该它比汇编更低级一些。
    缺点是很多语言对webassembly的支持并不完善,最典型的就是Golang语言,编译出来的包又大又笨还不好使。

四、总结

新技术的产生,不会是一帆风顺的,WASM能走到哪一步,还需要后续的继续观察。但做为一种解决Web中运行速度的手段,webassembly有着旺盛的生命力。至少,在目前看来,没有更优秀的标准出来之前,webassembly一定会一骑绝尘。接受新生事物,不断的提高对新技术的敏感性。这就是技术人的宿命!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值