#[inline]
- Rust kursu
- Uzman
- Ders 16/46
- 4 dk
#[inline] attribute'unu ve etkilerini öğrenirsin.
#[inline]
Satır içi alma (inlining), çağrıyı fonksiyon gövdesiyle değiştirir; çağrı maliyeti kalkar ve sonraki optimizasyonların yolu açılır. Derleyici bunu crate içinde kendisi karar verir. Öznitelikler ipucu verir:
#[inline] // crate dışında da satır içi alınabilsin
pub fn kare(x: i32) -> i32 { x * x }
#[inline(always)] // güçlü istek (garanti değil)
fn sicak(x: u8) -> u8 { x ^ 0x55 }
#[inline(never)] // profilde ayrı görünsün, kod küçük kalsın
fn soguk_yol() { .. }Generic fonksiyonlar zaten her crate'te yeniden derlendiği için onlara #[inline] gerekmez.
Sıcak ve soğuk yollar
Nadiren çalışan hata yollarını ayrı bir fonksiyona çıkarıp #[cold] ve #[inline(never)] ile işaretlemek, sık çalışan yolu küçük ve hızlı tutar:
#[cold]
#[inline(never)]
fn tasma_hatasi(i: usize) -> ! {
panic!("indeks {i} sınır dışında")
}
fn al(v: &[u32], i: usize) -> u32 {
if i >= v.len() { tasma_hatasi(i) }
v[i]
}! (never türü) fonksiyonun hiç dönmediğini söyler.
Uygulama Satır içi ipuçları
#[inline] fn kare(x: i32) -> i32 ve #[inline(never)] fn kup(x: i32) -> i32 yaz. kare(3) + kup(2) sonucunu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
#[inline]
fn kare(x: i32) -> i32 {
x * x
}
#[inline(never)]
fn kup(x: i32) -> i32 {
x * x * x
}
fn main() {
println!("{}", kare(3) + kup(2));
}Beklenen çıktı
17
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Her fonksiyona <code>#[inline(always)]</code> eklemek neden kötü bir fikirdir?
- Güvensizdir
- Kod büyür, talimat önbelleği taşar ve program yavaşlayabilir Doğru cevap
- Derlenmez
- Bir etkisi yoktur
Açıklama: Satır içi alma bir ödünleşimdir; derleyicinin sezgileri çoğu zaman iyidir. Profil göstermeden zorlama.
2 Satır içi alma ipucu
#[____]
pub fn kare(x: i32) -> i32 {
x * x
}
#[inline]
pub fn kare(x: i32) -> i32 {
x * x
}
Açıklama: #[inline], fonksiyonun crate dışında da satır içi alınabilmesini sağlar.
3 Öznitelik ve amacı
| Kavram | Anlamı |
|---|---|
#[inline] |
Crate dışı satır içi |
#[inline(always)] |
Güçlü istek |
#[inline(never)] |
Asla satır içi |
#[cold] |
Nadir yol |