· kaynak Hacker News – Front Page (native)
Headstart, Rust crate'lerinin bağımlılık kontrolleri bitmeden derlemeye başlamasını sağlıyor: yüzde 54'e kadar hızlanma
Hacker News'in ana sayfasına çıkan bir proje, rustc ve cargo'ya yamalar uygulayarak bağımlı crate'lerin erken arayüz metaverisiyle başlamasını sağlıyor; temiz cargo check çalışmaları 16 çekirdekli makinelerde yüzde 54'e, cargo build ise yüzde 42'ye kadar hızlanıyor.
Headstart ne yapıyor
Hacker News'in ana sayfasına ulaşan headstart adlı proje, Rust derleyicisine ve Cargo'ya yamalar uygulayarak bir crate'in, bağımlı olduğu crate'lerin kontrolü tamamlanana kadar boşta beklemesini engelliyor. rustc, bir bağımlılığin imzaları doğrulandığı anda arayüz metaverisini yazıyor ve Cargo o noktada bağımlı crate'leri başlatıyor; böylece bağımlılığın fonksiyon gövdeleri kontrol edilirken aşağı akıştaki iş zaten yürüyor.
Hacker News girişi sonucu, derleme ve kontrollerin iki katına kadar hızlanması olarak niteledi. Projenin kendi ölçümlerine göre, 16 çekirdekli bir makinede iyileşmeler 13 gerçek projede temiz cargo check çalışmaları için yüzde 54'te, cargo build için yüzde 42'de zirve yapıyor ve hiçbir proje yavaşlamıyor.
Beklemenin gereksiz olmasının nedeni
Standart bir Rust derlemesinde her crate, başlayabilmek için tüm bağımlılıklarının fonksiyon gövdeleri dahil tamamen kontrol edilmesini bekler. Bu sıralama tip sisteminin gerektirdiğinden daha katıdır: bağımlı bir crate'i kontrol etmek için rustc'ın ihtiyacı olan yalnızca bağımlılığın arayüzüdür; bu arayüz, .rmeta dosyasında metaveri olarak saklanır, fonksiyonların içindeki kod değil.
Headstart her bağımlılığın analizini ikiye bölüyor. Arayüz yarısı tamamlanır tamamlanmaz erken bir metaveri dosyası yazılıyor ve bağımlılar başlıyor. cargo check için bunlar erken metaveriyle sonuna kadar tamamlanıyor. cargo build için analizlerini üzerinde tamamlıyorlar ancak kod üretiminden önce, bağımlılığın tam metaverisi ortaya çıkana kadar durakluyorlar; beklerken zamanlayıcı yuvalarını başka işlere bırakıyorlar.
İki bayrak, dokuz yama
Derleyici tarafında -Zearly-metadata altı yamayla geliyor. Yeni bir analysis_interfaces sorgusu analizi öğe arayüzleri ve fonksiyon gövdeleri olarak bölüyor; sürücü bu iki aşama arasına bir .early-rmeta dosyası yazıyor; crate yükleme erken metaveriyi kabul edip kod üretiminden önce tam sürümle değiştirebiliyor ve dosya yazılana kadar üreticinin tuttuğu bir kilitte bloke ediyor.
Cargo'nun -Zheadstart bayrağı üç yamadan oluşuyor: derleyici bayrağını her derlemeye iletiyor, erken metaveri bildirimi geldiğinde bağımlıları başlatıyor, duraklatılan işlerin yuvalarını yeniden atıyor ve bir crate'in çıktısını tüm bağımlılıklar başarıyla bitene kadar tutuyor. Yazar bütün seti, her biri kendi mesajına ve testlerine sahip, upstream pull request'ler olması amaçlanan bir commit serisi olarak sunuyor.
Ölçülen kazançlar ve sınırları
Ölçülen projeler arasında rust-analyzer, zed, bevy, lemmy ve polars var. Headstart'ın, aynı işin bir kısmını zaten örtüşen paralel ön uç (-Zthreads=8) ile birleştirilmesi ek yüzde 25 kazandırıyor.
Kazançlar geleneksel bir derlemenin hiç kullanmadığı boş çekirdeklere dayandığından, daha küçük makinelerde küçülüyor. 4 çekirdekte rust-analyzer'ın kontrolü yüzde 24, derlemesi yüzde 13–15 daha hızlı; codex-rs'nin kontrolü yüzde 14 iyileşiyor ve zaten geniş olan derlemelerde değişiklik görünmüyor.
Doğruluk ve maliyetler
Projenin belgelerine göre, bir fonksiyon gövdesindeki hata derlemeyi bugünküyle aynı tanılamalar ve çıkış durumuyla yine başarısız kılıyor; yalnızca ilerleme satırları ve JSON mesajlarının crate'ler arası sıralaması farklılaşabiliyor. Ödünler ise bir şey başarısız olduğunda çöpe giden aşağı akış işi, biraz daha geç ortaya çıkan hatalar ve daha yüksek tepe bellek kullanımı.
Doğrulama kapsamlı. Bir betik hata senaryolarını — temiz derleme, başarısız bir bağımlılık, başarısız bir binary — özellik açık ve kapalıyken check ve build üzerinden yeniden oynatıyor ve insan tarafından okunabilir çıktıyı, JSON çıktısını, çıkış durumunu ve derlenen binary'nin yazdırdıklarını karşılaştırıyor. Bir diğeri 53 rustc-perf derleme karşılaştırmasını -Zearly-metadata-verify seçeneğiyle her iki modda da derliyor ve her derlemenin özdeş tanılamalarla başarılı olmasını şart koşuyor. Bir duman testi çalışma alanı etkiyi doğrudan gösteriyor: kontrolü saniyeler süren, süresinin neredeyse tamamı gövdelerinde geçen bir kütüphane, bağımlısının yaklaşık 0,2 saniye içinde başlamasına izin veriyor.
Denemek
Bir kurulum betiği her iki aracı da checkout ediyor, yamalıyor ve derliyor. Özellik, yamalı binary'lerle cargo check -Zheadstart ile çağrı başına opt-in ya da CARGO_UNSTABLE_HEADSTART=true ortam değişkeniyle ya da .cargo/config.toml içinde bir [unstable] headstart = true satırıyla etkinleştiriliyor. Bu anahtarlardan biri olmadan yamalı cargo upstream gibi davranıyor; yazar bu durumun aynı binary'leri karşılaştırmalı ölçüm için adil bir taban çizgisi kıldığını söylüyor. Tasarım notları, tam ölçümler ve derleyici ile cargo ekiplerine yönelik bir hazırlık değerlendirmesi depodaki docs içinde tutuluyor.
Neden önemli
Derleme süresi Rust'ın en kalıcı şikâyetlerinden biri ve şimdiye kadarki rahatlamanın çoğu daha hızlı donanımdan, artımlı derlemeden veya çalışma alanı düzeninden geldi. Headstart, zamanlamayı araç zincirinin kendi içinde ele alıyor ve bunu — rustc ve cargo'ya karşı küçük, test edilmiş bir yama serisi biçiminde — kullanıcıların benimsemesi gereken paralel bir derleme sistemi olarak değil, upstream'a gönderilmeye uygun şekilde yapıyor. Kabul edilirse, her büyük çalışma alanı tek satır kod değiştirmeden yarar sağlar. Uyarılar gerçek: kazançlar boşta çekirdeklere bağlı, bu yüzden ağır yüklü CI koşucuları veya küçük dizüstü bilgisayarlar daha az fark görecek ve tepe bellek kullanımı artıyor. Derleyici ve cargo ekiplerine yönelik açık hazırlık notlarıyla bu, bir deneyden çok olası bir upstream özelliğinin önizlemesi gibi okunuyor.
- #rust
- #cargo
- #compilers
- #build-performance
- #open-source
İlgili yazılar
- Halide Compression, libwebp'den 3,19 kata kadar daha hızlı Rust tabanlı WebP çözücüsü wpd'yi yayımladı
- Valve'in MIT lisanslı GPU izleme görselleştiricisi gpuvis, Hacker News'te ilgi görüyor
- Geliştirici, CapCut'un BDVE önbellek şifrelemesini tersine mühendislikle çözdü ve açık kaynaklı bir kurtarma aracı yayınladı