Villi linkkari 0.9

Julkaistu Villi linkkari 0.9.0 — uusi tehokas linkitin, joka on kirjoitettu Rust-kielellä. Julkaisu on lueteltu GitHubissa. 23 Toukokuu 2026 vuosiProjekti on asemoitu linkittäjäksi iteratiivisen kehityksen nopeuttamiseksi: kirjoittajat haluavat lopulta saavuttaa inkrementaalisen linkityksen, vaikka sitä ei ole vielä toteutettu nykyisessä versiossa. Koodi jaetaan kaksoislisenssillä. Apache 2.0 / MIT.

Wild 0.9:n tärkein muutos on tuki Linker-laajennuksen API, Gold-linkitysohjelmassa esitelty käyttöliittymä, jota tukevat myös GNU ld ja Mold. Wildille tämä avaa tien linker-plugin LTO — linkitysajan optimoinnit linkityslaajennuksen kautta. Kehittäjät toteavat erityisesti, että tämä on hyödyllistä ensisijaisesti C-, C++- ja sekakoodiprojekteissa, kun taas puhtaasti Rust-projektit suorittavat tyypillisesti LTO:n sisäisesti. Tämän ominaisuuden tuessa on edelleen tunnettuja ongelmia, ja linkityslaajennuksen kautta voi olla hidasta.

Merkittävä osa versiossa 0.9 tehdystä työstä liittyi Wildin siirron valmisteluihin pidemmälle kuin Linux/ELF. ELF-kohtainen logiikka on siirretty abstraktioiden ulkopuolelle, ja tuen kehittäminen on aloitettu. Mach-O и WebAssemblyNämä ominaisuudet eivät ole vielä valmiita käytännön käyttöön, mutta ensimmäiset elementit ovat jo ilmestyneet: Mach-O-jäsennys, osioiden ja segmenttien käsittely, symbolitaulukko, koodin allekirjoitus, FAT-binääritiedosto sekä alustava tuki wasm-osioille, symboleille ja uudelleensijoituksille.

Tärkeimmät muutokset Wild Linker 0.9:ssä:

  • Tuki linkityslaajennuksille. Lisätty tuki linker-plugin-API-rajapinnoille, mikä on välttämätöntä linker-plugin-LTO:lle ja yhteensopivuudelle joidenkin GCC/GNU ld/Mold-koontikomentosarjojen kanssa. Korjattu myös joitakin plugin-kutsuihin liittyviä ongelmia, kuten koko arkisto, ThinLTO, avointen tiedostojen rajoitus ja kuolleen koodin poisto LTO:n aikana.

  • Linkitysskriptien tuen merkittävä laajennus. PROVIDE- ja PROVIDE_HIDDEN-direktiivit, ASSERT-jäsennys ja -suoritus, tuki MEMORY-, ORIGIN-, LENGTH-, LOADADDR-, ALIGNOF-, SEGMENT_START-, K- ja M-päätteille numeerisissa literaaleissa, loogisille, bittikohtaisille ja unaarisille operaattoreille sekä syöttötiedostojen nimien mukainen yhteensopivuus on toteutettu. Tämä tuo Wildin lähemmäksi yhteensopivuutta monimutkaisten linkkiskriptien kanssa, joita usein löytyy järjestelmäohjelmistoista ja matalan tason projekteista.

  • Parannuksia RISC-V:lle, AArch64:lle, x86-64:lle ja LoongArch64:lle. Lisätty RISC-V-kutsujen relaksaatio, HI20-relaksaatio, R_RISCV_ALIGN, ristiriitaisten ISA-laajennusten tarkistus, lisää AArch64-siirtoja, AArch64:n aluelaajennus-thunkeja, useiden x86-64-siirtojen käsittely relaksaatioilla sekä alue- ja kohdistusselvennyksiä LoongArch64:lle.

  • Uudet yhteensopivuusvaihtoehdot. Lisätty tuki valitsimille --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 välilyönnittömälle muodolle -o/path.

  • Staattisesti liikkuvien kohteiden generointi. Lisätty tuki staattisten uudelleensijoitettavien tiedostojen luomiselle — välivaiheen objektitiedostoille, jotka voivat edelleen osallistua jatkolinkitykseen.

  • Suorituskyvyn parannuksia keskittymättä "nopeaan" julkaisuun. Kirjoittajat huomauttavat nimenomaisesti, että versio 0.9 ei sisältänyt merkittäviä suorituskyvyn parannuksia, mutta ei myöskään heikkenemistä. Paikallisiin optimointeihin kuuluvat nopea polku ei-globaaleille yhteensovittimille versioskripteissä, atomioperaatioiden määrän vähentäminen, osio- ja symboliosoitteiden rinnakkainen laskenta relaksaatioskannausten aikana ja jo ratkaistujen osioiden uudelleenkäsittelyn vähentäminen.

  • Useita yhteensopivuuskorjauksia. Korjattu heikkojen määrittelemättömien symbolien, .ctors/.dtors-tiedostojen, RELRO-tiedostojen, versioskriptien, SFrame-tiedostojen, IFUNC-tiedostojen, --version/-v-valitsimien, määrittelemättömien symbolien virheiden, varoitusten, virheenkorjaussiirtojen, .eh_frame-tiedostojen, SHT_SYMTAB_SHNDX-tiedostojen, dynaamisen objektin staattisen linkityksen ja useiden linkitysskriptejä käyttävien skenaarioiden käsittelyä.

  • Dokumentointi ja projektinhallinta. Käyttäytymissäännöt, LLM:n käyttöpolitiikka, hallintodokumentaatio, linkitysskriptien tukimatriisi, ohjeet -fuse-ld=wild-valitsimen käyttöön GCC 16.1:ssä ja asennus Brew'n kautta on lisätty. Myös arkisto on siirretty erilliseen GitHub-organisaatioon, wild-linkeriin.

Tällä hetkellä Villi virallisesti keskittynyt pääasiassa Linux ja ELF. Projektin README-tiedosto tukee x86-64, ARM64, RISC-V riscv64gc ja alkuvaiheen tuki LoongArch64 päälle Linux; voi rakentaa staattisia binääritiedostoja, static-PIE:tä, dynaamisesti linkitettyjä suoritettavia tiedostoja ja .so-tiedostoja, toimii debug-tietojen, GNU-työpalvelimen ja joidenkin linkitysskriptien kanssa. Inkrementaalinen linkitys, monimutkaisemmat linkitysskriptit, Mach-O ja Windows luokitellaan tällä hetkellä toteutumattomiksi tai keskeneräisiksi mahdollisuuksiksi.

Käytännössä Wild 0.9 laajentaa yhteensopivuutta olemassa olevan rakennusekosysteemin kanssa, alkaa laajentua ELF:n ulkopuolelle ja lisää tuen skenaarioille, jotka vaikeuttavat linkittäjän käyttöä suurissa C/C++- ja sekaprojekteissa. Rust-kehittäjille Wild on edelleen mielenkiintoinen potentiaalisena pohjana tulevalle inkrementaaliselle linkittämiselle ja järjestelmäkehittäjille toisena nopeana kilpailijana GNU ld:lle, LLD:lle ja Moldille.

Lähde: linux.org.ru

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster