Полиморфизм |
---|
Полиморфизм ad hoc |
Параметрический полиморфизм |
Подтипирование |
В вычислительной технике статическая диспетчеризация — это форма полиморфизма, полностью разрешенная во время компиляции . Это форма диспетчеризации методов, которая описывает, как язык или среда будут выбирать, какую реализацию метода или функции использовать. [1]
Примерами являются шаблоны в C++ и обобщенное программирование в Fortran и других языках в сочетании с перегрузкой функций (включая перегрузку операторов ). Код называется мономорфизированным , с определенными типами данных , выведенными и отслеженными через граф вызовов , для создания определенных версий обобщенных функций и выбора определенных вызовов функций на основе предоставленных определений.
Это контрастирует с динамической диспетчеризацией , которая основана на информации времени выполнения (такой как указатели vtable и другие формы информации о типах времени выполнения).
Статическая диспетчеризация возможна, поскольку есть гарантия того, что существует только одна реализация рассматриваемого метода. Статическая диспетчеризация обычно быстрее динамической диспетчеризации, которая по своей природе имеет более высокие накладные расходы.
В Rust . [2]
черта Говорить { fn говорить ( & сам ); } структура Cat ;impl Speak for Cat { fn speak ( & self ) { println! ( "Мяу!" ); } } fn talk < T : Speak > ( pet : T ) { pet . speak (); } fn main () { let pet = Cat ; talk ( pet ); }
Rust мономорфизирует это при компиляции в:
fn talk_cat ( питомец : Кот ) { питомец . speak (); }