Avatar ·

متى ولماذا نستخدم السمة `#[inline]` في Rust؟ وهل هي ضرورية أصلاً؟

مرحباً بالجميع! أنا مبتدئ في Rust وأحاول فهم التحسينات. قرأت أن الكلمة المفتاحية `inline` في C/C++ يمكنها تسريع الكود عن طريق استبدال استدعاء الدالة بجسمها. في Rust أيضاً توجد السمة `#[inline]`، لكنني لا أفهم تماماً متى يجب استخدامها. كتبت دالة بسيطة لجمع رقمين: ```rust fn add(a: i32, b: i32) -> i32 { a + b } ``` ودالة أخرى تستدعيها في حلقة: ```rust fn sum_squares(n: i32) -> i32 { let mut sum = 0; for i in 0..n { sum += add(i, i); } sum } ``` إذا أضفت `#[inline(always)]` إلى `add`، هل سيكون لذلك معنى؟ ألن يقوم المحول البرمجي بذلك بنفسه؟ أم على العكس، هل يمكن أن يكون `#[inline(never)]` مفيداً لتقليل حجم الملف الثنائي؟ رأيت أن بعض الدوال في المكتبة القياسية لـ Rust مُعلَّمة بـ `#[inline]`، لكن ليس كلها. هذا يعني أن الأمر يحتاج إلى قرار واعٍ. كيف يمكن للمطور أن يقرر ما إذا كان يجب إضافة `#[inline]` إلى كوده؟ هل هناك قواعد تجريبية أم أن هذا دائماً تحسين سابق لأوانه؟