Avatar ·

ما الذي يُستخدم في Rust بدلاً من جامع القمامة (garbage collector) لإدارة الذاكرة؟

```html مرحباً! بدأت للتو في تعلم Rust بعد Java وPython، ولدي سوء فهم. في Java وPython يوجد جامع القمامة (GC) الذي يحرر الذاكرة تلقائياً عندما لا تكون الكائنات مطلوبة بعد. لكنني قرأت أنه لا يوجد GC في Rust. كيف إذن يدير Rust الذاكرة بدون جامع القمامة؟ هل سأضطر إلى استدعاء `free()` أو `delete` يدوياً كما في C؟ هذا غير مريح ويؤدي إلى تسربات! إليك مثال بسيط كتبته محاولاً فهم ما سيحدث: ```rust fn main() { let s1 = String::from("Привет"); let s2 = s1; // توقعت نسخة كما في Java println!("{}", s1); // هذا لا يُترجم! خطأ: borrow of moved value } ``` لا أفهم لماذا لم يعد `s1` متاحاً بعد تعيين `s2`. في Java، كان `s2` سيشير إلى نفس السلسلة، وكان `s1` سيظل صالحاً. ما هو "move" وكيف يرتبط بعدم وجود GC؟ وكيف يضمن Rust سلامة الذاكرة بدون جامع القمامة؟ اشرح لي كمبتدئ من فضلك. أيضاً سمعت عن "владение" (الملكية) في Rust. هل يمكنك توضيح كيف تعمل نظام الملكية والاقتراض والمراجع لحل مشكلة إدارة الذاكرة؟ وما الفرق بين `String` و`&str` في هذا السياق؟ ```