Qual é a diferença entre as traits Copy e Clone em Rust?
Olá a todos! Sou novo em Rust e estou tentando entender o gerenciamento de memória. Li sobre as traits Copy e Clone, mas não entendo completamente a diferença entre elas. Na documentação diz que Clone é "cópia profunda" e Copy é "cópia simples de bits". Mas na prática, vejo um comportamento estranho.
Aqui está um exemplo 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; // Erro! ocorre move
// println!("{:?} {:?}", l1, l2); // Não compila
}
```
Por que Copy funciona para Point, mas não para Line, mesmo Line usando Point com Copy internamente? Como escolher corretamente entre Copy e Clone?