stringtranslate.com

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

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

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

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

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

Пример на Rust

В Русте . [2]

черта Speak { fn talk ( & self ); }    структура  Кот ;impl Speak for Cat { fn talk ( & self ) { println! ( "Мяу!" ); } }         fn  talk < T : Говори > ( домашнее животное : T ) { pet . говорить (); }  fn  main () { let pet = Cat ; поговорить ( домашнее животное ); }      

Rust мономорфизирует это при компиляции в:

fn  talk_cat ( домашнее животное : Кот ) { pet . говорить (); }  

Смотрите также

Рекомендации

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