Avatar ·

لماذا يجب تحديد زمن الحياة (lifetimes) بشكل صريح في Rust وكيف يعمل ذلك؟

لقد بدأت للتو في تعلم Rust وواجهت مفهوم زمن الحياة (lifetimes). بصراحة، لا أفهم لماذا يجب تحديدها بشكل صريح. في لغات أخرى، مثل C++ أو Java، تعمل المراجع والمؤشرات دون تعليقات إضافية. لماذا يجبرني Rust على كتابة `<'a>` و `&'a mut T`؟ إليك مثال يربكني. أريد كتابة دالة تُرجع مرجعًا إلى عنصر مصفوفة حسب الفهرس: ```rust fn get_element(arr: &[i32], index: usize) -> &i32 { &arr[index] } ``` يقول المترجم: "missing lifetime specifier". لماذا لا يستطيع اكتشاف ذلك بنفسه؟ أنا أمرر مرجعًا إلى المصفوفة وأُعيد مرجعًا إلى عنصرها. من الواضح أن زمن حياة المرجع المُعاد يجب أن يتطابق مع زمن حياة المصفوفة المدخلة. أو مثال آخر. أريد تخزين مرجع إلى سلسلة نصية في هيكل: ```rust struct Person { name: &str, } ``` مرة أخرى خطأ: "missing lifetime specifier". لماذا لا يستطيع Rust استنتاج تلقائيًا أن المرجع في الهيكل يجب أن يعيش