متى ولماذا نستخدم السمة `#[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]` إلى كوده؟ هل هناك قواعد تجريبية أم أن هذا دائماً تحسين سابق لأوانه؟