CodeBlanks Logo Icon CodeBlanks

Özet - Zero-cost abstraction

Monomorphization, fusion ve inline'ı birleştirerek bir performans karşılaştırması yazarsın.

Sıfır maliyet özeti

Yineleyiciler, closure'lar ve generic'ler release derlemede elle yazılmış koda dönüşür. Monomorfizasyon hızlıdır ama kod şişirir; iç fonksiyon deseni ya da dyn bunu azaltır. Bağdaştırıcı zincirleri tek bir döngüye kaynaşır; ortadaki gereksiz collect bunu bozar. #[inline], #[cold] ipuçlarıdır. Sınır denetimleri yineleyici, zip ve öne alınmış assert ile kalkar. Her iddia ölçülmeli: criterion, godbolt, profil.

İki çağrı biçimi

Aynı closure iki yolla verilebilir:

fn uygula_generic<F: Fn(i32) -> i32>(f: F, n: i32) -> i32 {
    f(n)     // F her closure için ayrı derlenir, satır içi alınır
}

fn uygula_dyn(f: &dyn Fn(i32) -> i32, n: i32) -> i32 {
    f(n)     // tek kopya, vtable üzerinden çağrı
}

Uygulama İki çağrı

Yukarıdaki uygula_generic ve uygula_dyn fonksiyonlarını yaz. |x| x + 1 closure'ını 41 ile ikisine de ver ve sonuçları boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn uygula_generic<F: Fn(i32) -> i32>(f: F, n: i32) -> i32 {
    f(n)
}

fn uygula_dyn(f: &dyn Fn(i32) -> i32, n: i32) -> i32 {
    f(n)
}

fn main() {
    let artir = |x| x + 1;
    println!("{} {}", uygula_generic(artir, 41), uygula_dyn(&artir, 41));
}

Beklenen çıktı

42 42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Generic closure parametresi ile <code>&amp;dyn Fn</code> arasındaki temel fark nedir?

  • Fark yok
  • dyn daha hızlıdır
  • Generic heap ayırır
  • Generic satır içi alınır; dyn bir vtable çağrısıdır ama tek kopya derlenir Doğru cevap

Açıklama: Sıcak döngüde generic, nadir çağrılan geri çağırmalarda dyn genellikle iyi bir seçimdir.

2 Dinamik closure

Soru
fn uygula_dyn(f: &____ Fn(i32) -> i32, n: i32) -> i32 {
    f(n)
}
Cevap
fn uygula_dyn(f: &dyn Fn(i32) -> i32, n: i32) -> i32 {
    f(n)
}

Açıklama: &dyn Fn tek bir derlenmiş kopya ile çalışır.

3 Grubun özeti

Kavram Anlamı
Yineleyici Döngüyle aynı kod
Monomorfizasyon Kod şişmesi
#[cold] Nadir yol
zip Denetimsiz eşleme

Uzman bölümündeki tüm dersler