0Pricing
Learn Rust Coding · درس

لماذا نستخدم أعمار الاقتراض

منع المراجع المتدلية

لماذا نستخدم أعمار الاقتراض درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

يجب أن تظل المراجع صالحة

تستعير المرجعية بيانات لا تملكها. ويجب على Rust ضمان بقاء البيانات مدةً لا تقل عن مدة صلاحية المرجعية. وتستخدم المدد العمرية (Lifetimes) لتتبع ذلك.

ومهمتها هي منع المراجع المتدلية.

ما المرجعية المتدلية؟

تشير المرجعية المتدلية إلى ذاكرة حُررت. وفي اللغات التي لا تفرض فحوصًا، يؤدي استخدامها إلى أعطال أو ثغرات أمنية. أما Rust فترفض ترجمة هذا النوع من التعليمات البرمجية.

آلية عمل فاحص الاستعارة

ينشئ هذا الرمز مرجعية إلى قيمة تخرج من النطاق. وترفض Rust ذلك أثناء الترجمة. والمدد العمرية هي القاعدة التي تستخدمها لاتخاذ هذا القرار.

fn main() {
    let r;
    {
        let x = 5;
        r = &x;
        println!("inside: {}", r);
    }
    // using r here would be a dangling reference
    println!("done");
}

النطاقات تحدد المدد العمرية

المدة العمرية للقيمة هي الفترة التي تظل خلالها صالحة، وتكون عادةً نطاقها. ويجب ألا تتجاوز مدة صلاحية المرجعية مدة صلاحية القيمة التي تشير إليها.

هنا يوجد كل من x والمرجعية في النطاق نفسه، لذا لا توجد مشكلة.

fn main() {
    let x = 5;
    let r = &x;
    println!("x is {}, r is {}", x, r);
}

إرجاع المراجع

يجب على الدالة التي تُرجع مرجعية أن تُرجع مرجعية تظل صالحة لدى المستدعي. ولا يمكنك إرجاع مرجعية إلى متغير محلي، لأنه ينتهي عند انتهاء الدالة.

إرجاع استعارة من مُدخل

ما يمكنك فعله هو إرجاع مرجعية تستعير من مُدخل. وتظل النتيجة صالحة ما دام ذلك المُدخل صالحًا. وهذا بالضبط ما تصفه تعليقات المدد العمرية.

fn first_word(s: &str) -> &str {
    let bytes = s.as_bytes();
    for (i, &b) in bytes.iter().enumerate() {
        if b == b' ' {
            return &s[..i];
        }
    }
    s
}

fn main() {
    let sentence = String::from("hello world");
    println!("{}", first_word(&sentence));
}

المدد العمرية مفاهيم وقت الترجمة فقط

المدد العمرية مفهوم خاص بوقت الترجمة فقط. فهي لا تضيف أي تكلفة أثناء التشغيل، ولا توجد إلا لتمكين فاحص الاستعارة من التحقق من سلامة الذاكرة.

الملكية والمدد العمرية معًا

تحدد الملكية الجهة التي تحرر القيمة، بينما تحدد المدد العمرية المدة التي يمكن أن تظل خلالها الاستعارات لهذه القيمة موجودة. وتتيحان معًا لـ Rust ضمان السلامة من دون جامع قمامة.

fn main() {
    let data = vec![1, 2, 3];
    let view = &data[0..2];
    println!("{:?}", view);
    // data still owns the vector; view just borrows part of it
    println!("{:?}", data);
}

سبب ظهور الأسماء في التواقيع

عندما تستقبل الدالة مراجع متعددة، قد لا يتمكن المصرّف أحيانًا من معرفة العلاقة بين مددها العمرية. عندئذ تضيف تعليقات المدد العمرية لتوضيح هذه العلاقات.

يتناول الدرس التالي هذه الصياغة.

الفائدة

بفضل المدد العمرية، لا يمكن ترجمة فئة كاملة من الأخطاء — مثل الاستخدام بعد التحرير، والمؤشرات المتدلية، وإبطال صلاحية المكررات. وتحصل على سرعة شبيهة بسرعة C مع سلامة الذاكرة.

النموذج الذهني

فكّر في المدة العمرية بوصفها تسمية للمدة التي تظل خلالها البيانات حية. وتحمل المرجعية القيد التالي: لا أكون صالحة إلا ما دام المصدر الذي أستعير منه حيًا. ويفرض فاحص الاستعارة هذا القيد.

تحقق سريع

اختبر مدى فهمك لسبب وجود المدد العمرية.

مراجعة

لقد تعلمت سبب وجود المدد العمرية:

  • يجب ألا تتجاوز المراجع مدة صلاحية البيانات التي تستعيرها
  • تمنع المدد العمرية المراجع المتدلية أثناء الترجمة
  • توجد في وقت الترجمة فقط، من دون تكلفة أثناء التشغيل
  • تعمل إلى جانب الملكية لتحقيق سلامة الذاكرة من دون جامع قمامة

الأسئلة الشائعة

هل درس «لماذا نستخدم أعمار الاقتراض» مجاني؟

نعم — نص درس «لماذا نستخدم أعمار الاقتراض» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «لماذا نستخدم أعمار الاقتراض»؟

منع المراجع المتدلية تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «لماذا نستخدم أعمار الاقتراض»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا نستخدم أعمار الاقتراض
  2. تعليقات أعمار الاقتراض
  3. أعمار الاقتراض في Structs
  4. قواعد الحذف
← العودة إلى Learn Rust Coding