أعمار المراجع للسلامة
تعمّقوا في أعمار المراجع، وهي آلية Rust التي تضمن بقاء المراجع صالحة وتمنع المؤشرات المتدلية أثناء الترجمة.
أعمار المراجع للسلامة درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
أهمية أعمار المراجع
تمنع قواعد الملكية والاستعارة في Rust العديد من أخطاء الذاكرة الشائعة. لكن هناك طبقة أخرى من الأمان: أعمار المراجع.
تضمن أعمار المراجع أن تشير المراجع في تعليماتك البرمجية دائمًا إلى بيانات صالحة. وهي تحل مشكلة المراجع المعلّقة، حيث قد يشير مرجع إلى ذاكرة أُزيل تخصيصها بالفعل.
خطر المؤشر المعلّق
تخيّل سيناريو تنشئ فيه دالة بيانات، وتعيد مرجعًا إليها، ثم تُدمَّر البيانات عند انتهاء الدالة. عندها سيشير المرجع المُعاد إلى ذاكرة غير صالحة.
يستخدم Rust أعمار المراجع لمنع ذلك أثناء الترجمة. فهو يتحقق من أن أي مرجع تستخدمه سيظل صالحًا طوال المدة التي تحتاج إليه فيها، مما يضمن أمان الذاكرة.
يستنتج Rust أعمار المراجع
لا تحتاج دائمًا إلى كتابة تعليقات أعمار المراجع صراحةً. فلدى Rust مجموعة من قواعد حذف أعمار المراجع التي تتيح للمترجم استنتاج الأعمار في الأنماط الشائعة.
فمثلًا، في دالة تحتوي على مرجع إدخال واحد، غالبًا ما يُسنَد عمره تلقائيًا إلى مرجع الإخراج. وهذا يجعل تعليماتك البرمجية أكثر وضوحًا!
متى يجب إضافة التعليقات
عندما يتعذر على Rust استنتاج أعمار المراجع، يجب أن تضيفها صراحةً. وهذا يخبر المترجم بكيفية ارتباط أعمار المراجع المختلفة بعضها ببعض.
صيغة تعليق عمر المرجع هي علامة اقتباس مفردة يتبعها حرف صغير، مثل 'a. وهي معامل عام لأعمار المراجع، وليست مدة زمنية محددة.
معاملات أعمار المراجع في الدوال
عندما تأخذ دالة عدة مراجع وتعيد مرجعًا واحدًا، يحتاج Rust إلى معرفة عمر أي مرجع من مراجع الإدخال يجب أن يكون عمر مرجع الإخراج. ويضمن ذلك أن يكون المرجع المُعاد صالحًا دائمًا.
تُعلن الصيغة <'a> عن معامل عام لعمر المرجع. لنلقِ نظرة على مثال:
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
println!("The longest string is: {}", result);
}عمر المرجع 'static
يمثل عمر المرجع 'static حالة خاصة. فهو يشير إلى أن المرجع يمكن أن يظل صالحًا طوال مدة البرنامج بأكملها.
تتمتع القيم النصية الحرفية، مثل "hello world"، بعمر المرجع 'static لأنها مخزنة مباشرةً في الملف الثنائي للبرنامج ومتاحة طوال فترة التنفيذ.
fn main() {
// 'static lifetime for a string literal
let s: &'static str = "I live for the entire program!";
println!("{}", s);
// This is also implicitly 'static
let another_s = "Hello from static land!";
println!("{}", another_s);
}الهياكل التي تحتوي على مراجع
إذا كان هيكل ما يحتوي على مرجع، فيجب إضافة تعليق عمر مرجع إلى تعريف الهيكل. ويضمن ذلك ألا يتجاوز أي مثيل من الهيكل عمر البيانات التي تشير إليها مراجعه.
يخبر معامل عمر المرجع في الهيكل Rust بأن جميع المراجع الموجودة داخله يجب أن يكون لها هذا العمر على الأقل.
struct ImportantExcerpt<'a> {
part: &'a str,
}
fn main() {
let novel = String::from("Call me Ishmael. Some years ago...");
let first_sentence = novel.split('.').next().expect("Could not find a '.'");
let i = ImportantExcerpt {
part: first_sentence,
};
println!("Excerpt part: {}", i.part);
}أعمار المراجع مع الأنواع العامة
أعمار المراجع شكل من أشكال الأنواع العامة! ويمكنك دمجها مع الأنواع العامة لإنشاء هياكل بيانات أو دوال مرنة وآمنة.
فمثلًا، قد يحتوي هيكل على مراجع إلى أنواع عامة، تكون جميعها مقيّدة بمعامل عمر مرجع واحد، مما يضمن بقاء علاقات البيانات المعقدة صالحة.
فك رموز أخطاء المترجم
عندما تواجه أخطاء أعمار المراجع للمرة الأولى، قد تبدو مخيفة. والخطأ الأكثر شيوعًا هو "قد لا تعيش الاستعارة مدة كافية".
يعني هذا عادةً أنك تحاول استخدام مرجع بعد إسقاط البيانات التي يشير إليها، أو أن Rust لا يستطيع إثبات صلاحيته. ويساعدك فهم هذه الرسائل على ضبط تعليقات أعمار المراجع.
اختبار سريع: أعمار المراجع
أي مما يلي يصف بأفضل شكل المشكلة الأساسية التي تهدف تعليقات أعمار المراجع الصريحة في Rust إلى حلها؟
أعمار المراجع: الأمان أثناء الترجمة
لقد تعلّمتم أن أعمار المراجع جزء أساسي من ضمانات أمان الذاكرة في Rust. فهي تمنع المراجع المتدلية من خلال ضمان صلاحية جميع المراجع طوال فترة استخدامها.
- غالبًا ما تستنتج Rust أعمار المراجع باستخدام قواعد الحذف.
- تستخدمون التعليقات التوضيحية الصريحة مثل
'aعندما لا يكون الاستنتاج ممكنًا. - تُعد أعمار المراجع ضرورية للدوال التي تُرجع مراجع ولـالبُنى التي تحتوي على مراجع.
- يستمر عمر المرجع الخاص
'staticطوال مدة البرنامج بأكملها.
يُعد إتقان أعمار المراجع أمرًا أساسيًا لكتابة تعليمات Rust البرمجية المتينة!
الأسئلة الشائعة
هل درس «أعمار المراجع للسلامة» مجاني؟
نعم — نص درس «أعمار المراجع للسلامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «أعمار المراجع للسلامة»؟
تعمّقوا في أعمار المراجع، وهي آلية Rust التي تضمن بقاء المراجع صالحة وتمنع المؤشرات المتدلية أثناء الترجمة. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «أعمار المراجع للسلامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فهم نموذج الملكية في Rust
- شرح المراجع والاستعارة
- أعمار المراجع للسلامة