stringtranslate.com

Monomorfización

En Rust , la monomorfización es un proceso en tiempo de compilación donde 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 de salida (IR) tenga tipos específicos, lo que permite una optimización más efectiva. Además, muchos IR están destinados 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.

fn  id <T> ( x : T ) - > T { retorno x ;}    fn  principal () { let int = id ( 10 ); let string = id ( "algo de texto" ); imprimir! ( "{int}, {cadena}" ); }          

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

fn  id_i32 ( x : i32 )  -> i32  { retorno x ; }  fn  id_str ( x : & str )  -> & str  { return x ; }  fn  principal () { let int = id_i32 ( 10 ); let string = id_str ( "algo de texto" ); imprimir! ( "{int}, {cadena}" ); }          

Ver también

Referencias

  1. ^ "Tipos de datos genéricos: el lenguaje de programación Rust" . Consultado el 27 de mayo de 2021 .
  2. ^ Hume, Tristán. "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". Revista de Procesamiento de Información . 26 : 54–72. doi : 10.2197/ipsjjip.26.54 .
  4. ^ "Ampliación de Smt-Lib v2 con términos λ y polimorfismo". CiteSeerX 10.1.1.663.6849 .  {{cite journal}}: Citar diario requiere |journal=( ayuda )
  5. ^ Cai, Yufei; Giarrusso, Paolo G.; Ostermann, Klaus (11 de enero de 2016). "Sistema f-omega con tipos equicursivos 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, FL, EE.UU.: Asociación de Maquinaria de Computación. págs. 30–43. doi :10.1145/2837614.2837660. ISBN 978-1-4503-3549-2. S2CID  17566568.
  6. ^ Klabnik, Steve; Nichols, Carol (6 de agosto de 2019). El lenguaje de programación Rust (cubre Rust 2018). Sin prensa de almidón. 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 al 7 de agosto de 2015, Actas. Saltador. ISBN 978-3-319-21401-6.