Monomorfização

Nas linguagens de programação , a monomorfização é um processo em tempo de compilação onde funções polimórficas são substituídas por muitas funções monomórficas para cada instanciação única. [1] Considera-se benéfico passar pela transformação mencionada porque resulta na representação intermediária de saída (IR) com tipos específicos, o que permite uma otimização mais eficaz. Além disso, muitos IRs pretendem ser de baixo nível e não acomodam polimorfismo. O código resultante é geralmente mais rápido que o despacho dinâmico , mas pode exigir mais tempo de compilação e espaço de armazenamento devido à duplicação do corpo da função. [2] [3] [4] [5] [6] [7]

Exemplo

Este é um exemplo de uso de uma função de identidade genérica em Rust

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


fn  main () { deixe int = id ( 10 ); deixe string = id ( "algum texto" ); imprimir! ( "{int}, {string}" ); } 
       
       
    

Após a monomorfização, isso se tornaria equivalente a

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


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


fn  main () { deixe int = id_i32 ( 10 ); deixe string = id_str ( "algum texto" ); imprimir! ( "{int}, {string}" ); } 
       
       
    

Veja também

Referências

  1. ^ "Tipos de dados genéricos - a linguagem de programação Rust" . Recuperado em 27 de maio de 2021 .
  2. ^ Hume, Tristão. "Modelos de genéricos e metaprogramação: Go, Rust, Swift, D e mais" . Recuperado em 27 de maio de 2021 .
  3. ^ Tanaka, Akira; Affeldt, Reynald; Garrigue, Jacques (2018). "Geração segura de código de baixo nível em Coq usando monomorfização e monadificação". Jornal de Processamento de Informação . 26 : 54–72. doi : 10.2197/ipsjjip.26.54 .
  4. ^ "Estendendo Smt-Lib v2 com termos λ e polimorfismo" . CiteSeerX 10.1.1.663.6849 .  {{cite journal}}: Citar diário requer |journal=( ajuda )
  5. ^ Cai, Yufei; Giarrusso, Paulo G.; Ostermann, Klaus (11/01/2016). "Sistema f-omega com tipos equirecursivos para programação genérica de tipo de dados". Anais do 43º Simpósio Anual ACM SIGPLAN-SIGACT sobre Princípios de Linguagens de Programação . POPL '16. São Petersburgo, FL, EUA: Association for Computing Machinery. págs. 30–43. doi :10.1145/2837614.2837660. ISBN 978-1-4503-3549-2. S2CID17566568  .
  6. ^ Klabnik, Steve; Nichols, Carol (06/08/2019). A linguagem de programação Rust (abrange Rust 2018). Sem prensa de amido. ISBN 978-1-7185-0044-0.
  7. ^ Felty, Amy P.; Middeldorp, Aart (30/07/2015). Dedução Automatizada - CADE-25: 25ª Conferência Internacional sobre Dedução Automatizada, Berlim, Alemanha, 1 a 7 de agosto de 2015, Anais. Springer. ISBN 978-3-319-21401-6.
Obtido em "https://en.wikipedia.org/w/index.php?title=Monomorphization&oldid=1189635700"