Avatar ·

ما هي الأعمار غير المعجمية (non-lexical lifetimes) في Rust؟

مرحبًا أيها الزملاء! بدأت تعلم Rust مؤخرًا وواجهت مفهوم أعمار الحياة (lifetimes). يبدو أنني فهمت الأساسيات: المترجم يتحقق من أن المراجع ليست معلقة في الهواء، ويستخدم لهذا التعليقات التوضيحية مثل `'a`. لكني أصادف باستمرار مصطلح "الأعمار غير المعجمية" (NLL). بصراحة، من التوثيق الرسمي ليس واضحًا تمامًا لي كيف تختلف عن الأعمار "المعجمية" العادية. أنا معتاد على أن عمر المتغير يُحدد بنطاق رؤيته - الكتلة في الأقواس المعقوفة `{}`. على سبيل المثال: ```rust fn main() { let r; // ---------+-- 'a { // | let x = 5; // -+-- 'b | r = &x; // | | } // -+ | println!("{}", r); // | } // ---------+ ``` هنا كل شيء منطقي: `r` يشير إلى `x`، لكن `x` يعيش فقط داخل الكتلة، لذلك المترجم يشتكي. هذا هو العمر المعجمي. لكن ما هو إذن...