LogoMist

Control Flow

Directing execution with expression-based logic, pattern matching, and traditional loop structures.

Control flow in Mist provides a bridge between C-style procedural logic and Rust's expression-oriented design. Blocks, if statements, while/for/loop loops, and match expressions all support statement bodies.

Conditionals

The if statement evaluates a boolean expression:

if (score > 50) {
    println!("Pass");
} else if (score == 50) {
    println!("Borderline");
} else {
    println!("Fail");
}

// Single-statement body (no braces needed)
if (is_active) println!("Running");

// Expression body (implicit return)
let result = if (valid) { "ok" } else { "err" };

Match

The match statement provides exhaustive pattern matching with support for multiple patterns per arm via |:

match (task_state) {
    TaskState::Pending => { println!("Queued"); }
    TaskState::Failed { reason, code } => {
        println!("Error {}: {}", code, reason);
    }
    TaskState::NotResponding | TaskState::Progress => {
        draw_loading();
    }
    _ => { println!("Other state"); }
}

Patterns support destructuring, or-patterns, and wildcards:

let x = 2;
let result;

match (x) {
    1 => { result = 10; }
    2 => { result = 20; }
    3 => { result = 30; }
    _ => panic!();
}

Loops

Loop

An infinite loop construct:

loop {
    println!("forever");
    if (done) break;
}

For-In Loop

For loops iterate over an expression using the pattern : expr syntax:

for (i : 0..4) {
    sum += i;
}

// With pattern destructuring
for ([k, _] : pairs) {
    keys += k;
}

While Loop

while (count < 5) {
    count++;
}

while (active) {
    wait_for_event();
}

Jump Statements

  • return: Exits the current function, optionally passing back a value.
  • break: Terminates the innermost looping construct.
  • continue: Skips the remainder of the current loop iteration.

Key Characteristics

  • Statement Bodies: If, while, for, and loop branches can omit braces for single statements or expressions.
  • Implicit Returns: Expression bodies (without ;) implicitly return their value.
  • Pattern Integration: Loops and match arms utilize Mist's pattern system for data destructuring.
  • Multiple Patterns: Match arms support | for matching multiple patterns.

On this page