Статическая отправка
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2021 г. ) |
Полиморфизм |
---|
Специальный полиморфизм |
Параметрический полиморфизм |
Подтипирование |
В вычислениях полностью статическая диспетчеризация — это форма полиморфизма, разрешаемая во время компиляции . Это форма диспетчеризации метода, которая описывает, как язык или среда будут выбирать, какую реализацию метода или функции использовать. [1]
Примерами являются шаблоны на C++ и обобщенное программирование на Фортране и других языках в сочетании с перегрузкой функций (включая перегрузку операторов ). Код называется мономорфизованным , при этом определенные типы данных выводятся и отслеживаются через граф вызовов , чтобы создавать экземпляры конкретных версий общих функций и выбирать конкретные вызовы функций на основе предоставленных определений.
Это контрастирует с динамической диспетчеризацией , которая основана на информации времени выполнения (например, указателях vtable и других формах информации о типах времени выполнения).
Статическая диспетчеризация возможна, поскольку существует гарантия того, что когда-либо будет существовать только одна реализация рассматриваемого метода. Статическая диспетчеризация обычно выполняется быстрее, чем динамическая диспетчеризация, которая по своей природе требует более высоких накладных расходов.
Пример на Rust
[ редактировать ]trait Speak {
fn speak(&self);
}
struct Cat;
impl Speak for Cat {
fn speak(&self) {
println!("Meow!");
}
}
fn talk<T: Speak>(pet: T) {
pet.speak();
}
fn main() {
let pet = Cat;
talk(pet);
}
Rust мономорфизирует это при компиляции в:
fn talk_cat(pet: Cat) {
pet.speak();
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Элементы Clojure . Лулу.com. 2019. с. 68. ИСБН 9780359360581 . Проверено 17 июля 2022 г.
- ^ «Общие типы данных — язык программирования Rust» . doc.rust-lang.org .