Box<T> — تخزين في الكومة
مفيد للأنواع التعاوديّة والبيانات الكبيرة:
let b = Box::new(5);
println!("{}", b);
// نوع تعاودي
enum List {
Cons(i32, Box<List>),
Nil,
}
Rc<T> — ملكية مشتركة
عدّة مالكين لنفس البيانات (عدّاد مراجع، خيط واحد):
use std::rc::Rc;
let a = Rc::new(String::from("بيانات"));
let b = Rc::clone(&a); // يزيد عدّاد المراجع
println!("{}", Rc::strong_count(&a)); // 2
RefCell<T> — قابلية تغيير داخلية
يتيح التعديل عبر مرجع غير قابل للتغيير ظاهريًّا (فحص القواعد وقت التشغيل):
use std::cell::RefCell;
let data = RefCell::new(5);
*data.borrow_mut() += 1;
println!("{}", data.borrow()); // 6
أيّها أختار؟
- بيانات على الكومة بمالك واحد →
Box. - مالكون متعدّدون (قراءة) →
Rc. - تعديل داخلي →
RefCell(وغالبًاRc<RefCell<T>>).
🎯 التالي: التزامن (Concurrency).