Мономорфизация
В 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}");
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Общие типы данных — язык программирования Rust» . Проверено 27 мая 2021 г.
- ^ Хьюм, Тристан. «Модели дженериков и метапрограммирования: Go, Rust, Swift, D и многое другое» . Проверено 27 мая 2021 г.
- ^ Танака, Акира; Аффельдт, Рейнальд; Гарриг, Жак (2018). «Безопасная генерация низкоуровневого кода в Coq с использованием мономорфизации и монадификации» . Журнал обработки информации . 26 : 54–72. дои : 10.2197/ipsjjip.26.54 .
- ^ «Расширение Smt-Lib v2 с помощью λ-терминов и полиморфизма». CiteSeerX 10.1.1.663.6849 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Цай, Юфэй; Джарруссо, Паоло Г.; Остерманн, Клаус (11 января 2016 г.). «Система f-omega с эквикурсивными типами для общего программирования типов данных» . Материалы 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . ПОПЛ '16. Санкт-Петербург, Флорида, США: Ассоциация вычислительной техники. стр. 30–43. дои : 10.1145/2837614.2837660 . ISBN 978-1-4503-3549-2 . S2CID 17566568 .
- ^ Клабник, Стив; Николс, Кэрол (6 августа 2019 г.). Язык программирования Rust (охватывает Rust 2018) . Нет крахмального пресса. ISBN 978-1-7185-0044-0 .
- ^ Фелти, Эми П.; Мидделдорп, Аарт (30 июля 2015 г.). Автоматизированный дедукция — CADE-25: 25-я Международная конференция по автоматизированному дедукции, Берлин, Германия, 1-7 августа 2015 г., Материалы . Спрингер. ISBN 978-3-319-21401-6 .