En informática , el envío estático es una forma de polimorfismo que se resuelve completamente durante el tiempo de compilación . Es una forma de envío de métodos, que describe cómo un lenguaje o entorno seleccionará qué implementación de un método o función usar.
Los ejemplos son plantillas en C ++ y programación genérica en otros lenguajes, junto con la sobrecarga de funciones (incluida la sobrecarga de operadores ). Se dice que el código está monomorfizado , con tipos de datos específicos deducidos y rastreados a través del gráfico de llamadas , con el fin de crear instancias de versiones específicas de funciones genéricas y seleccionar llamadas de funciones específicas en función de las definiciones proporcionadas.
Esto contrasta con el envío dinámico , que se basa en información de tiempo de ejecución (como punteros vtable y otras formas de información de tipo de tiempo de ejecución).
El envío estático es posible porque existe la garantía de que solo habrá una única implementación del método en cuestión. El envío estático suele ser más rápido que el envío dinámico que, por naturaleza, tiene una sobrecarga más alta.
Ejemplo en Rust
rasgo Habla { fn hablar ( & self );}struct Cat ;impl Speak for Cat { fn hablar ( y uno mismo ) { println! ( "¡Miau!" ); }}fn hablar < T : Hablar > ( mascota : T ) { mascota . hablar ();}fn main () { let pet = Cat ; hablar ( mascota );}
Rust monomorfizará esto cuando se compile en:
fn talk_cat ( mascota : gato ) { mascota . hablar ();}
Ver también
Referencias
- ^ "Tipos de datos genéricos: el lenguaje de programación Rust" . doc.rust-lang.org .