WebAssembly核心编程[2]:类型系统

对于绝大多数编程语言来说,类型都是编程的基础,WebAssembly自然也不例外。总的来说,WebAssembly涉及的类型不多,很好掌握,接下来我们就来介绍一下WebAssembly编程涉及到的几种类型。本篇内容参考WebAssembly Spec

一、Value Type

二、Function

三、Memory

四、Table

五、Global

六、External

一、Value Type

值类型(Value Type)在WebAssembly中主要分为三种,它们分别是数字(Number )、向量(Vector)和引用(Reference)。

image

1. Number

WebAssembly涉及数字只包含整数和浮点数,具体又有32位(4字节)和64位(8字节),所以WebAssembly支持的数字类型只包括i32、i64、f32、f64四种。

image

2. Vector

WebAssembly对单指令多数据(SIMD)提供了原生的支持,这进一步提升了它的性能。SIMD指令将一个128位的向量作为操作数,我们可以将多个整数或者浮点数组合成一个向量。比如某个支持i32的指令,采用SIMD方式进行执行理论上可以获得4倍的性能。

image

3. Reference

顾名思义,一个引用类型的变量代表一个指向某个目标对象的指针。目前WebAssembly设计的引用类型只有两种,一种是引用来源于宿主应用的JavaScript对象。由于对于wasm模块来说,这是一种外部引用,所以被定义成externref。另一种被命名位funcref的则是对自身Native函数的引用。

image

二、Function

函数本质上一组输入参数与一组输出结果的映射。虽然WebAssembly的函数目前还不支持返回多个结果,但是后续版本肯定会支持。输入参数列表和输出结果列表可以统一表示为"结果类型(resulttype)",具体来说就是一组值类型(数字、向量和引用)的有序组合,所以函数类型自然就表示成一个resulttype对象到另一个resulttype的映射。

image
image

三、Memory

Memory和Table都是一组连续的、限定长度的"区间",所以WebAssembly专门定义了limits这样一个类型来表示"长度限制"。一个limits必需使指定最小边界(min),可缺省的最长边界如果没有指定,意味着可以无限"扩容"。

image

Memory以单纯的二进制字节的形式来存储一组数据。由于数据类型确定,我们只需要指定"长度限制",所以Memory可以通过limits来表示。

image

四、Table

Memory和Table的不同指出在于它们存储的元素类型,前者为单纯的二进制字节,后者则是指定类型的对象。具体来说,Table的元素为"引用",要么是指向宿主应用提供的JavaScript对象(externref),要么是自身定义的函数(funcref)。

image

五、Global

用来表示"全局变量"的Global存储值类型(数字、向量和引用),mut(Mutable)用来表示对应的全局变量是否允许修改。

image

六、External

这里External表示可以导出的,作为宿主程序的"外部"对象。宿主应用可以从加载的wasm模块导出的对象类型包括:函数、Table、Memory和Global。

image
相关推荐
Niyy_21 小时前
WASM 的使用笔记
jvm·笔记·wasm
夜雪闻竹1 天前
sql.js WASM 深度解析
javascript·sql·wasm
带娃的IT创业者3 天前
数字考古学:当整个操作系统史被装进一个浏览器
操作系统·前端开发·webassembly·虚拟化技术·数字考古学·windows 95·复古计算
小杍随笔5 天前
【Rust 1.96.0 深度解析:让 Range 可 Copy、让断言更聪明、让 Wasm 更安全】
安全·rust·wasm
padane227 天前
gmssl编译wasm
ubuntu·html·密码学·wasm·js
放逐者-保持本心,方可放逐7 天前
Go + WebAssembly 构建树木数据统计分析系统
开发语言·golang·wasm·javascipt
包子源8 天前
浏览器 ffmpeg.wasm 视频压缩:Next.js 静态站集成完整指南
javascript·ffmpeg·wasm
夜雪闻竹13 天前
sql.js WASM 实战:浏览器里跑 SQLite
javascript·sql·wasm
Maimai1080814 天前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
Maimai1080815 天前
前端如何落地 SSE:从实时评论到可复用的实时数据 Hook
前端·javascript·react.js·前端框架·web3·状态模式·webassembly