什么是WebAssembly

参考URL: http://www.mabiji.com/webassembly/wasm.html

可以在浏览器端运行的编译后的程序。

WebAssembly是什么?

WebAssembly即WASM, WebAssembly是一种新的编码格式并且可以在浏览器中运行,WASM可以与JavaScript并存,WASM更类似一种低级的汇编语言。

WebAssembly(又名wasm)是一种高效的,低级别的编程语言。 它让我们能够使用JavaScript以外的语言(例如C,C ++,Rust或其他)编写程序,然后将其编译成WebAssembly,进而生成一个加载和执行速度非常快的Web应用程序。

Wasm 具有运行高效、内存安全、无未定义行为和平台独立等特点,经过了编译器和标准化团队多年耕耘,目前已经有了成熟的社区。

WebAssembly和Rust

WebAssembly和Rust是紧密相关联的。WebAssembly是基于堆栈的虚拟机的二进制指令格式,它被设计为编程语言的可移植编译目标。目前很多语言都已经将 WebAssembly 作为它的编译目标了,但是不同的语言编译的成熟度不同。目前最高成熟度的语言有几个:C/C++/Rust。

目前对于WebAssembly来说的最佳选择还是Rust。因为Mozilla同时全力在推 WebAssembly 和 Rust(WebAssembly 标准是由Mozilla主导的,同时Rust也诞生于Mozilla)。

WebAssembly和JavaScript

WebAssembly 的出现是否会取代 JavaScript?
参考URL: https://www.zhihu.com/question/322007706

提到WebAssembly大家很自然的会想到JavaScript,WebAssembly并不是JavaScript的替代,二者可以协同工作,通过使用WebAssembly的JavaScript API,把WebAssembly模块加载到一个JavaScript应用中并且在两者之间共享功能。

WebAssembly优势

  • 快速高效:WebAssembly被设计为针对Size和Load Time进行优化的格式,可以在各个硬件平台上以native speed运行;
  • 安全性:WebAssembly是运行在沙盒内的,甚至可以和当前的Java虚拟机共享一套环境,并且也遵守浏览器各种跨域不跨域的规章制度;
  • 开放性:WebAssembly开放标准,不受任何一家厂商控制,并且被设计为可以和Java API和Context交互。
    wasm只是一个字节码标准,人们可以基于这个标准开发高级语言。类似jvm一样,很多语言可以编译成jvm字节码,从而使用jvm平台。wasm出现的意义是使用其他语言开发web app成为可能。之前也有其他语言,比如typescript开发,但是都是把代码编译成JavaScript运行,本质上还是使用的JavaScript. 个人认为JavaScript以后会作为浏览器默认支持的高级语言一直存在下去,但是wasm出现可以使基于web的开发工具出现百花齐放的状态,web端可能出现类似Java这样适合大型项目的静态类型语言。以后浏览器可能成为第二操作系统,大部分的用户应用都是云端app,少部分应用才需要安装到本地操作系统。

WebAssembly 目前还不具备 IO 以及 DOM 访问能力。跟外接的交互只有实现函数并导出,以及在函数实现中调用导入的函数。如果在浏览器或者 Node.js 中运行一定需要借助 JavaScript 才行。

使用现成的 python 第三方包pywasm

安装

pip install pywasm

使用 demo

import pywasm
# pywasm.on_debug()

runtime = pywasm.load('./examples/fib.wasm')
r = runtime.exec('fib', [10])
print(r) # 55

posted on 2023-03-19 22:51  耀扬  阅读(243)  评论(0编辑  收藏  举报

导航