Linux için hızlı bir linker aracı, Wild
(github.com/davidlattimore)-
Wild linker
- Wild, yinelemeli geliştirme için çok hızlı linkleme hedefleyen bir araçtır.
- Artımlı linkleme henüz uygulanmış değil, ancak şu anda da oldukça hızlı performans gösteriyor.
- Prodüksiyon derlemelerinde GNU ld veya LLD gibi olgun linkleyicilerin kullanılması önerilir.
- Geliştirme sırasında hızlı derleme süreleri istiyorsanız Wild'ı deneyebilirsiniz.
- x86-64 Linux üzerinde geliştirme yapıyorsanız kullanılabilir; sorun yaşarsanız hata raporu göndermeniz önerilir.
-
Kurulum
- Önceden derlenmiş binary'yi kurmak için sürümler sayfasındaki komutu kopyalayıp kullanabilirsiniz.
wildbinary'sini yolunuza elle kopyalayabilirsiniz.- Kendiniz derleyip kurmak için
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wildkomutunu kullanın.
-
Varsayılan linker olarak kullanma
- Rust kodu derlemelerinde Wild'ı varsayılan linker olarak kullanmak için
~/.cargo/config.tomldosyasına ayar ekleyin.
- Rust kodu derlemelerinde Wild'ı varsayılan linker olarak kullanmak için
-
Soru-Cevap
- Neden bir linker daha?
- Mold zaten çok hızlı, ancak artımlı linklemeyi desteklemiyor. Wild ise artımlı linklemeyi hedefliyor.
- Rust ile yazıldığı için artımlı linklemenin karmaşıklığını çözebileceği umuluyor.
- Çalışan özellikler
- Şu anda desteklenen platform/mimari: Linux üzerinde x86-64
- Statik linklenmiş binary, dinamik linklenmiş binary ve paylaşılan nesne (
.sodosyaları) çıktısı üretebilir - Rust proc-macro'larıyla uyumluluğu doğrulandı
- crates.io üzerindeki popüler crate testlerini geçti
- Debug bilgisi desteği var
- Henüz desteklenmeyen özellikler
- Artımlı linkleme, x86-64 dışındaki mimari desteği, çeşitli linker flag'leri desteği, Mac ve Windows desteği vb.
- Neden bir linker daha?
-
Benchmark
- Wild'ın hedefi, artımlı linkleme sayesinde çok hızlı performans sunmaktır.
- Artımlı olmayan linklemede de mümkün olduğunca hızlı performans hedefleniyor.
- Benchmark sonuçlarına göre Wild, debug bilgisi olmadan çok hızlı performans gösteriyor.
- Debug bilgisi eklendiğinde performans bir miktar düşüyor.
-
Rust kodunu linkleme
cargo testkomutunu kullanarak crate'leri Wild ile derleyip test edebilirsiniz.- Clang derleyicisinin kurulu olması gerekir; GCC keyfi bir linker kullanımına izin vermez.
-
Katkı
- Wild'a nasıl katkı sağlayabileceğiniz hakkında bilgi için CONTRIBUTING.md dosyasına bakın.
-
Destek
- Bu projeye destek olursanız daha uzun süre tam zamanlı çalışılabilir.
-
Lisans
- Apache License, Version 2.0 veya MIT lisansından birini seçebilirsiniz.
1 yorum
Hacker News yorumları
mold lisansını AGPL'den MIT'ye çevirdikten sonra yeni bir hızlı linker ihtiyacı azalmış olsa da, bu projenin ortaya çıkması şaşırtıcı. Bazı durumlarda mold'dan 2 kat daha hızlı olması dikkat çekici
Daha önce bu projeye bakmıştım ama henüz prodüksiyona hazır görünmüyor. Bu yüzden hâlâ mold kullanıyorum
macOS kullanıcıları için Apple 1-2 yıl önce yeni bir linker çıkardı ve Rust ile kullanırken
config.tomldosyasına belirli bir ayar eklemek gerekiyorC/C++ derleyicilerinin link aşaması olmadan tüm programı tek bir birim olarak derlemesi ilginç olurdu. Harici kütüphanelerin çoğu zaten dinamik olarak linklendiği için, link sürecini kaldırmak sorun yaratmayabilir
2008'de Gold, 2015'te Lld, 2021'de mold derken hızlı linker'lara olan ilgi istikrarlı biçimde artıyor
Rust'ın popülerliği nedeniyle hızlı linker'lara ilgi arttı; Rust ikilileri link aşamasında çok zaman harcıyor. Bu sadece Rust'a özgü bir sorun değil, statik linkleme ve LLVM optimizasyonlarından kaynaklanıyor
John Levine'in "Linkers and Loaders" kitabı bu konuda iyi bir kaynak; birkaç yıl önce okuduğumda oldukça ilgi çekici bulmuştum
wild, mold ve ld performansını karşılaştırınca, iyi yapılandırılmış projelerde link süresinin büyük bir sorun olmadığı görülüyor
Performans karşılaştırmaları 2020 model bir System76 Lemur Pro dizüstünde çalıştırılmış; cihazda 4 çekirdek (8 iş parçacığı) ve 42 GB RAM var
Linker'ın ne olduğunu merak edenler de var
Linux çekirdeğini linkleyip linkleyemediğini soran bir soru vardı; bu, LLD için faydalı bir dönüm noktasıydı