rust - signos - ¿Qué significa el signo de exclamación en una implementación de rasgo?
signos de exclamacion para niños (2)
Encontré en la referencia de la biblioteca para std::rc::Rc
esta implementación de rasgo
impl<T> !Send for Rc<T>
where
T: ?Sized,
¿Qué significa el signo de exclamación frente a Send
?
Consulté el libro The Rust Programming Language and y The Rust Reference ², pero no encontré una explicación. Por favor, da una referencia en tu respuesta.
¹ especialmente la [sección 3.19 Rasgos² y secciones 5.1 Rasgos y 5.1 Implementaciones
Esta es una impl de rasgo negativo , por lo que puede leerla como una opción de exclusión de la característica Send
.
Es una implementación de rasgo negativo para el rasgo de Send
como se describe en RFC 19 .
Como resumen: el rasgo de Send
es un rasgo inseguro . El RFC dice:
[Es] inseguro de implementar, porque implementarlo conlleva garantías semánticas que, de verse comprometidas, amenazan la seguridad de la memoria de una manera profunda.
Se implementan por defecto para todos los tipos:
unsafe impl Send for .. { }
Tenga en cuenta ..
como la sintaxis para una implementación predeterminada. El rasgo tampoco debe definir ningún método. Una implementación predeterminada es un rasgo de marcador implementado por todos los tipos.
Por lo tanto, para inhabilitar Send
, escriba una implementación de rasgo negativo:
impl !Send for MyType { }