CodeBlanks Logo Icon CodeBlanks

Özet - Derleyici içleri

HIR, MIR ve LLVM IR'ı birleştirerek bir derleme akışı şeması çıkarırsın.

Derleyici içleri özeti

Derleme hattı: belirteçler → AST (makrolar, ad çözümleme) → HIR (şekerler çözülür, tür denetimi, trait çözümü) → MIR (kontrol akış grafiği, ödünç denetimi, NLL, sabit hesaplama) → LLVM IR (optimizasyon) → makine kodu. Tür çıkarımı fonksiyon içinde kısıt birleştirme ile çalışır. Debug ve release derlemeleri farklı denetimler ve optimizasyonlar uygular; örneğin tamsayı taşma denetimi yalnızca debug'da varsayılan olarak açıktır.

Niyeti açık taşma

Tamsayı yöntemleri, taşma durumunda ne olacağını her derlemede aynı kılar:

let x: u8 = 255;
println!("{:?}", x.checked_add(1));      // None
println!("{}", x.wrapping_add(1));       // 0
println!("{}", x.saturating_add(1));     // 255
println!("{:?}", x.overflowing_add(1));  // (0, true)

Sayaçlar ve hash'ler için wrapping_*, sınırlı değerler için saturating_*, doğrulama için checked_* doğal seçimlerdir.

Uygulama Taşma yöntemleri

let x: u8 = 255; için checked_add(1) ({:?}), wrapping_add(1) ve saturating_add(1) sonuçlarını boşlukla tek satırda yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn main() {
    let x: u8 = 255;
    println!("{:?} {} {}", x.checked_add(1), x.wrapping_add(1), x.saturating_add(1));
}

Beklenen çıktı

None 0 255

Soru ve cevaplar

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

1 <code>255u8 + 1</code> release derlemesinde (varsayılan ayarlarla) ne olur?

  • Her zaman panic
  • 256 olur
  • Derleme hatası her zaman
  • Sarar ve 0 olur; debug'da ise panic verir Doğru cevap

Açıklama: Davranışın derlemeye göre değişmemesi için niyeti açıkça yaz: checked_add, wrapping_add, saturating_add. (Sabit ifadeyi derleyici zaten hata olarak yakalar.)

2 Sınırda kal

Soru
let x: u8 = 255;
let y = x.____(1);   // 255
Cevap
let x: u8 = 255;
let y = x.saturating_add(1);   // 255

Açıklama: saturating_add taşmada türün sınırında kalır.

3 Yöntem ve 255u8 + 1 sonucu

Kavram Anlamı
checked_add None
wrapping_add 0
saturating_add 255
overflowing_add (0, true)

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