RustIntermedio28 oct 2025
¡El `const` de Rust: Un Ilusionista en Tu Código!
snippet.rust
struct MyDroppable(u8);
impl Drop for MyDroppable {
fn drop(&mut self) {
println!("Dropping MyDroppable({})", self.0);
}
}
const CONST_DROPPABLE: MyDroppable = MyDroppable(1);
fn main() {
println!("Start main");
let _a = CONST_DROPPABLE;
let _b = CONST_DROPPABLE;
println!("End main");
}¿Qué crees que imprime?
✅ Salida Esperada
Start main
End main
Dropping MyDroppable(1)⚠️ Salida Real
Start main
End main
Dropping MyDroppable(1)
Dropping MyDroppable(1)¿Por qué pasa esto?
¡Prepárate para una sorpresa! 🎉 En Rust, un `const` no es una instancia única que vive en memoria estática como un `static`. ¡Es más bien una **constante de compilación**! Como un valor literal, se **copia** o **inlina** en cada lugar donde se usa. 👯♀️
Aquí la clave es el trait `Drop`.
- Cuando asignamos `CONST_DROPPABLE` a `_a`, se crea una **copia** y `_a` se convierte en el dueño.
- Lo mismo ocurre con `_b`: otra **copia** independiente se genera.
El resultado: cada copia tiene su propia vida y, al salir de ámbito, ¡llama a su propio `drop()`! 👻 Por eso ves dos mensajes de "Dropping". Es como si cada vez que invocaras al `const`, Rust dijera: "¡Aquí tienes uno nuevo, fresquito del horno del compilador!". ¡Un verdadero WTF que te hace cuestionar la identidad de los objetos! 🤔
Conceptos relacionados
const-evaluationdrop-traitcompile-time