欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webassembly【二】typescript 类型说明

程序员文章站 2022-03-05 23:22:31
...

今天系统的学习一下,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位有符号/无符号整数, 有符号 -128~127, 无符号: 0~255
  • i16/u16 一个16位有符号/无符号整数,有符号 -32768~32767,无符号: 0~65535
  • i32/u32 一个32位有符号/无符号整数,有符号:-2147483648~2147483647, 无符号: 0~4294967295
  • 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