Avatar ·

Wann und warum sollte man das Attribut `#[inline]` in Rust verwenden? Ist es überhaupt nötig?

Hallo zusammen! Ich bin neu in Rust und versuche, mich mit Optimierungen vertraut zu machen. Ich habe gelesen, dass das Schlüsselwort `inline` in C/C++ den Code beschleunigen kann, indem es den Funktionsaufruf durch den Funktionskörper ersetzt. In Rust gibt es ebenfalls das Attribut `#[inline]`, aber ich verstehe nicht ganz, wann ich es anwenden soll. Ich habe eine einfache Funktion zum Addieren zweier Zahlen geschrieben: ```rust fn add(a: i32, b: i32) -> i32 { a + b } ``` Und eine weitere, die sie in einer Schleife aufruft: ```rust fn sum_squares(n: i32) -> i32 { let mut sum = 0; for i in 0..n { sum += add(i, i); } sum } ``` Wenn ich `#[inline(always)]` zu `add` hinzufüge, wäre das sinnvoll? Würde der Compiler nicht selbst darauf kommen? Oder könnte `#[inline(never)]` im Gegenteil nützlich sein, um die Binary-Größe zu reduzieren? Ich habe gesehen, dass in der Standardbibliothek von Rust einige Funktionen mit `#[inline]` markiert sind, aber nicht alle. Das bedeutet, man sollte es bewusst einsetzen. Wie entscheidet ein Entwickler, ob er `#[inline]` in seinen Code einfügen sollte? Gibt es empirische Regeln oder ist das immer vorzeitige Optimierung?