Динамическая vs Статическая диспетчеризация (Dynamic vs Static Dispatch)
Методы выполняются двумя способами:
- статическая диспетчеризация (static dispatch) - Когда тип экземпляра для вызываемого метода известен, мы имеем ясное представление о том какую функцию вызывать.
- динамическая диспетчеризация (dynamic dispatch) - Когда тип экземпляра неизвестен, мы должны найти способ вызова на нем правильной функции.
Типы типажа в виде &dyn MyTrait
дают возможность работать с экземплярами объектов косвенно, используя динамическую диспетчеризацию.
Когда используется динамическая диспетчеризация (dynamic dispatch), Rust будет просить вас поставить dyn
перед типом типажа, чтобы люди знали об этом.
Детали для запоминания:
- Динамическая диспетчеризация является более медленным вызовом методов из-за просмотра указателя (pointer chasing), чтобы найти реальный адрес вызываемой функции.