Avatar ·

Quando e por que usar o atributo `#[inline]` em Rust? Ele é realmente necessário?

Olá a todos! Sou novo em Rust e estou tentando entender as otimizações. Li que em C/C++ a palavra-chave `inline` pode acelerar o código, substituindo a chamada da função pelo seu corpo. Em Rust também existe o atributo `#[inline]`, mas não entendo completamente quando usá-lo. Escrevi uma função simples para somar dois números: ```rust fn add(a: i32, b: i32) -> i32 { a + b } ``` E outra que a chama em um loop: ```rust fn sum_squares(n: i32) -> i32 { let mut sum = 0; for i in 0..n { sum += add(i, i); } sum } ``` Se eu adicionar `#[inline(always)]` em `add`, isso fará sentido? O compilador não descobre sozinho? Ou, ao contrário, `#[inline(never)]` pode ser útil para reduzir o tamanho do binário? Vi que na biblioteca padrão do Rust algumas funções são marcadas com `#[inline]`, mas não todas. Isso significa que é algo a ser feito com consciência. Como um desenvolvedor decide se deve inserir `#[inline]` em seu código? Existem regras empíricas ou isso é sempre prematuro?