Sovaĝa Ligilo 0.9

Liberigita Sovaĝa Ligilo 0.9.0 — nova alt-efikeca ligilo skribita en Rust. La eldono estas listigita ĉe GitHub. 23 Majo 2026 jarojLa projekto estas poziciigita kiel ligilo por akceli iteracian disvolviĝon: la aŭtoroj finfine volas atingi pliigan ligadon, kvankam ĝi ankoraŭ ne estas efektivigita en la nuna versio. La kodo estas distribuita sub duobla licenco. Apache 2.0 / MIT.

La ĉefa ŝanĝo en Wild 0.9 estas subteno Ligilo-kromprogramo API, interfaco enkondukita en la Gold-ligilo kaj ankaŭ subtenata de GNU ld kaj Mold. Por Wild, ĉi tio malfermas la vojon al ligilo-kromprogramo LTO — optimumigoj de ligtempo per ligilo-kromprogramo. La programistoj specife deklaras, ke ĉi tio estas ĉefe utila por C, C++ kaj mikskodaj projektoj, dum puraj Rust-projektoj tipe plenumas LTO interne. Subteno por ĉi tiu funkcio ankoraŭ havas konatajn problemojn, kaj ligado per la kromprogramo povas esti malrapida.

Signifa parto de la laboro en 0.9 rilatis al preparoj por la translokigo de Sovaĝa preter Linux/ELF. ELF-specifa logiko estis movita ekster abstraktadojn, kaj laboro pri subteno komenciĝis. Maĥo-O и RetejoAsembleoĈi tiuj kapabloj ankoraŭ ne estas pretaj por praktika uzo, sed la unuaj elementoj jam aperis: Mach-O-analizo, sekcio- kaj segmento-prilaborado, simboltabelo, kodsignaturo, dika duuma dosiero, kaj ankaŭ komenca subteno por wasm-sekcioj, simboloj kaj relokigoj.

Ŝlosilaj ŝanĝoj en Wild Linker 0.9:

  • Subteno por ligilaj kromaĵoj. Aldonita subteno por la API-oj de kromaĵoj por ligantoj, kio estas necesa por la LTO de la ligilo-kromaĵo, kaj kongruo kun iuj konstruaj skriptoj de GCC/GNU ld/Mold. Ankaŭ riparitaj estis kelkaj problemoj rilataj al kromaĵaj revokoj, inkluzive de tuta-arkivo, ThinLTO, la limo de malfermaj dosieroj, kaj forigo de morta kodo dum LTO.

  • Granda vastiĝo de subteno por ligantaj skriptoj. La direktivoj PROVIDE kaj PROVIDE_HIDDEN, analizo kaj efektivigo de ASSERT, subteno por la sufiksoj MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, K kaj M en numeraj literaloj, logikaj, bitmaniere kaj unuopaj operatoroj, kaj kongruigo laŭ enigaj dosiernomoj estas efektivigitaj. Ĉi tio alproksimigas Wild al kongrueco kun kompleksaj ligskriptoj ofte troveblaj en sistema programaro kaj malaltnivelaj projektoj.

  • Plibonigoj por RISC-V, AArch64, x86-64 kaj LoongArch64. Aldonis malstreĉiĝon de RISC-V alvokoj, malstreĉiĝon de HI20, R_RISCV_ALIGN, kontroladon de konfliktaj ISA-etendaĵoj, pliajn AArch64-translokigojn, interval-etendaĵajn blokojn por AArch64, traktadon de kelkaj x86-64-translokigoj kun malstreĉiĝoj, kaj intervalajn kaj vicigajn klarigojn por LoongArch64.

  • Novaj kongruecaj opcioj. Aldonita subteno por --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags, kaj la sen-spaca formo -o/path.

  • Generado de statike moviĝantaj objektoj. Aldonita subteno por krei statikajn relokigeblajn dosierojn — mezajn objektodosierojn, kiuj ankoraŭ povas partopreni en plia ligado.

  • Plibonigoj de rendimento sen fokuso sur "rapida" eldono. La aŭtoroj eksplicite rimarkas, ke versio 0.9 ne inkluzivis gravajn plibonigojn de rendimento, sed ankaŭ ne estis degradiĝo. Lokaj optimumigoj inkluzivas rapidan vojon por ne-tutmondaj kongruigiloj en versaj skriptoj, redukton de la nombro de atomaj operacioj, paralelan kalkuladon de sekciaj kaj simbolaj adresoj dum malstreĉiĝaj skanadoj, kaj reduktitan reprilaboradon de jam solvitaj sekcioj.

  • Multaj kongruecaj korektoj. Riparis pritraktadon de malfortaj nedifinitaj simboloj, .ctors/.dtors, RELRO, versiskriptoj, SFrame, IFUNC, --version/-v, eraroj en nedifinitaj simboloj, avertoj, sencimigaj translokigoj, .eh_frame, SHT_SYMTAB_SHNDX, statika ligado de dinamika objekto, kaj kelkaj scenaroj kun ligilskriptoj.

  • Dokumentado kaj projekt-administrado. Aldoniĝis kondutkodo, uzpolitiko de LLM, dokumentado pri administrado, subtenmatrico por ligilo-skriptoj, instrukcioj por uzi -fuse-ld=wild kun GCC 16.1, kaj instalado per Brew. La deponejo ankaŭ estis movita al aparta GitHub-organizo, wild-linker.

Nuntempe sovaĝaj oficiale fokusiĝis ĉefe al Linux kaj ELF. La README-ŝtatoj de la projekto subtenas x86-64, ARM64, RISC-V riscv64gc kaj komenca subteno LoongArch64 sur Linux; povas konstrui statikajn duumajn dosierojn, statikan PIE-on, dinamike ligitajn efektivigeblajn dosierojn, kaj .so-dosierojn, funkcias kun sencimigaj informoj, GNU-laborservilo, kaj kelkaj ligilaj skriptoj. Pliiga ligado, pli kompleksaj ligilaj skriptoj, Mach-O, kaj Windows estas nuntempe klasifikitaj kiel nerealigitaj aŭ nefinitaj ŝancoj.

Praktike, Wild 0.9 vastigas kongruecon kun la ekzistanta konstrua ekosistemo, komencas etendiĝi preter ELF, kaj aldonas subtenon por scenaroj, kiuj malfaciligas la uzon de la ligilo en grandaj C/C++ kaj miksitaj projektoj. Por Rust-programistoj, Wild restas interesa kiel ebla bazo por estonta pliiga ligado, kaj por sistem-programistoj, kiel alia rapida konkuranto al GNU ld, LLD, kaj Mold.

fonto: linux.org.ru

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster