Global Variables

    Global variables are declared at top-level. They may be private (no pub) or public (pub). Use var for mutable globals, const for immutable globals, and extern to declare symbols provided externally (no initializer).

    // public globals
    pub var  NAME: OptionalType = Value;
    pub const NAME: OptionalType = Value;
    pub extern NAME: Type; // public external symbol (no initializer)
    
    // private globals
    var  NAME: OptionalType = Value;
    const NAME: OptionalType = Value;
    extern NAME: Type; // private external symbol (no initializer)
    
    • var: mutable global (initializer optional; zero-initialized if omitted).
    • const: immutable global (must be initialized at declaration).
    • extern: declares a symbol provided by the runtime/linker.

    Examples:

    const MY_VAL = 10;                  // private immutable global
    pub var MY_VAR = 10;               // public mutable global
    var COUNTER: int;                   // private mutable global, zero-initialized
    pub const MAX: int = 100;           // explicit type
    pub const VERSION: char* = "1.0";
    
    pub extern stdin: void*;            // public external symbol
    extern errno: int;                  // private external symbol
    

    Reassignment rules:

    pub const PI = 3.14159;
    PI = 3.14; // ❌ cannot assign to const variable
    
    pub var CONFIG = 0;
    CONFIG = 1; // ✅ allowed
    

    Local Variables

    Local variables inside functions are declared using var or const.

    var name: OptionalType = Value;
    const name: OptionalType = Value;
    

    Examples:

    fn main() {
        var a = 10;    // mutable
        const b = 20;  // immutable
        var c: int;    // zero-initialized; defaults to 0
    }
    

    Zero Initialization

    Variables (both globals and locals) declared without an initializer are automatically zero-initialized:

    var x: int;
    var y: float64;
    
    printf("%d\n", x);   // prints 0
    printf("%f\n", y);   // prints 0.0