Transformación en tiempo de compilació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
- ^ "Tipos de datos genéricos: el lenguaje de programación Rust" . Consultado el 27 de mayo de 2021 .
- ^ Hume, Tristán. "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". Revista de Procesamiento de Información . 26 : 54–72. doi : 10.2197/ipsjjip.26.54 .
- ^ "Ampliació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 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.
- ^ 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.
- ^ 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.