CodeBlanks Logo Icon CodeBlanks

Linker

Linker seçimi ve LTO ayarlarını öğrenirsin.

Linker

Derleyici her crate'i ayrı nesne dosyalarına çevirir; bağlayıcı onları ve kütüphaneleri tek bir ikili dosyada birleştirir. Bağlama süresi büyük projelerde önemli hale gelir; daha hızlı bağlayıcılar (lld, mold) kullanılabilir. Release profilindeki ayarlar optimizasyonun kapsamını belirler:

[profile.release]
lto = "fat"          # crate'ler arası satır içi alma ve ölü kod silme
codegen-units = 1    # tek birim: daha iyi optimizasyon, daha yavaş derleme
panic = "abort"      # geri sarma tabloları yok: daha küçük ikili
strip = true         # sembolleri sil

lto = "thin", tam LTO'nun kazancının çoğunu çok daha kısa sürede verir.

Ayarları ölçerek seç

Her ayar bir ödünleşimdir: hız, boyut ve derleme süresi. Boyut için opt-level = "z", hız için opt-level = 3; dağıtımdan önce farklı profiller denenip ölçülmelidir. Özel profiller tanımlanabilir:

[profile.dagitim]
inherits = "release"
lto = "fat"
codegen-units = 1

$ cargo build --profile dagitim

Profil dosyası basit bir anahtar = değer biçimidir; araçlar onu okuyup öneri üretebilir.

Uygulama Profil oku

"lto = \"fat\"\ncodegen-units = 1\nopt-level = 3" metnini satır satır oku, her satırı split_once('=') ile böl, anahtar ve değerleri trim edip tırnaklardan arındırarak bir BTreeMap'e koy. Ayar sayısını ve lto değerini boşlukla yazdır.

Başlangıç kodu

main.rs
use std::collections::BTreeMap;

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
use std::collections::BTreeMap;

fn main() {
    let metin = "lto = \"fat\"\ncodegen-units = 1\nopt-level = 3";
    let mut ayarlar = BTreeMap::new();
    for s in metin.lines() {
        if let Some((a, d)) = s.split_once('=') {
            ayarlar.insert(a.trim().to_string(), d.trim().trim_matches('"').to_string());
        }
    }
    println!("{} {}", ayarlar.len(), ayarlar["lto"]);
}

Beklenen çıktı

3 fat

Soru ve cevaplar

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

1 LTO (link-time optimization) neyi mümkün kılar?

  • Farklı crate'lerdeki fonksiyonları birlikte optimize etmeyi (satır içi alma, ölü kod silme) Doğru cevap
  • Daha hızlı derleme
  • Hata ayıklamayı
  • Çapraz derlemeyi

Açıklama: LTO olmadan her crate ayrı optimize edilir; bağımlılıklardaki küçük fonksiyonlar satır içine alınamayabilir.

2 Crate'ler arası optimizasyon

Soru
[profile.release]
____ = "fat"
Cevap
[profile.release]
lto = "fat"

Açıklama: lto bağlama anı optimizasyonunu açar.

3 Ayar ve etkisi

Kavram Anlamı
lto = "fat" Tam LTO
codegen-units = 1 Tek optimizasyon birimi
panic = "abort" Daha küçük ikili
opt-level = "z" Boyut odaklı

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