Avatar ·

¿Qué son los atributos de crate en Rust y dónde deben agregarse en el código?

¡Hola a todos! Acabo de empezar a aprender Rust y estoy tratando de entender los atributos de crate. En la documentación oficial dice que hay algunos atributos que se aplican a todo el crate, pero no entiendo qué significa eso ni dónde colocarlos. Tengo un proyecto simple que creé con `cargo new my_project`. Dentro hay un archivo `main.rs` con la función `main`. Leí que se puede usar el atributo `#![allow(unused_variables)]` para que el compilador no se queje de las variables no utilizadas. Pero cuando escribí: ```rust #![allow(unused_variables)] fn main() { let x = 5; let y = 10; println!("Hello!"); } ``` El compilador mostró una advertencia de que el atributo no se aplica a una expresión. Intenté poner `#[allow(unused_variables)]` (con un solo signo de exclamación), y entonces la advertencia desapareció solo para una expresión, no para todo el archivo. ¿Cuál es la diferencia entre `#![...]` y `#[...]`? ¿Por qué mi atributo no funcionó como atributo de crate? ¿Y dónde exactamente se debe agregar?