Metsik linker 0.9

Vabastamine toimus Metsik linker 0.9.0 — uus suure jõudlusega linker, mis on kirjutatud Rustis. Väljalase on leitav GitHubist. 23 mai 2026 aastaProjekt on positsioneeritud linkerina iteratiivse arenduse kiirendamiseks: autorid soovivad lõppkokkuvõttes saavutada inkrementaalse linkimise, kuigi praeguses versioonis seda veel rakendatud pole. Koodi levitatakse topeltlitsentsi alusel. Apache 2.0 / MIT.

Wild 0.9 peamine muudatus on tugi Linkeri plugina API, liides, mis tutvustati Goldi linkeris ning mida toetavad ka GNU ld ja Mold. Wildi jaoks avab see tee linkeri plugin LTO — linkimisaja optimeerimine linkimisplugina kaudu. Arendajad väidavad konkreetselt, et see on kasulik peamiselt C, C++ ja segakoodiga projektide jaoks, samas kui puhtad Rusti projektid teostavad LTO-d tavaliselt sisemiselt. Selle funktsiooni toel on endiselt teadaolevaid probleeme ja linkimine plugina kaudu võib olla aeglane.

Märkimisväärne osa versioonis 0.9 tehtud tööst oli seotud ettevalmistustega Wildi üleandmiseks kaugemale. Linux/ELF. ELF-spetsiifiline loogika on viidud abstraktsioonidest väljapoole ja toe kallal on tööd alustatud. Mach-O и WebAssemblyNeed võimalused pole veel praktiliseks kasutamiseks valmis, kuid esimesed elemendid on juba ilmunud: Mach-O parsimine, sektsioonide ja segmentide töötlemine, sümbolitabel, koodisignatuur, FAT binaarfail, samuti esialgne tugi wasm-sektsioonidele, sümbolitele ja ümberpaigutustele.

Peamised muudatused Wild Linker 0.9-s:

  • Linkeri pluginate tugi. Lisatud linkeri pluginate API-de tugi, mis on vajalik linkeri pluginate LTO jaoks ja ühildub mõnede GCC/GNU ld/Mold ehitusskriptidega. Samuti parandati mõned pluginate tagasihelistamisega seotud probleemid, sh kogu arhiiv, ThinLTO, avatud failide piirang ja surnud koodi eemaldamine LTO ajal.

  • Linkeriskriptide toe oluline laiendamine. Rakendatud on PROVIDE ja PROVIDE_HIDDEN direktiivid, ASSERT parsimine ja täitmine, tugi MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, K ja M järelliidetele numbrilistes literaalides, loogilised, bitipõhised ja unaarsed operaatorid ning vastete leidmine sisendfailide nimede järgi. See lähendab Wildi ühilduvust keerukate linkiskriptidega, mida sageli leidub süsteemitarkvaras ja madala taseme projektides.

  • RISC-V, AArch64, x86-64 ja LoongArch64 täiustused. Lisatud RISC-V kõnede lõdvendamine, HI20 lõdvendamine, R_RISCV_ALIGN, vastuoluliste ISA laienduste kontrollimine, täiendavad AArch64 ümberpaigutused, ulatuse laiendamise lühikäsklused AArch64 jaoks, mitmete x86-64 ümberpaigutuste käsitlemine lõdvendustega ning ulatuse ja joondamise selgitused LoongArch64 jaoks.

  • Uued ühilduvusvalikud. Lisatud tugi järgmistele elementide: --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags ja tühikuta vorm -o/path.

  • Staatiliselt liikuvate objektide genereerimine. Lisatud tugi staatiliste ümberpaigutatavate objektide loomiseks – need on vahepealsed objektifailid, mis saavad edasises linkimises osaleda.

  • Jõudluse täiustused ilma "kiire" väljalaske peale keskendumata. Autorid märgivad selgesõnaliselt, et versioon 0.9 ei sisaldanud olulisi jõudluse parandusi, kuid ka halvenemist ei täheldatud. Lokaalsed optimeerimised hõlmavad kiiremat teed mitte-globaalsete vastete otsijatele versiooniskriptides, aatomioperatsioonide arvu vähendamist, sektsiooni- ja sümboliaadresside paralleelset arvutamist relaksatsiooniskaneerimise ajal ning juba lahendatud sektsioonide vähendatud uuesti töötlemist.

  • Paljud ühilduvusparandused. Parandatud nõrkade määratlemata sümbolite, .ctors/.dtors, RELRO, versiooniskriptide, SFrame'i, IFUNCi, --version/-v, määratlemata sümbolite vigade, hoiatuste, silumisülekandmiste, .eh_frame'i, SHT_SYMTAB_SHNDXi, dünaamilise objekti staatilise linkimise ja mitmete linkeriskriptidega stsenaariumide käsitlemine.

  • Dokumentatsioon ja projektijuhtimine. Lisatud on käitumisjuhend, LLM-i kasutuspoliitika, juhtimisdokumentatsioon, linkeriskriptide tugimaatriks, juhised -fuse-ld=wild kasutamiseks GCC 16.1-s ja installimine Brew kaudu. Samuti on repositoorium teisaldatud eraldi GitHubi organisatsiooni, wild-linker.

Praegu Metsik ametlikult keskendunud peamiselt Linux ja ELF. Projekti README failis on tugi x86-64, ARM64, RISC-V riscv64gc ja esialgne tugi LoongArch64 edasi Linux; oskab luua staatilisi binaarfaile, static-PIE-d, dünaamiliselt lingitud käivitatavaid faile ja .so-faile, töötab silumisteabe, GNU tööserveri ja mõnede linkeriskriptidega. Inkrementaalne linkimine, keerukamad linkeriskriptid, Mach-O ja Windows on praegu liigitatud realiseerimata või lõpetamata müügivõimalusteks.

Praktikas laiendab Wild 0.9 ühilduvust olemasoleva ehitusökosüsteemiga, hakkab laienema ELF-ist kaugemale ja lisab tuge stsenaariumidele, mis muudavad linkeri kasutamise suurtes C/C++ ja segaprojektides keeruliseks. Rusti arendajate jaoks on Wild endiselt huvitav potentsiaalse alusena tulevaseks inkrementaalseks linkimiseks ning süsteemiarendajate jaoks kui järjekordne kiire konkurent GNU ld-le, LLD-le ja Moldile.

Allikas: linux.org.ru

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster