webassembly【二】typescript 类型说明

今天系统的学习一下,webassembly typescript的类型,进入正题之前,看下面几行代码



export function m(x: i32): i32 {
    if (x === 1 || x === 2) {
        return 1;
    }
    return f(x - 1) + f(x - 2)
}


export function invert(byteSize: i32): i32 {
  for (let i = 0; i < byteSize; i += 4) {
    let pos = i + byteSize;
    store<u8>(pos + 0, 255 - load<u8>(i + 0));
    store<u8>(pos + 1, 255 - load<u8>(i + 1));
    store<u8>(pos + 2, 255 - load<u8>(i + 2));
    store<u8>(pos + 3, 255);
  }
  return 0;
}

上面的代码中,除了认识的就剩下不认识的了,O(∩-∩)O哈哈,扯个淡, 真正在接触 typescript 的时候,真没发现过 i32,u8, store,load等等这些关键字。
作为小白的我,今天和大家一块学习一下,如果有错误的地方,希望大神指出。

webassembly typescript 类型

原生类型

  • i8/u8 一个8位有符号/无符号整数, 有符号 -128127, 无符号: 0255
  • i16/u16 一个16位有符号/无符号整数,有符号 -3276832767,无符号: 065535
  • i32/u32 一个32位有符号/无符号整数,有符号:-21474836482147483647, 无符号: 04294967295
  • i64/u64 一个64位有符号/无符号整数,有符号:-92233720368547758089223372036854775807,无符号:018446744073709551615
  • f32 一个32为浮点数。
  • f64 一个64位浮点数。

理解 有符号和无符号,可以看这篇文章 https://www.cnblogs.com/lazycoding/archive/2011/03/21/unsigned-signed.html

模拟类型

  • i8/u8 一个8字节的有符号/无符号整数。
  • i16/u16 一个16字节的有符号/无符号整数。
  • bool 一个1字节无符号整数。

特殊类型

  • void 函数方法类型 无返回值

内存访问

  • load(ptr: usize, constantOffset?: usize): T 从内存中加载指定类型的值。 相当于在其他语言中取消引用指针。

  • store(ptr: usize, value: T, constantOffset?: usize): void 将指定类型的值存储到内存中。 相当于在分配值时取消引用其他语言中的指针。

修饰符

  • @global 将元素添加到全局范围。
  • @inline 强制函数内联。
  • @external([moduleName: string,] elementName: string) 更改声明的全局或函数的外部名称。
  • @operator(token: string) 注释二元运算符重载。
    • @operator.binary(token: string) 与@operator一样
    • @operator.prefix(token: string) 注释一元前缀运算符重载。
    • @operator.postfix(token: string) 注释一元后缀运算符重载。
文章来源: webassembly【二】typescript 类型说明