Jump to content

Статическая отправка

В вычислениях полностью статическая диспетчеризация — это форма полиморфизма, разрешаемая во время компиляции . Это форма диспетчеризации метода, которая описывает, как язык или среда будут выбирать, какую реализацию метода или функции использовать. [1]

Примерами являются шаблоны на C++ и обобщенное программирование на Фортране и других языках в сочетании с перегрузкой функций (включая перегрузку операторов ). Код называется мономорфизованным , при этом определенные типы данных выводятся и отслеживаются через граф вызовов , чтобы создавать экземпляры конкретных версий общих функций и выбирать конкретные вызовы функций на основе предоставленных определений.

Это контрастирует с динамической диспетчеризацией , которая основана на информации времени выполнения (например, указателях vtable и других формах информации о типах времени выполнения).

Статическая диспетчеризация возможна, поскольку существует гарантия того, что когда-либо будет существовать только одна реализация рассматриваемого метода. Статическая диспетчеризация обычно выполняется быстрее, чем динамическая диспетчеризация, которая по своей природе требует более высоких накладных расходов.

Пример на Rust

[ редактировать ]

В Русте . [2]

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();
}

См. также

[ редактировать ]
  1. ^ Элементы Clojure . Лулу.com. 2019. с. 68. ИСБН  9780359360581 . Проверено 17 июля 2022 г.
  2. ^ «Общие типы данных — язык программирования Rust» . doc.rust-lang.org .


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bcde25b5090f3b5a4db51eee3c3e307b__1702441620
URL1:https://arc.ask3.ru/arc/aa/bc/7b/bcde25b5090f3b5a4db51eee3c3e307b.html
Заголовок, (Title) документа по адресу, URL1:
Static dispatch - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)