stringtranslate.com

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

Мономорфизация — это процесс времени компиляции , в котором полиморфные функции заменяются многими мономорфными функциями для каждого уникального экземпляра. [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 ( "какой-то текст" ); 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 ( "какой-то текст" ); println! ( "{int}, {string}" ); }          

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

Ссылки

  1. ^ "Универсальные типы данных - язык программирования Rust" . Получено 27 мая 2021 г. .
  2. ^ Хьюм, Тристан. «Модели обобщений и метапрограммирования: Go, Rust, Swift, D и многое другое» . Получено 27 мая 2021 г.
  3. ^ Танака, Акира; Аффелдт, Рейнальд; Гарриг, Жак (2018). «Безопасная генерация низкоуровневого кода в Coq с использованием мономорфизации и монадификации». Журнал обработки информации . 26 : 54–72. doi : 10.2197/ipsjjip.26.54 .
  4. ^ "Расширение Smt-Lib v2 с помощью λ-терминов и полиморфизма". CiteSeerX 10.1.1.663.6849 .  {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  5. ^ Cai, Yufei; Giarrusso, Paolo G.; Ostermann, Klaus (2016-01-11). "Система f-omega с эквирекурсивными типами для программирования типов-обобщенных данных". Труды 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . POPL '16. Санкт-Петербург, Флорида, США: Ассоциация вычислительной техники. стр. 30–43. doi :10.1145/2837614.2837660. ISBN 978-1-4503-3549-2. S2CID  17566568.
  6. ^ Клабник, Стив; Николс, Кэрол (2019-08-06). Язык программирования Rust (охватывает Rust 2018). No Starch Press. ISBN 978-1-7185-0044-0.
  7. ^ Фелти, Эми П.; Миддельдорп, Аарт (2015-07-30). Автоматизированная дедукция - CADE-25: 25-я Международная конференция по автоматизированной дедукции, Берлин, Германия, 1-7 августа 2015 г., Труды. Springer. ISBN 978-3-319-21401-6.