perf(daemon): reduce commit collection from O(n^2) to O(n)
OTP 28 microbenchmarks, seven-sample medians: 32 commits took 2.54 to 1.38 us (1.8x faster), and 4,096 took 12.28 to 0.21 ms (58x faster). Order and positions stay intact; full test.sh passed.
62 unmodified lines636465666767686970713 unmodified lines757677787980818279808182838485858687888926 unmodified lines62 unmodified linespub fn commits( submissions: List(Submission), offset: Int,) -> List(operations.Commit) { let #(_, commits) = let #(_, reversed_commits) = list.fold(submissions, #(offset, []), fn(acc, submission) { let position = case submission.source { turn.Continue -> None _ -> Some(acc.0)3 unmodified lines Some(_) -> acc.0 + 1 } #(next, case submission.operation_id { None -> acc.1 Some(id) -> list.append(acc.1, [ operations.Commit(id, position, display(submission)), ]) Some(id) -> [ operations.Commit(id, position, display(submission)), ..acc.1 ] }) }) commits list.reverse(reversed_commits)}
pub fn inputs(submissions: List(Submission)) -> List(types.Input) { list.filter(submissions, fn(submission) { submission.source != turn.Continue })26 unmodified lines