stringtranslate.com

Monomorfización

La monomorfización es un proceso de tiempo de compilación en el que las funciones polimórficas se reemplazan por muchas funciones monomórficas para cada instanciación única. [1] Se considera beneficioso someterse a la transformación mencionada porque da como resultado que la representación intermedia (IR) de salida tenga tipos específicos, lo que permite una optimización más efectiva. Además, muchas IR están destinadas a ser de bajo nivel y no admiten polimorfismo. El código resultante es generalmente más rápido que el envío dinámico , pero puede requerir más tiempo de compilación y espacio de almacenamiento debido a la duplicación del cuerpo de la función. [2] [3] [4] [5] [6] [7]

Ejemplo

Este es un ejemplo del uso de una función de identidad genérica en Rust

función  id < T > ( x : T )  -> T { devolver x ; }   fn  main () { let int = id ( 10 ); let string = id ( "un texto" ); println! ( "{int}, {string}" ); }          

Después de la monomorfización, esto sería equivalente a

fn  id_i32 ( x : i32 )  -> i32  { devolver x ; }  fn  id_str ( x : & str )  -> & str  { devolver x ; }  fn  main () { let int = id_i32 ( 10 ); let string = id_str ( "un texto" ); println! ( "{int}, {string}" ); }          

Véase también

Referencias

  1. ^ "Tipos de datos genéricos: el lenguaje de programación Rust" . Consultado el 27 de mayo de 2021 .
  2. ^ Hume, Tristan. «Modelos de genéricos y metaprogramación: Go, Rust, Swift, D y más» . Consultado el 27 de mayo de 2021 .
  3. ^ Tanaka, Akira; Affeldt, Reynald; Garrigue, Jacques (2018). "Generación segura de código de bajo nivel en Coq mediante monomorfización y monadificación". Journal of Information Processing . 26 : 54–72. doi : 10.2197/ipsjjip.26.54 .
  4. ^ "Extensión de Smt-Lib v2 con términos λ y polimorfismo". CiteSeerX 10.1.1.663.6849 .  {{cite journal}}: Requiere citar revista |journal=( ayuda )
  5. ^ Cai, Yufei; Giarrusso, Paolo G.; Ostermann, Klaus (11 de enero de 2016). "Sistema f-omega con tipos equirecursivos para programación genérica de tipos de datos". Actas del 43.° Simposio anual ACM SIGPLAN-SIGACT sobre principios de lenguajes de programación . POPL '16. San Petersburgo, Florida, EE. UU.: Association for Computing Machinery. págs. 30–43. doi :10.1145/2837614.2837660. ISBN. 978-1-4503-3549-2.ID S2C  17566568.
  6. ^ Klabnik, Steve; Nichols, Carol (6 de agosto de 2019). El lenguaje de programación Rust (Portada de Rust 2018). No Starch Press. ISBN 978-1-7185-0044-0.
  7. ^ Felty, Amy P.; Middeldorp, Aart (30 de julio de 2015). Deducción automatizada - CADE-25: 25.ª conferencia internacional sobre deducción automatizada, Berlín, Alemania, 1-7 de agosto de 2015, Actas. Springer. ISBN 978-3-319-21401-6.