Replay Composition
Function Step Replay
Call and Return
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.
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}");
}
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;points ← 6
1fn score_bonus(count: i32) -> i32 {2 let point→ 6s = coun3t * 2;3 point6s4}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
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;points ← 4
1fn score_bonus(count: i32) -> i32 {2 let point→ 4s = coun2t * 2;3 point4s4}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
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;points ← 10
1fn score_bonus(count: i32) -> i32 {2 let point→ 10s = coun5t * 2;3 point10s4}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.