今天系统的学习一下,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) 注释一元后缀运算符重载。