ما الفرق بين traitين Copy و Clone في Rust؟
مرحبًا بالجميع! أنا مبتدئ في Rust وأحاول فهم إدارة الذاكرة. قرأت عن traitين Copy و Clone، لكني لم أفهم الفرق بينهما تمامًا. في التوثيق مكتوب أن Clone هو "نسخ عميق"، و Copy هو "نسخ بسيط على مستوى البت". لكن عمليًا أرى سلوكًا غريبًا.
إليك مثال يربكني:
```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 يعمل؟
println!("{:?} {:?}", p1, p2); // يعمل!
let l1 = Line {
start: Point { x: 0, y: 0 },
end: Point { x: 5, y: 5 }
};
let l2 = l1; // خطأ! يحدث move
// println!("{:?} {:?}", l1, l2); // لن يتم compile
}
```
لماذا يعمل Copy مع Point، ولكن ليس مع Line، رغم أن Line تستخدم Point مع Copy داخليًا؟ كيف أختار بشكل صحيح بين Copy و Clone؟