· 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.
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 --releaseikili dosyayı üretiyor ve./install-mold.shkurulumu yapıyor; betikPREFIXveDESTDIRdeğ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-allocatorile 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=1ayarı sistem zstd'sine geçişi sağlıyor. - Test paketi artık
cargo testaltında çalışıyor veinstall-build-deps.shyerineinstall-test-deps.shkullanı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=mainyanlışlıkla-e ntry=mainolarak okunuyordu. - mold artık başlangıçta 8 GiB sanal adres alanı ayırmıyor; bu sayede
ulimit -vkı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-sectionsartık--initve--finiile adı geçen fonksiyonları atmıyor ve daha önce--dependency-file,--reproile 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
--defsymile paylaşımlı bir kütüphanede tanımlı bir sembole takma ad verilmesi ile--strip-allve--emit-relocsseç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