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).

    const version = "1.0"; // private immutable global
    pub var requestCount = 0; // public mutable global
    var activeUsers: int; // zero-initialized
    pub const maxConnections: int = 100; // public immutable global
    pub extern stdin: void*; // public external symbol
    extern errno: int; // private external symbol
    

    Reassignment rules:

    const pi = 3.14159;
    
    fn main() {
        pi = 3.14; // cannot assign to const variable
    }
    
    var counter = 0;
    
    pub fn main() {
        counter = 1; // allowed
        counter++; // allowed
    }
    

    Local Variables

    Local variables inside functions are declared using var or const.

    pub fn main() {
        var name = "Cyrus";
        const timeoutMs = 500;
    }
    

    If the type matters:

    pub fn main() {
        var retries: int; // zero-initialized
        const epsilon: float64 = 0.001;
    }
    

    Zero Initialization

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

    pub fn main() {
        var x: int;
        var y: float64;
        var z: void*;
    
        printf("%d\n", x); // prints 0
        printf("%f\n", y); // prints 0.0
        printf("%p\n", z); // prints (nil)
    }