المرجع &
استعِر القيمة دون أخذ ملكيتها:
fn length(s: &String) -> usize {
s.len()
}
let s = String::from("مرحبًا");
let len = length(&s); // أعرناها
println!("{s} طولها {len}"); // s لا تزال صالحة
المرجع القابل للتعديل &mut
fn add_excl(s: &mut String) {
s.push_str("!");
}
let mut s = String::from("مرحبًا");
add_excl(&mut s);
قواعد المستعير (Borrow Checker)
في أي لحظة، إمّا:
- عدّة مراجع للقراءة (
&)، أو - مرجع واحد للتعديل (
&mut).
لا يمكن الجمع بينهما — هذا يمنع تسابق البيانات (data races) وقت الترجمة.
let mut s = String::from("hi");
let r1 = &s;
let r2 = &s; // عدّة قراءات: مسموح
// let r3 = &mut s; // خطأ مع وجود قراءات نشطة
💡 المستعير (borrow checker) هو سرّ أمان Rust: يكتشف أخطاء الذاكرة قبل التشغيل.
🎯 التالي: الشرائح (Slices).