Avatar ·

O que significa a palavra-chave `dyn` em tipos Rust?

Olá! Comecei a estudar Rust e me deparei com algo estranho. Em alguns exemplos vejo `Box`, e em outros apenas `Box` ou `&dyn Trait`. Estou tentando entender o que exatamente a palavra-chave `dyn` faz.\n\nPor exemplo, tenho este código:\n\n```rust\ntrait Animal {\n fn speak(&self);\n}\n\nstruct Dog;\nimpl Animal for Dog {\n fn speak(&self) {\n println!("Au!");\n }\n}\n\nfn main() {\n let pet: Box = Box::new(Dog);\n pet.speak();\n}\n```\n\nSe eu remover `dyn` e escrever apenas `Box`, o compilador dá erro: "the trait `Animal` cannot be made into an object". Mas não entendo por que isso acontece, e o que `dyn` significa. É algum tipo especial? Ou modificador? Quando devo usá-lo e quando não?\n\nExpliquem, por favor.