Jump to content

Мономорфизация

В Rust мономорфизация . — это процесс времени компиляции , в котором полиморфные функции заменяются множеством мономорфных функций для каждого уникального экземпляра [1] Считается полезным выполнить упомянутое преобразование, поскольку оно приводит к тому, что выходное промежуточное представление (IR) имеет определенные типы, что позволяет провести более эффективную оптимизацию. Кроме того, многие IR задуманы как низкоуровневые и не поддерживают полиморфизм. Результирующий код обычно работает быстрее, чем динамическая диспетчеризация , но может потребовать больше времени компиляции и места для хранения из-за дублирования тела функции. [2] [3] [4] [5] [6] [7]

Это пример использования общей функции идентификации в Rust.

fn id<T>(x: T) -> T {
    return x;
}

fn main() {
    let int = id(10);
    let string = id("some text");
    println!("{int}, {string}");
}

После мономорфизации это станет эквивалентом

fn id_i32(x: i32) -> i32 {
    return x;
}

fn id_str(x: &str) -> &str {
    return x;
}

fn main() {
    let int = id_i32(10);
    let string = id_str("some text");
    println!("{int}, {string}");
}

См. также

[ редактировать ]
  1. ^ «Общие типы данных — язык программирования Rust» . Проверено 27 мая 2021 г.
  2. ^ Хьюм, Тристан. «Модели дженериков и метапрограммирования: Go, Rust, Swift, D и многое другое» . Проверено 27 мая 2021 г.
  3. ^ Танака, Акира; Аффельдт, Рейнальд; Гарриг, Жак (2018). «Безопасная генерация низкоуровневого кода в Coq с использованием мономорфизации и монадификации» . Журнал обработки информации . 26 : 54–72. дои : 10.2197/ipsjjip.26.54 .
  4. ^ «Расширение Smt-Lib v2 с помощью λ-терминов и полиморфизма». CiteSeerX   10.1.1.663.6849 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  5. ^ Цай, Юфэй; Джарруссо, Паоло Г.; Остерманн, Клаус (11 января 2016 г.). «Система f-omega с эквикурсивными типами для общего программирования типов данных» . Материалы 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . ПОПЛ '16. Санкт-Петербург, Флорида, США: Ассоциация вычислительной техники. стр. 30–43. дои : 10.1145/2837614.2837660 . ISBN  978-1-4503-3549-2 . S2CID   17566568 .
  6. ^ Клабник, Стив; Николс, Кэрол (6 августа 2019 г.). Язык программирования Rust (охватывает Rust 2018) . Нет крахмального пресса. ISBN  978-1-7185-0044-0 .
  7. ^ Фелти, Эми П.; Мидделдорп, Аарт (30 июля 2015 г.). Автоматизированный дедукция — CADE-25: 25-я Международная конференция по автоматизированному дедукции, Берлин, Германия, 1-7 августа 2015 г., Материалы . Спрингер. ISBN  978-3-319-21401-6 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4a8d5a7fe35c35ba2cc7466af2ef70c6__1717053300
URL1:https://arc.ask3.ru/arc/aa/4a/c6/4a8d5a7fe35c35ba2cc7466af2ef70c6.html
Заголовок, (Title) документа по адресу, URL1:
Monomorphization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)