Skip to content

类型系统

WebAssembly 有一个简单但强大的类型系统,包含四种值类型和 SIMD 类型支持。

值类型

类型大小描述范围
i3232 位有符号整数-2^31 到 2^31-1
i6464 位有符号整数-2^63 到 2^63-1
f3232 位IEEE 754 浮点数~6-7 位精度
f6464 位IEEE 754 浮点数~15-16 位精度

整数类型

有符号 vs 无符号

wat
;; 有符号(i32, i64)— 二进制补码
(func (export "signed_div") (param i32 i32) (result i32)
  local.get 0
  local.get 1
  i32.div_s)      ;; 有符号除法

(func (export "unsigned_div") (param i32 i32) (result i32)
  local.get 0
  local.get 1
  i32.div_u)      ;; 无符号除法

整数运算

运算有符号无符号
加法i32.add
减法i32.sub
乘法i32.mul
除法i32.div_si32.div_u
取模i32.rem_si32.rem_u
比较i32.lt_si32.lt_u

浮点类型

浮点运算

wat
;; 基本运算
(func (export "float_math") (param f32 f32) (result f32)
  local.get 0
  local.get 1
  f32.add)     ;; 加法

;; 特殊运算
(func (export "sqrt") (param f64) (result f64)
  local.get 0
  f64.sqrt)

(func (export "floor") (param f64) (result f64)
  local.get 0
  f64.floor)

SIMD 类型

WebAssembly SIMD 提供 128 位向量运算:

类型大小描述
v128128 位SIMD 向量

SIMD 指令

wat
(module
  (func (export "add_i8x16") (param v128 v128) (result v128)
    local.get 0
    local.get 1
    i8x16.add))

  (func (export "splat_i32x4") (param i32) (result v128)
    local.get 0
    i32x4.splat))

Rust 类型映射

Rust 类型WASM 类型
i32i32
i64i64
f32f32
f64f64
&[i32]线性内存切片
&str指针 + 长度
&[u8]线性内存切片
String指针 + 长度(已分配)

继续学习 JavaScript 集成

基于 MIT 协议发布