Rust
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.
Örnek çözümü göster
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"]);
}
Kendini test et
-
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)
- Daha hızlı derleme
- Hata ayıklamayı
- Çapraz derlemeyi
Cevabı göster
Farklı crate'lerdeki fonksiyonları birlikte optimize etmeyi (satır içi alma, ölü kod silme) — LTO olmadan her crate ayrı optimize edilir; bağımlılıklardaki küçük fonksiyonlar satır içine alınamayabilir.
-
Crate'ler arası optimizasyon
[profile.release]
____ = "fat"
Cevabı göster
[profile.release]
lto = "fat"
-
Ayar ve etkisi
- lto = "fat"
- Tam LTO
- codegen-units = 1
- Tek optimizasyon birimi
- panic = "abort"
- Daha küçük ikili
- opt-level = "z"
- Boyut odaklı
Sıradaki ders: Profiling