Transformación en tiempo de compilació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
- ^ "Tipos de datos genéricos: el lenguaje de programación Rust" . Consultado el 27 de mayo de 2021 .
- ^ Hume, Tristan. «Modelos de genéricos y metaprogramación: Go, Rust, Swift, D y más» . Consultado el 27 de mayo de 2021 .
- ^ 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 .
- ^ "Extensión de Smt-Lib v2 con términos λ y polimorfismo". CiteSeerX 10.1.1.663.6849 .
- ^ 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.
- ^ 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.
- ^ 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.