Abstraction maliyeti
- Rust kursu
- Uzman
- Ders 13/46
- 4 dk
Abstraction'ın maliyetini ölçmeyi öğrenirsin.
Soyutlama maliyeti
Rust'ın tasarım ilkesi, C++'tan devralınan sıfır maliyetli soyutlamadır: "Kullanmadığın şeyin bedelini ödemezsin; kullandığını da elle daha iyi yazamazsın." Yineleyiciler, closure'lar, generic'ler ve Option gibi soyutlamalar derlendikten sonra elle yazılmış döngüyle aynı makine koduna dönüşür:
// soyut
let a: u32 = (1..=10).filter(|n| n % 2 == 0).sum();
// elle
let mut b = 0;
let mut i = 1;
while i <= 10 {
if i % 2 == 0 { b += i; }
i += 1;
}Release derlemede iki sürüm genellikle aynı ya da neredeyse aynı assembly üretir.
Ölçmek
İddiaları ölçerek doğrula. criterion crate'i istatistiksel benchmark yapar; assembly'yi görmek için Compiler Explorer (godbolt.org) ya da cargo asm kullanılır:
// benches/toplam.rs (criterion)
c.bench_function("yineleyici", |b| {
b.iter(|| (1..=black_box(1000u32)).filter(|n| n % 2 == 0).sum::<u32>())
});Sıfır maliyet her soyutlama için geçerli değildir: Box<dyn Trait>, Rc, RefCell ve Mutex bilinçli olarak seçilen, gerçek maliyeti olan araçlardır.
Uygulama İki yol, aynı sonuç
1'den 10'a kadar çift sayıların toplamını önce yineleyici zinciriyle, sonra while döngüsüyle hesapla. İki sonucu boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let a: u32 = (1..=10).filter(|n| n % 2 == 0).sum();
let mut b = 0;
let mut i = 1;
while i <= 10 {
if i % 2 == 0 {
b += i;
}
i += 1;
}
println!("{} {}", a, b);
}Beklenen çıktı
30 30
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sıfır maliyet iddiası hangi derleme için geçerlidir?
- Optimizasyonlu (release) derleme Doğru cevap
- Debug derleme
- Her ikisi eşit
- Hiçbiri
Açıklama: Debug derlemede satır içi alma yapılmaz; soyutlamalar gerçekten fonksiyon çağrısı olarak kalır ve yavaştır.
2 Soyut toplam
let a: u32 = (1..=10).____(|n| n % 2 == 0).sum();
let a: u32 = (1..=10).filter(|n| n % 2 == 0).sum();
Açıklama: filter çift sayıları seçer; sum onları toplar.
3 Araç ve maliyeti
| Kavram | Anlamı |
|---|---|
Yineleyici zinciri |
Sıfır maliyet |
Generic fonksiyon |
Sıfır (kod çoğalır) |
Box<dyn Trait> |
Dolaylı çağrı |
RefCell |
Çalışma anı denetimi |