Avatar ·

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

Acabo de empezar a aprender Rust y me confundí con dos traits: Copy y Clone. Parece que ambos permiten copiar valores, pero el compilador se comporta de manera diferente. Aquí hay un ejemplo que me confundió. Intento copiar una struct: ```rust struct Point { x: i32, y: i32, } fn main() { let p1 = Point { x: 10, y: 20 }; let p2 = p1; // move let p3 = p1; // error: use of moved value } ``` Si agrego `#[derive(Copy)]`, el código funciona: ```rust #[derive(Copy, Clone)] struct Point { x: i32, y: i32, } ``` Pero si uso solo `Clone`, tengo que llamar explícitamente `.clone()`: ```rust let p2 = p1.clone(); ``` ¿Por qué es así? ¿Cuándo se debe usar Copy y cuándo Clone? ¿Cuál es la diferencia fundamental? ¿Y por qué Copy requiere Clone (he visto que a menudo van juntos en derive)? Explíquenme, por favor, como a un principiante. ¡Gracias de antemano! <<>>

Diferencia principal: semántica de movimiento vs copia

En Rust, por defecto, se