deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

mold 3.0.0 yayınlandı: Rust ile yeniden yazılan yüksek hızlı linker, GNU ld uyumluluğuna odaklanıyor

mold 3.0.0, C++'tan Rust'a yeniden yazılan yüksek hızlı linkerın ilk sürümü. 2.42.1'in yerine birebir alternatif olan sürüm, mold'u Linux dağıtımlarının varsayılan linkerı yapmayı hedefleyen bir 3.x yol haritasını açıyor.

mold 3.0.0 yayınlandı: Rust ile yeniden yazılan yüksek hızlı linker, GNU ld uyumluluğuna odaklanıyor

Yüksek hızlı linker mold, 3.0.0 sürümüne ulaştı; bu sürüm tamamen Rust ile geliştirilen ilk sürüm ve C++ kod tabanının sonu. GitHub'da yayımlanan ve şu anda Hacker News'in ana sayfasında yer alan sürüm notlarına göre, 2.42.1 son C++ sürümüydü ve yeniden yazım çalışması zaten o sürümün notlarında duyurulmuştu.

Bakımcılar mold 3.0'ı 2.42.1'in birebir alternatifi olarak tanımlıyor: aynı komut satırı seçeneklerini kabul ediyor, aynı hedef mimarileri destekliyor ve bu sürümdeki hata düzeltmeleri dışında aynı çıktıyı üretiyor. Linker performansı önceki sürümle aynı seviyede. Uyumluluk iddiasını desteklemek için proje, test paketini desteklenen tüm hedeflerde çalıştırdığını, geniş bir gerçek dünya iş yükü ve seçenek kombinasyonu yelpazesinde linker çıktılarını karşılaştırdığını ve tüm Gentoo paketlerini derleyerek hiçbir geriye gidiş bulmadığını belirtiyor.

Bozuk girdilere karşı daha güvenli

Davranışsal değişikliklerden biri doğrudan dil değişiminden geliyor. C++ uygulaması, kendisine bozuk bir girdi dosyası verildiğinde bellek sınırlarının dışına okuma yapıp segmentation fault ile çakılabiliyordu. Rust sürümünde bu okumalar sınıf kontrollü olduğu için mold artık dokunmaması gereken belleğe erişmek yerine hatalı erişim noktasında panic ile duruyor.

Derleme sistemi Cargo'ya geçiyor

Kaynak koddan mold derleyenler için araç zinciri oldukça değişti:

  • mold artık CMake yerine Cargo ile derleniyor ve Rust 1.95 ya da üzeri ile bir C derleyicisi gerektiriyor. cargo build --release ikili dosyayı üretiyor ve ./install-mold.sh kurulumu yapıyor; betik PREFIX ve DESTDIR değerlerini kabul ediyor. Eski CMake seçenekleri kaldırıldı.
  • CMake değişkeni MOLD_TARGETS, Cargo features ile değiştirildi ve dağıtımların yine tüm hedefler için derleme yapması öneriliyor.
  • oneTBB bağımlılığı kaldırıldı. mold mimalloc 3.5.3'ü statik olarak link etmeye devam ediyor; --features system-allocator ile bu davranış devre dışı bırakılabilir. zlib mümkün olduğunda sistemdeki kullanılıyor, zstd ve BLAKE3 ise paketle birlikte geliyor. ZSTD_SYS_USE_PKG_CONFIG=1 ayarı sistem zstd'sine geçişi sağlıyor.
  • Test paketi artık cargo test altında çalışıyor ve install-build-deps.sh yerine install-test-deps.sh kullanılıyor.

Notlarda ayrıca mold'un kütüphaneleri $PREFIX/lib dışına kurulursa, mold -run komutunun mold-wrapper.so dosyasını bulabilmesi için hem derleme hem kurulum sırasında MOLD_LIBDIR ortam değişkeninin ayarlanması gerektiği uyarısı yapılıyor.

Hata düzeltmeleri ve uyumluluk temizliği

Sürüm uzun bir düzeltme listesi içeriyor. Öne çıkan birkaç madde:

  • Tek tire ile yazılan seçenekler artık GNU ld'nin yorumladığı şekilde ayrıştırılıyor; önceden -entry=main yanlışlıkla -e ntry=main olarak okunuyordu.
  • mold artık başlangıçta 8 GiB sanal adres alanı ayırmıyor; bu sayede ulimit -v kısıtlamaları altında da çalışabiliyor.
  • Aynı adı taşıyan ama farklı boyutlara sahip common sembolleri artık en büyük boyutu ve en katı hizalamayı alıyor; bu GNU ld ve lld davranışıyla uyumlu.
  • --gc-sections artık --init ve --fini ile adı geçen fonksiyonları atmıyor ve daha önce --dependency-file, --repro ile belirli COMDAT ve dinamik yer değiştirme durumlarında görülen belirsiz çıktılar artık deterministik.
  • Daha önce bozuk çıktıya veya çökmeye yol açan birçok hata durumu artık hata üretiyor; bunlara --defsym ile paylaşımlı bir kütüphanede tanımlı bir sembole takma ad verilmesi ile --strip-all ve --emit-relocs seçeneklerinin birlikte kullanılması örnek verilebilir.

Mimariye özgü çalışmalarda AArch64, ARM32 ve PPC32 üzerindeki range extension thunk hataları düzeltildi; bu hata büyük programlarda yanlış sıçrama adresleri üretiyordu ve örnek olarak ARM64 Chromium debug derlemesi gösteriliyor. Ayrıca AArch64 ve ARM32 için ek yer değiştirme türleri, LoongArch'ta extreme code model için TLSDESC desteği, statik linklenmiş PPC64 çalıştırılabilir dosyalarında IFUNC düzeltmeleri ile SH4 ve SPARC64 köşe durumları için düzeltmeler mevcut.

Varsayılan linker yolunda

Bu sürümün ötesinde mold 3.x serisinin açıklanan hedefi, özellikle linker script desteğinde GNU ld ile kalan uyumluluk boşluklarını kapatmak ve mold'u Linux dağıtımlarında varsayılan linker olarak benimsenmeye hazırlamak. Sürüm notları ayrıca bu döngüdeki sponsorlara, aralarında Cybozu, SAP, Mercedes-Benz Group ve Ahrefs'in de bulunduğu şirketlere teşekkür ediyor.

Neden önemli

Linkerlar derleme yığınının en altında yer alır ve bir linkerı değiştirmek, davranışı ve tüm tuhaflıklarıyla birlikte fiilen bir şartname işlevi gören GNU ld ile neredeyse kusursuz uyum gerektirir. mold 3.0, performans açısından kritik bir sistem aracının tam bir bellek güvenliği yeniden yazımının, ölçülebilir bir geriye gidiş olmadan gerçekleştirilebildiğini gösteriyor ve tüm Gentoo'yu derleme doğrulaması, dağıtım bakımcılarının aradığı türden bir kanıt. Rust'a geçiş ayrıca bir sınıf bellek bozulması hatasını temiz ve sınırlı panic'lere dönüştürüyor. Karşılığı ise operasyonel: paket hazırlayıcıları artık CMake'in yeterli olduğu yerde bir Rust araç zinciri ve Cargo tabanlı bir derleme sürecine ihtiyaç duyuyor. 3.x serisi linker script boşluklarını planlandığı gibi kapatırsa mold, varsayılan linker konumu için güvenilir bir aday haline geliyor ve bu da tüm dağıtımlarda link süreçlerini kısaltabilir.

  • #linker
  • #rust
  • #mold
  • #build-tools
  • #open-source

İlgili yazılar