ما الفرق بين traitين Copy و Clone في Rust؟
لقد بدأت للتو في تعلم Rust وأنا مرتبك بين traitين — Copy و Clone. يبدو أن كلاهما يسمح بنسخ القيم، لكن المترجم يتصرف بشكل مختلف.
إليك مثال حيرني. أحاول نسخ 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
}
```
إذا أضفت `#[derive(Copy)]`، فإن الكود يعمل:
```rust
#[derive(Copy, Clone)]
struct Point {
x: i32,
y: i32,
}
```
لكن إذا استخدمت `Clone` فقط، فيجب علي استدعاء `.clone()` بشكل صريح:
```rust
let p2 = p1.clone();
```
لماذا يحدث هذا؟ متى يجب استخدام Copy ومتى Clone؟ ما الفرق الجوهري؟ ولماذا يتطلب Copy وجود Clone (لقد رأيت أنهما يأتيان معًا غالبًا في derive)؟
اشرح لي، من فضلك، كمبتدئ. شكرًا مقدمًا!
<<>>
الفرق الأساسي: دلالات النقل مقابل النسخ
في Rust، بشكل افتراضي، يتم