Pirmasis stabilus Mold linkerio leidimas, kurį sukūrė LLVM lld

Rui Ueyama, LLVM lld linkerio ir chibicc kompiliatoriaus autorius, pristatė pirmąjį stabilų naujo didelio našumo Mold linkerio leidimą, kuris objektų failų susiejimo greičiu yra pastebimai greitesnis nei GNU gold ir LLVM lld saitai. Projektas laikomas paruoštu gamybiniam įgyvendinimui ir gali būti naudojamas kaip greitesnis, skaidresnis GNU linkerio pakaitalas Linux sistemose. Kito pagrindinio leidimo planai apima „macOS“ platformos palaikymo užbaigimą, o po to bus pradėti pritaikyti „Mold for Windows“.

Mold yra parašytas C++ (C++20) ir yra licencijuotas pagal AGPLv3, kuris yra suderinamas su GPLv3, bet nesuderinamas su GPLv2, nes kuriant tinklo paslaugas reikia atvirų pakeitimų. Toks pasirinkimas paaiškinamas siekiu gauti finansavimą plėtrai – autorius nori parduoti teises į kodą, skirtą pakartotiniam licencijavimui pagal leidžiančią licenciją, pavyzdžiui, MIT, arba suteikti atskirą komercinę licenciją tiems, kurie nėra patenkinti AGPL.

Mold palaiko visas GNU linkerio funkcijas ir pasižymi labai dideliu našumu – susiejimas atliekamas tik perpus greičiau nei tiesiog kopijuojant failus su cp programa. Pavyzdžiui, kuriant „Chrome 96“ (kodo dydis 1.89 GB), vykdomųjų failų susiejimas su derinimo informacija 8 branduolių kompiuteryje, naudojant GNU gold, užtrunka 53 sekundes, LLVM lld - 11.7 sekundės, o Mold tik 2.2 sekundės (26 kartus greičiau nei GNU auksas). Susiejant Clang 13 (3.18 GB), tai užtrunka 64 sekundes GNU aukso, 5.8 sekundės LLVM lld ir 2.9 sekundės Mold. Kuriant Firefox 89 (1.64 GB), tai užtrunka 32.9 sekundės GNU aukso, 6.8 sekundės LLVM lld ir 1.4 sekundės Mold.

Pirmasis stabilus Mold linkerio leidimas, kurį sukūrė LLVM lld

Sutrumpinus kūrimo laiką, galima žymiai pagerinti didelių projektų kūrimo patogumą, nes sutrumpėja laukimas generuojant vykdomuosius failus derinant ir tikrinant pakeitimus. Motyvacija sukurti Mold buvo nusivylimas, kai reikėjo laukti, kol susiejimas bus baigtas po kiekvieno kodo pakeitimo, prastas esamų sąsajų veikimas kelių branduolių sistemose ir noras išbandyti iš esmės kitokią susiejimo architektūrą, nenaudojant pernelyg sudėtingų modelių, pvz. kaip laipsniškas susiejimas.

Didelis vykdomojo failo susiejimo su daugybe kompiliatorių paruoštų objektų failų Mold našumas pasiekiamas naudojant greitesnius algoritmus, aktyvų turimų procesoriaus branduolių operacijų lygiagretinimą ir efektyvesnių duomenų struktūrų naudojimą. Pavyzdžiui, „Mold“ įdiegia metodus, leidžiančius atlikti intensyvius skaičiavimus kopijuojant failus, iš anksto įkeliant objektų failus į atmintį, naudojant greitąsias maišos lenteles simbolių skyrimui, nuskaitant perkėlimo lenteles atskiroje gijoje ir panaikinant sujungtų skyrių, kurie kartojasi skirtinguose failuose, kopijas.

Šaltinis: opennet.ru

Добавить комментарий