webassembly学习——基础语法和数据类型

本文详细解读了WebAssembly的数据类型,包括值类型(如i32, i64, f32, f64)、线性内存、表、特殊类型和全局/局部/向量/外部/引用/函数类型。介绍了这些元素在构建堆栈机器语言中的作用和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基础语法

webassembly作为一种标准,当然也是有语法的。从比较容易的上层语言的角度来理解,wasm是一个结构化的堆栈机器。基本由数据类型、函数和模块组成。而函数就是指令序列,wasm的指令有控制指令和简单指令两类。前者负责操作数据的行动方式,后者决定数据操作。
wasm提供了一组与语言无关的操作运算符,它和具体的简单指令一一相对应,而这最基础的一定是数据类型和数据的结构。

二、数据类型和数据结构

来看一下wasm提供的数据类型:
1、值 类型
i32: ——32位整型,4字节
i64: ——64位整型,8字节
f32: ——32位浮点型,4字节
f64: ——64位浮点型,8字节
不过,上面的类型有一个特点,不管是整型还是浮点型,都不像其它语言的数据类型,是固定的有符号和无符号。它取决于特定的运算符的实际情况。

2、线性内存
线性内存是一段以字节寻址的连续存储区间, 范围从0 到一个N的内存大小 。 这个大小一般是WebAssembly页容量的倍数, WebAssembly的页容量被固定为64K,可以用grow_memory来动态增加它。

3、表
类似于线性内存,表元素是不透明值,一种特殊的_表元素类型, 而不是字节

4、特殊类型
void——表示函数无返回值

5、全局类型
存储固定值类型的单个值,并且可以声明为可变的或不可变的。其操作如下:
get_global: 获取全局变量的当前值
set_global: 设置全局变量的当前值
全局类型只能从模块内定义的 全局索引空间 中通过整数索引的方式获取。全局变量要么是被 导入 , 要么是 模块内定义的。这两种方式对后续的全局变量访问没有区别。

6、局部类型
每个函数都有一些固定的,预声明的局部变量,它们占用函数内部的单个索引空间。可以通过下面的方式对其进行操作:
get_local: 获取局部变量当前值
set_local: 设置局部变量当前值
tee_local: 类似 set_local, 设置局部变量当前值后返回被设置的新值

7、向量类型
SIMD指令,单指令多数据,可以理解成一种数组类型。

8、外部类型
部类型使用它们各自的类型对导入和外部值进行分类。

9、引用类型
引用类型对运行时存储中对象的第一类引用进行分类。
10、函数类型
其实就是高级语言的函数对象类型,也类似于C语言等中的函数指针。引用类型是不透明的,这意味着既不能观察到它们的大小,也不能观察到它们的位模式。引用类型的值可以存储在表中。

三、总结

其实写这段比较郁闷,不知道这样的划分是否和传统的语言划分是否一致,能否更容易为开发人员的理解。wasm是一个新东西,虽然发展了几年,有些壮大,但还是需要进一步的巩固和提高。学习就需要从基础开始,基本的数据类型就是基础中的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值