理解 WebAssembly 原理

what?

WebAssembly(缩写为 Wasm)是一种基于栈式虚拟机的二进制指令格式。Wasm 是一种底层类汇编语言,能在 Web 平台上以趋近原生应用的速度运行。C/C++/Rust 等语言将 Wasm 作为编译目标语言,可以将已有的代码移植到 Web 平台中运行,以提升代码复用度。

Wasm 的特点:

  • 层次低,尽量接近机器语言,这样解释器才更容易进行 AOT/JIT 编译,以趋近原生应用的速度运行 Wasm 程序;
  • 作为目标代码,由其他高级语言编译器生成;
  • 代码安全可控,不能像真正的汇编语言那样可以执行任意操作;
  • 代码是平台无关的(不能是平台相关的机器码),可以跨平台执行,采用了虚拟机/字节码技术。

Wasm 目前已经在浏览器端的图像处理、音视频处理、游戏、IDE、可视化、科学计算等,以及非浏览器端的Serverless、区块链、IoT 等领域有一定的应用:很棒的 WebAssembly 应用程序的精选列表

模块

Wasm 模块主要有以下 4 种表现形式:

  • 二进制格式 —— Wasm 的主要编码格式,以 .wasm 后缀结尾。
  • 文本格式 —— 主要是为了方便开发者理解 Wasm 模块,或者编写小型的测试代码,以 .wat 后缀结尾,相当于汇编语言程序。
  • 内存格式 —— 模块加载到内存的表现,该表现形式与具体的 Wasm 虚拟机的实现有关,不同 Wasm 虚拟机的实现有不同的内存表示。
  • 模块实例 —— 如果将内存格式理解为面向对象语言中的类,那模块实例就相当于“对象”。

各个格式之间的关联如下:

  • 二进制格式主要由高级编程语言编译器生成,也可通过文本格式编译生成。
  • 文本格式可以由开发者直接编写,也可由二进制反编译生成。
  • Wasm 解释器通常会将二进制模块解码为内部形式,即内存格式(比如 C/C++ 结构体),然后再进行后续处理。

 

Wasm 二进制文件被执行主要分 3 个阶段:解码验证执行

  1. 解码阶段:将二进制格式解码为内存格式。
  2. 验证阶段:对模块进行静态分析,确保模块的结构满足规范要求,且函数的字节码没有不良行为(例如调用不存在的函数)。
  3. 执行阶段:进一步分为实例化函数调用两个阶段。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值