I stumbled on this interesting code example:
trait Bar {
fn foo(&mut self);
fn call_foo_twice(&mut self) {
self.foo(); // <-- this is statically dispatched
self.foo();
}
}
In C++, if this were a base class instead of a trait, call_foo_twice would only be compiled once, but it would dynamically dispatch the calls to foo, which itself would be declared virtual.
If those foo calls are statically dispatched in Rust, that suggests call_foo_twice is going to be recompiled for every single type that implements Bar because each type will have its own unique definition of foo. Is this correct? For instances where I prefer reducing compile time over increasing performance is there an idiom I should use instead?