Despacho estático - Static dispatch


Na computação , o despacho estático é uma forma de polimorfismo totalmente resolvido durante o tempo de compilação . É uma forma de envio de método, que descreve como uma linguagem ou ambiente selecionará qual implementação de um método ou função usar.

Os exemplos são modelos em C ++ e programação genérica em outras linguagens, em conjunto com sobrecarga de função (incluindo sobrecarga de operador ). Diz-se que o código é monomorfizado , com tipos de dados específicos deduzidos e rastreados por meio do gráfico de chamadas , a fim de instanciar versões específicas de funções genéricas e selecionar chamadas de funções específicas com base nas definições fornecidas.

Isso contrasta com o despacho dinâmico , que é baseado em informações de tempo de execução (como ponteiros vtable e outras formas de informações de tipo de tempo de execução).

O envio estático é possível porque há uma garantia de que haverá apenas uma única implementação do método em questão. O despacho estático é normalmente mais rápido do que o despacho dinâmico, que por natureza tem uma sobrecarga mais alta.

Exemplo em ferrugem

Em Rust .

trait Speak {
    fn speak(&self);
}

struct Cat;

impl Speak for Cat {
    fn speak(&self) {
        println!("Meow!");
    }
}

fn talk<T: Speak>(pet: T) {
    pet.speak();
}

fn main() {
    let pet = Cat;
    talk(pet);
}

A ferrugem monomorfizará isso quando compilada em:

fn talk_cat(pet: Cat) {
    pet.speak();
}

Veja também

Referências