Avatar ·

¿Cuál es la diferencia entre los traits Copy y Clone en Rust?

¡Hola a todos! Soy nuevo en Rust y estoy tratando de entender la gestión de memoria. Leí sobre los traits Copy y Clone, pero no termino de comprender cuál es la diferencia entre ellos. En la documentación dice que Clone es una "copia profunda" y Copy es una "copia simple bit a bit". Pero en la práctica veo un comportamiento extraño. Aquí hay un ejemplo que me confunde: ```rust #[derive(Copy, Clone)] struct Point { x: i32, y: i32, } #[derive(Clone)] struct Line { start: Point, end: Point, } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1; // ¿Copy funciona? println!("{:?} {:?}", p1, p2); // ¡Funciona! let l1 = Line { start: Point { x: 0, y: 0 }, end: Point { x: 5, y: 5 } }; let l2 = l1; // ¡Error! ocurre un move // println!("{:?} {:?}", l1, l2); // No compilará } ``` ¿Por qué para Point funciona Copy, pero para Line no, aunque Line también usa Point con Copy internamente? ¿Cómo elegir correctamente entre Copy y Clone?