O que é monomorfização em Rust e C++ e como ela afeta o desempenho?
Olá, colegas! Acabei de começar a estudar Rust depois de C++ e me deparei com o termo "monomorfização". Honestamente, não entendo completamente o que é e por que tanto se fala sobre isso.
Eu sei que em C++ existem templates, e ouvi dizer que eles funcionam de forma semelhante aos genéricos em Rust. Mas em C++ raramente pensei sobre como exatamente o compilador processa código com templates. Agora, quando escrevo em Rust, frequentemente uso funções e estruturas genéricas, por exemplo:
```rust
fn print_value(value: T) {
println!("Value: {}", value);
}
fn main() {
print_value(42);
print_value("hello");
print_value(3.14);
}
```
Disseram-me que Rust usa monomorfização para trabalhar com genéricos, e isso supostamente torna o código mais rápido, mas aumenta o tamanho do binário. Ao mesmo tempo, ouvi dizer que em C++ os templates também são monomorfizados. Qual é a diferença então? E existem alternativas à monomorfização?
Tentei encontrar informações, mas em todos os lugares escrevem de forma complicada — sobre tabelas de funções virtuais