Chamando Código Externo

Funções de outras linguagens podem violar as garantias do Rust. Logo, chamá-las é inseguro:

extern "C" {
    fn abs(input: i32) -> i32;
}

fn main() {
    unsafe {
        // Comportamento indefinido se abs se comportar mal.
        println!("Valor absoluto de -3 de acordo com C: {}", abs(-3));
    }
}

Normalmente isso é apenas um problema para funções externas que fazem coisas com ponteiros que podem violar o modelo de memória do Rust, mas em geral qualquer função C pode ter comportamento indefinido sob quaisquer circunstâncias arbitrárias.

O "C" neste exemplo é o ABI; outros ABIs também estão disponíveis.