A Controller trait and a generic drive() are set up for you. Fill in Pursuit::step with the steer-and-ease law so drive() can run it, and reach the pad. The same drive() would run any other Controller you write.
Predict firstYou write drive() generically so it runs ANY Controller (Pursuit now, others later). In Rust, what does that abstraction cost at runtime?
Rust monomorphizes the generic: drive:: compiles to the same code you’d hand-write — a zero-cost abstraction. Interface flexibility with no runtime penalty, which is why it fits a control loop.