Rust · Avançado · Inglês · Técnico
object safety
Conjunto de regras que um trait precisa cumprir para ser usado como dyn Trait: sem métodos genéricos e sem devolver Self, por exemplo. A documentação atual diz 'dyn compatible'.
Onde usar
Aparece em erros como 'the trait is not dyn compatible' (antes, 'cannot be made into an object'). Métodos incompatíveis podem ser excluídos com where Self: Sized.
Em código
trait Ave { fn voa(&self); }
trait Clonavel {
fn clona(&self) -> Self;
}
let _a: Option<Box<dyn Ave>> = None;
// dyn Clonavel dá erro: devolve SelfExemplos
This trait isn't object safe because it returns Self.
Esse trait não é object safe porque devolve Self.
Add where Self: Sized to keep it object safe.
Adicione where Self: Sized para mantê-lo object safe.
Cuidado
Não tem relação com unsafe: a object safety trata apenas de ser possível montar a tabela de métodos do dyn.
Sinônimos
dyn compatibility, compatibilidade com dyn