跳到主要内容

全局/局部存储规则

Wave在关键词层面明确区分存储寿命(storage)与可变性(mutability)。

总结

  • 全局常量:const
  • 全局存储变量:static
  • 局部变量:varletlet mut

即,顶层只声明conststatic函数/块内部局部只声明varlet系列

全局常量:const

const被视为编译时常量,无法重新分配。

const PAGE_SIZE: i32 = 4096;
const MAGIC: i32 = 0x1BADB002;

全局存储变量:static

static是具有全局存储空间的变量。 可以重新分配,若未赋初值则以类型的0值初始化。

static COUNTER: i32 = 0;
static VGA_BUFFER: ptr<char> = 0xb8000 as ptr<char>;

局部变量:var / let

在函数或块内部仅使用局部变量关键词。

fun main() -> i32 {
var x: i32 = 10;
let y: i32 = 20;
let mut z: i32 = 30;

x = x + 1;
z = z + 1;
return x + y + z;
}

限制条件

  • varlet不能在顶层使用。
  • const,static不能在函数/块内部使用。
  • let是不可变的,不能重新分配。