Avatar ·

¿Cuándo y por qué usar el atributo `#[inline]` en Rust? ¿Es siquiera necesario?

¡Hola a todos! Soy nuevo en Rust y estoy tratando de entender las optimizaciones. Leí que en C/C++ la palabra clave `inline` puede acelerar el código reemplazando la llamada a la función con su cuerpo. En Rust también existe el atributo `#[inline]`, pero no termino de entender cuándo aplicarlo. Escribí una función simple para sumar dos números: ```rust fn add(a: i32, b: i32) -> i32 { a + b } ``` Y otra que la llama en un bucle: ```rust fn sum_squares(n: i32) -> i32 { let mut sum = 0; for i in 0..n { sum += add(i, i); } sum } ``` Si agrego `#[inline(always)]` a `add`, ¿tendría sentido? ¿El compilador no lo adivina por sí solo? O, por el contrario, ¿`#[inline(never)]` podría ser útil para reducir el tamaño del binario? Vi que en la biblioteca estándar de Rust algunas funciones están marcadas con `#[inline]`, pero no todas. Entonces, esto debe hacerse de manera consciente. ¿Cómo decide un desarrollador si vale la pena poner `#[inline]` en su código? ¿Existen reglas empíricas o esto siempre es una optimización prematura?