A function call is a compact replay composition: the caller pauses, the callee produces a value, and the caller continues with the result.

Program

Play the program to choose a request count and watch the replay move through the helper before returning to main.

request_count
function_step_replay_rust.rs
Replay: real traced execution (multi-file project)
fn score_bonus(count: i32) -> i32 {
    let points = count * 2;
    points
}

fn main() {
    let request_count = 3;
    let base_score = 10;
    let bonus = score_bonus(request_count);
    let total = base_score + bonus;
    println!("{request_count}:{total}");
}
fn score_bonus(count: i32) -> i32 {
    let points = count * 2;
    points
}

fn main() {
    let request_count = 2;
    let base_score = 10;
    let bonus = score_bonus(request_count);
    let total = base_score + bonus;
    println!("{request_count}:{total}");
}
fn score_bonus(count: i32) -> i32 {
    let points = count * 2;
    points
}

fn main() {
    let request_count = 5;
    let base_score = 10;
    let bonus = score_bonus(request_count);
    let total = base_score + bonus;
    println!("{request_count}:{total}");
}
  1. request_count ← 3, base_score ← 10

    6fn main() {7    let request_coun→ 3t = 3; //@request_count=2, 3, 58    let base_scor→ 10e = 10;9    let bonus = score_bonus(request_coun3t);10    let total = base_score + bonus;
  2. points ← 6

    1fn score_bonus(count: i32) -> i32 {2    let point→ 6s = coun3t * 2;3    point6s4}
  3. bonus ← 6, total ← 16

    8    let base_score = 10;9    let bonu→ 6s = score_bonus(request_coun3t);10    let tota→ 16l = base_scor10e + bonu6s;11    println!("{request_count}:{total}");12}
    output3:16
  1. request_count ← 2, base_score ← 10

    6fn main() {7    let request_coun→ 2t = 2;8    let base_scor→ 10e = 10;9    let bonus = score_bonus(request_coun2t);10    let total = base_score + bonus;
  2. points ← 4

    1fn score_bonus(count: i32) -> i32 {2    let point→ 4s = coun2t * 2;3    point4s4}
  3. bonus ← 4, total ← 14

    8    let base_score = 10;9    let bonu→ 4s = score_bonus(request_coun2t);10    let tota→ 14l = base_scor10e + bonu4s;11    println!("{request_count}:{total}");12}
    output2:14
  1. request_count ← 5, base_score ← 10

    6fn main() {7    let request_coun→ 5t = 5;8    let base_scor→ 10e = 10;9    let bonus = score_bonus(request_coun5t);10    let total = base_score + bonus;
  2. points ← 10

    1fn score_bonus(count: i32) -> i32 {2    let point→ 10s = coun5t * 2;3    point10s4}
  3. bonus ← 10, total ← 20

    8    let base_score = 10;9    let bonu→ 10s = score_bonus(request_coun5t);10    let tota→ 20l = base_scor10e + bonu10s;11    println!("{request_count}:{total}");12}
    output5:20
callee state The helper owns `count` and `points` while it runs.
return value The last expression returns the computed points to the caller.
single stream The replay is still one source panel and one ordered event stream.