Wild Linker 0.9

Rilasciato Wild Linker 0.9.0 — un nuovo linker ad alte prestazioni scritto in Rust. La release è disponibile su GitHub. anni 23 maggio 2026Il progetto si propone come un sistema di collegamento per accelerare lo sviluppo iterativo: gli autori puntano a un collegamento incrementale, sebbene non sia ancora implementato nella versione attuale. Il codice è distribuito con una doppia licenza. Apache 2.0 / MIT.

La principale novità di Wild 0.9 è il supporto API del plugin Linker, un'interfaccia introdotta nel linker Gold e supportata anche da GNU ld e Mold. Per Wild, questo apre la strada a linker-plugin LTO — Ottimizzazioni in fase di collegamento tramite un plugin del linker. Gli sviluppatori specificano che questa funzionalità è utile principalmente per progetti in C, C++ e con codice misto, mentre i progetti in puro Rust in genere eseguono l'ottimizzazione in fase di collegamento internamente. Il supporto per questa funzionalità presenta ancora problemi noti e il collegamento tramite il plugin può risultare lento.

Una parte significativa del lavoro in 0.9 è stata correlata ai preparativi per il trasferimento di Wild oltre Linux/ELF. La logica specifica di ELF è stata spostata al di fuori delle astrazioni e sono iniziati i lavori di supporto. Mach-O и WebAssemblyQueste funzionalità non sono ancora pronte per l'uso pratico, ma i primi elementi sono già apparsi: analisi sintattica Mach-O, elaborazione di sezioni e segmenti, tabella dei simboli, firma del codice, fat binary, nonché il supporto iniziale per sezioni wasm, simboli e rilocazioni.

Principali novità di Wild Linker 0.9:

  • Supporto per i plugin di collegamento. Aggiunto il supporto per le API del plugin del linker, necessario per il linker-plugin LTO e per la compatibilità con alcuni script di compilazione GCC/GNU ld/Mold. Sono stati inoltre risolti alcuni problemi relativi alle callback del plugin, tra cui whole-archive, ThinLTO, il limite di file aperti e la rimozione del codice morto durante l'LTO.

  • Ampliamento significativo del supporto per gli script del linker. Sono state implementate le direttive PROVIDE e PROVIDE_HIDDEN, l'analisi e l'esecuzione di ASSERT, il supporto per MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, i suffissi K e M nei letterali numerici, gli operatori logici, bit a bit e unari e la corrispondenza tramite i nomi dei file di input. Questo avvicina Wild alla compatibilità con gli script di collegamento complessi spesso presenti nei software di sistema e nei progetti di basso livello.

  • Miglioramenti per RISC-V, AArch64, x86-64 e LoongArch64. Aggiunte le funzionalità di rilassamento delle chiamate RISC-V, HI20, R_RISCV_ALIGN, il controllo di estensioni ISA in conflitto, ulteriori rilocazioni AArch64, thunk di estensione di intervallo per AArch64, la gestione di diverse rilocazioni x86-64 con relative funzionalità di rilassamento e chiarimenti su intervallo e allineamento per LoongArch64.

  • Nuove opzioni di compatibilità. Aggiunto il supporto per --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags e la forma senza spazi -o/path.

  • Generazione di oggetti in movimento statico. Aggiunto il supporto per la creazione di file statici rilocabili, ovvero file oggetto intermedi che possono comunque partecipare a ulteriori processi di collegamento.

  • Miglioramenti delle prestazioni senza concentrarsi su un rilascio "rapido". Gli autori notano esplicitamente che la versione 0.9 non ha introdotto miglioramenti significativi delle prestazioni, ma non si è verificato nemmeno un peggioramento. Le ottimizzazioni locali includono un percorso rapido per i matcher non globali negli script di versione, una riduzione del numero di operazioni atomiche, il calcolo parallelo degli indirizzi di sezione e simbolo durante le scansioni di rilassamento e una riduzione della rielaborazione delle sezioni già risolte.

  • Numerose correzioni di compatibilità. Gestione corretta dei simboli deboli non definiti, .ctors/.dtors, RELRO, script di versione, SFrame, IFUNC, --version/-v, errori di simboli non definiti, avvisi, rilocazioni di debug, .eh_frame, SHT_SYMTAB_SHNDX, collegamento statico di oggetti dinamici e una serie di scenari con script del linker.

  • Gestione della documentazione e del progetto. Sono stati aggiunti un codice di condotta, una politica di utilizzo di LLM, la documentazione sulla governance, una matrice di supporto per gli script del linker, istruzioni per l'utilizzo di -fuse-ld=wild con GCC 16.1 e l'installazione tramite Brew. Il repository è stato inoltre spostato in un'organizzazione GitHub separata, wild-linker.

Al momento, Selvaggio ufficialmente incentrato principalmente su Linux e ELF. Il README del progetto dichiara il supporto x86-64, ARM64, RISC-V riscv64gc e supporto iniziale LoongArch64 su Linux; può creare binari statici, static-PIE, eseguibili collegati dinamicamente e file .so, funziona con informazioni di debug, GNU jobserver e alcuni script del linker. Collegamento incrementale, script del linker più complessi, Mach-O e Windows sono attualmente classificate come opportunità non realizzate o incompiute.

In termini pratici, Wild 0.9 amplia la compatibilità con l'ecosistema di build esistente, inizia a estendersi oltre ELF e aggiunge il supporto per scenari che rendono difficile l'utilizzo del linker in progetti C/C++ e misti di grandi dimensioni. Per gli sviluppatori Rust, Wild rimane interessante come potenziale base per il collegamento incrementale futuro, e per gli sviluppatori di sistemi, come un altro valido concorrente di GNU ld, LLD e Mold.

Fonte: linux.org.ru

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster