Avatar ·

Quand et pourquoi utiliser l'attribut `#[inline]` en Rust ? Est-il vraiment nécessaire ?

Bonjour à tous ! Je suis débutant en Rust et j'essaie de comprendre les optimisations. J'ai lu qu'en C/C++, le mot-clé `inline` peut accélérer le code en remplaçant l'appel de fonction par son corps. En Rust, il existe aussi l'attribut `#[inline]`, mais je ne comprends pas complètement quand l'utiliser. J'ai écrit une fonction simple pour additionner deux nombres : ```rust fn add(a: i32, b: i32) -> i32 { a + b } ``` Et une autre qui l'appelle dans une boucle : ```rust fn sum_squares(n: i32) -> i32 { let mut sum = 0; for i in 0..n { sum += add(i, i); } sum } ``` Si j'ajoute `#[inline(always)]` à `add`, cela aura-t-il un sens ? Le compilateur ne le devine-t-il pas tout seul ? Ou, au contraire, `#[inline(never)]` peut-il être utile pour réduire la taille du binaire ? J'ai vu que dans la bibliothèque standard de Rust, certaines fonctions sont marquées `#[inline]`, mais pas toutes. Cela signifie qu'il faut le faire consciemment. Comment un développeur peut-il décider s'il doit ajouter `#[inline]` dans son code ? Existe-t-il des règles empiriques ou est-ce toujours une optimisation prématurée ?