Linker sălbatic 0.9

Eliberată Linker sălbatic 0.9.0 — un nou linker de înaltă performanță scris în Rust. Versiunea este listată pe GitHub. 23 luna mai a anului 2026Proiectul este poziționat ca un linker pentru accelerarea dezvoltării iterative: autorii doresc în cele din urmă să realizeze linking incremental, deși acest lucru nu este încă implementat în versiunea actuală. Codul este distribuit sub o licență duală. Apache 2.0 / MIT.

Principala schimbare din Wild 0.9 este suportul API-ul pluginului Linker, o interfață introdusă în linker-ul Gold și suportată și de GNU ld și Mold. Pentru Wild, aceasta deschide calea către plugin-ul linker LTO — optimizări ale timpului de conectare prin intermediul unui plugin de linker. Dezvoltatorii afirmă în mod specific că acest lucru este util în principal pentru proiectele C, C++ și cu cod mixt, în timp ce proiectele Rust pure efectuează de obicei LTO intern. Suportul pentru această funcție are încă probleme cunoscute, iar conectarea prin intermediul pluginului poate fi lentă.

O parte semnificativă a lucrărilor din 0.9 a fost legată de pregătirile pentru transferul Wild dincolo de Linux/ELF. Logica specifică ELF a fost mutată în afara abstracțiunilor și s-a început lucrul la suport. Mach-O и WebAssemblyAceste capabilități nu sunt încă gata pentru utilizare practică, dar primele elemente au apărut deja: parsarea Mach-O, procesarea secțiunilor și segmentelor, tabelul de simboluri, semnătura de cod, binarul fat, precum și suport inițial pentru secțiuni, simboluri și relocări WASM.

Schimbări cheie în Wild Linker 0.9:

  • Suport pentru pluginuri de linkere. S-a adăugat suport pentru API-urile pluginurilor linker, necesar pentru LTO-ul linker-plugin și compatibilitate cu unele scripturi de compilare GCC/GNU ld/Mold. De asemenea, au fost remediate unele probleme legate de apelurile inverse ale pluginurilor, inclusiv arhiva completă, ThinLTO, limita de fișiere deschise și eliminarea codului mort în timpul LTO.

  • Extindere majoră a suportului pentru scripturi de linker. Sunt implementate directivele PROVIDE și PROVIDE_HIDDEN, analiza și execuția ASSERT, suport pentru sufixele MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, K și M în literalii numerici, operatori logici, bit la bit și unari, precum și potrivirea după numele fișierelor de intrare. Acest lucru aduce Wild mai aproape de compatibilitate cu scripturile complexe de link-uri întâlnite adesea în software-ul de sistem și proiectele de nivel scăzut.

  • Îmbunătățiri pentru RISC-V, AArch64, x86-64 și LoongArch64. Adăugată relaxarea apelurilor RISC-V, relaxarea HI20, R_RISCV_ALIGN, verificarea extensiilor ISA conflictuale, relocări AArch64 suplimentare, thunk-uri de extensie de interval pentru AArch64, gestionarea unui număr de relocări x86-64 cu relaxări și clarificări privind intervalul și alinierea pentru LoongArch64.

  • Noi opțiuni de compatibilitate. A fost adăugat suport pentru --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags și forma fără spațiu -o/path.

  • Generarea de obiecte în mișcare statică. S-a adăugat suport pentru crearea de fișiere obiect statice relocabile - fișiere obiect intermediare care pot participa în continuare la legături ulterioare.

  • Îmbunătățiri de performanță fără a se concentra pe o lansare „rapidă”. Autorii menționează în mod explicit că versiunea 0.9 nu a inclus nicio îmbunătățire majoră a performanței, dar nici nu a existat nicio degradare. Optimizările locale includ o cale rapidă pentru potrivirile non-globale în scripturile de versiune, o reducere a numărului de operații atomice, calcularea paralelă a adreselor de secțiuni și simboluri în timpul scanărilor de relaxare și o reprocesare redusă a secțiunilor deja rezolvate.

  • Multe corecții de compatibilitate. S-a remediat gestionarea simbolurilor nedefinite slabe, a fișierelor .ctors/.dtors, RELRO, a scripturilor de versiune, a fișierelor SFrame, IFUNC, --version/-v, a erorilor de simboluri nedefinite, avertismentelor, relocărilor de depanare, a fișierelor .eh_frame, SHT_SYMTAB_SHNDX, a legăturilor statice ale obiectelor dinamice și a mai multor scenarii cu scripturi de linker.

  • Documentație și management de proiect. Au fost adăugate un cod de conduită, o politică de utilizare LLM, documentație de guvernanță, o matrice de suport pentru scripturile linker, instrucțiuni pentru utilizarea -fuse-ld=wild cu GCC 16.1 și instalarea prin Brew. Depozitul a fost, de asemenea, mutat într-o organizație GitHub separată, wild-linker.

În momentul de față, Sălbatic oficial concentrat în principal pe Linux și ELF. Stările README ale proiectului acceptă x86-64, ARM64, RISC-V riscv64gc și sprijin inițial LoongArch64 pe Linux; poate construi binare statice, static-PIE, executabile legate dinamic și fișiere .so, funcționează cu informații de depanare, GNU jobserver și unele scripturi de linker. Legături incrementale, scripturi de linker mai complexe, Mach-O și Windows sunt clasificate în prezent ca oportunități nerealizate sau neterminate.

În termeni practici, Wild 0.9 extinde compatibilitatea cu ecosistemul de compilare existent, începe să se extindă dincolo de ELF și adaugă suport pentru scenarii care fac linker-ul dificil de utilizat în proiecte C/C++ mari și mixte. Pentru dezvoltatorii Rust, Wild rămâne interesant ca o bază potențială pentru link-uri incrementale viitoare, iar pentru dezvoltatorii de sisteme, ca un alt concurent rapid pentru GNU ld, LLD și Mold.

Sursa: linux.org.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster