Lidhës i egër 0.9

Lirimi u bë Lidhës i egër 0.9.0 — një lidhës i ri me performancë të lartë i shkruar në Rust. Versioni është listuar në GitHub. 23 Maj vit 2026Projekti pozicionohet si një lidhës për përshpejtimin e zhvillimit iterativ: autorët në fund të fundit duan të arrijnë lidhje graduale, megjithëse kjo nuk është zbatuar ende në versionin aktual. Kodi shpërndahet sipas një licence të dyfishtë. Apache 2.0 / MIT.

Ndryshimi kryesor në Wild 0.9 është mbështetja API-ja e shtojcës së lidhësit, një ndërfaqe e prezantuar në lidhësin Gold dhe e mbështetur gjithashtu nga GNU ld dhe Mold. Për Wild, kjo hap rrugën për LTO për shtojcën e lidhësit — optimizime të kohës së lidhjes nëpërmjet një plugin-i për lidhje. Zhvilluesit deklarojnë konkretisht se kjo është kryesisht e dobishme për projektet C, C++ dhe me kod të përzier, ndërsa projektet e pastra Rust zakonisht kryejnë LTO brenda kompanisë. Mbështetja për këtë veçori ka ende probleme të njohura dhe lidhja nëpërmjet plugin-it mund të jetë e ngadaltë.

Një pjesë e konsiderueshme e punës në 0.9 lidhej me përgatitjet për transferimin e Wild përtej Linux/ELF. Logjika specifike për ELF është zhvendosur jashtë abstraksioneve dhe ka filluar puna për mbështetjen. Mach-O и WebAssemblyKëto aftësi nuk janë ende gati për përdorim praktik, por elementët e parë janë shfaqur tashmë: analiza Mach-O, përpunimi i seksioneve dhe segmenteve, tabela e simboleve, nënshkrimi i kodit, skedari binar fat, si dhe mbështetja fillestare për seksionet, simbolet dhe zhvendosjet wasm.

Ndryshimet kryesore në Wild Linker 0.9:

  • Mbështetje për shtojcat e lidhësve. U shtua mbështetje për API-të e plugin-eve të lidhësve, e cila është e nevojshme për LTO-në e plugin-eve të lidhësve dhe përputhshmërinë me disa skripte ndërtimi GCC/GNU ld/Mold. Gjithashtu u rregulluan disa probleme që lidhen me rikthimet e plugin-eve, duke përfshirë whole-archive, ThinLTO, limitin e skedarëve të hapur dhe heqjen e kodit të vdekur gjatë LTO-së.

  • Zgjerim i madh i mbështetjes së skripteve të lidhësve. Janë zbatuar direktivat PROVIDE dhe PROVIDE_HIDDEN, analiza dhe ekzekutimi ASSERT, mbështetja për prapashtesat MEMORY, ORIGIN, LENGTH, LOADADDR, ALIGNOF, SEGMENT_START, K dhe M në literalët numerikë, operatorët logjikë, bitwise dhe unarë, si dhe përputhja sipas emrave të skedarëve hyrës. Kjo e sjell Wild më afër pajtueshmërisë me skriptet komplekse të lidhjeve që shpesh gjenden në softuerët e sistemit dhe projektet e nivelit të ulët.

  • Përmirësime për RISC-V, AArch64, x86-64 dhe LoongArch64. U shtua relaksimi i thirrjeve RISC-V, relaksimi i HI20, R_RISCV_ALIGN, kontrollimi për zgjerime ISA kontradiktore, zhvendosje shtesë të AArch64, probleme me zgjerimin e diapazonit për AArch64, trajtimi i një numri zhvendosjesh x86-64 me relaksime, dhe sqarime të diapazonit dhe shtrirjes për LoongArch64.

  • Opsione të reja përputhshmërie. U shtua mbështetje për --dependency-file, --auxiliary, --exclude-libs, --enable-new-dtags, --disable-new-dtags, --trace, --nmagic, --compress-debug-sections, --pack-dynamic-relocs=relr, --use-android-relr-tags, dhe formularin pa hapësirë ​​-o/path.

  • Gjenerimi i objekteve që lëvizin statikisht. U shtua mbështetje për krijimin e objekteve statike të zhvendosshme—skedarë objektesh të ndërmjetëm që mund të marrin pjesë ende në lidhje të mëtejshme.

  • Përmirësime të performancës pa u përqendruar në një publikim "të shpejtë". Autorët vënë në dukje në mënyrë të qartë se versioni 0.9 nuk përfshinte ndonjë përmirësim të madh të performancës, por nuk pati as degradim. Optimizimet lokale përfshijnë një rrugë të shpejtë për përputhjet jo-globale në skriptet e versioneve, një reduktim në numrin e operacioneve atomike, llogaritje paralele të adresave të seksioneve dhe simboleve gjatë skanimeve të relaksimit dhe ripërpunim të reduktuar të seksioneve tashmë të zgjidhura.

  • Shumë rregullime të përputhshmërisë. U rregullua trajtimi i simboleve të dobëta të padefinuara, .ctors/.dtors, RELRO, skripteve të versioneve, SFrame, IFUNC, --version/-v, gabimeve të simboleve të padefinuara, paralajmërimeve, zhvendosjeve të debugimit, .eh_frame, SHT_SYMTAB_SHNDX, lidhjes statike të objektit dinamik dhe një numri skenarësh me skripte lidhësish.

  • Dokumentacioni dhe menaxhimi i projektit. Janë shtuar një kod sjelljeje, një politikë përdorimi të LLM-së, dokumentacion qeverisjeje, një matricë mbështetëse për skriptet e lidhësve, udhëzime për përdorimin e -fuse-ld=wild me GCC 16.1 dhe instalim nëpërmjet Brew. Depozita është zhvendosur gjithashtu në një organizatë të veçantë GitHub, wild-linker.

Në këtë moment, I egër zyrtarisht të përqendruar kryesisht në Linux dhe ELF. README i projektit mbështet x86-64, ARM64, RISC-V riscv64gc dhe mbështetje fillestare LoongArch64 mbi Linux; mund të ndërtojë skedarë binare statikë, static-PIE, skedarë ekzekutues të lidhur dinamikisht dhe skedarë .so, funksionon me informacionin e debugimit, serverin e punës GNU dhe disa skripte lidhësish. Lidhje rritëse, skripte lidhësish më komplekse, Mach-O dhe Windows aktualisht klasifikohen si mundësi të parealizuara ose të papërfunduara.

Në terma praktikë, Wild 0.9 zgjeron përputhshmërinë me ekosistemin ekzistues të ndërtimit, fillon të zgjerohet përtej ELF dhe shton mbështetje për skenarë që e bëjnë lidhësin të vështirë për t'u përdorur në projekte të mëdha C/C++ dhe projekte të përziera. Për zhvilluesit e Rust, Wild mbetet interesant si një bazë e mundshme për lidhje graduale në të ardhmen, dhe për zhvilluesit e sistemeve, si një tjetër konkurrent i shpejtë i GNU ld, LLD dhe Mold.

Burimi: linux.org.ru

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster