Апублікаваны выпуск кампаноўніка Mold 3.0, які можа ўжывацца ў якасці хутчэйшай празрыстай замены GNU linker на Linux-сістэмах. Праект развівае Rui Ueyama, аўтар кампаноўніка LLVM lld. Ключавой асаблівасцю Mold з'яўляецца вельмі высокая хуткасць злучэння аб'ектных файлаў, прыкметна апераджальная кампаноўнікі GNU gold і LLVM lld (кампаноўка ў Mold выконваецца са хуткасцю, усяго ў два разу павольней простага капіявання файлаў утылітай cp). Код напісаны на мове Rust і распаўсюджваецца пад ліцэнзіяй MIT.
Памяншэнне часу на кампаноўку дазваляе значна павысіць зручнасць распрацоўкі вялікіх праектаў за кошт скарачэння чакання ў працэсе фарміравання выкананых файлаў пры адладцы і тэсціравання змяненняў. Матывам да стварэння Mold стала раздражненне ад неабходнасці чакаць завяршэння кампаноўкі пасля кожнага занясення змены ў код, а таксама нізкая эфектыўнасць працы існых кампаноўнікаў на шмат'ядравых сістэмах і жаданне апрабаваць прынцыпова іншую архітэктуру кампаноўкі, не звяртаючыся пры гэтым да залішне ўскладненых мадэляў, такім як инкрементальная кампаноў.
Высокая прадукцыйнасць кампаноўкі выкананага файла з вялікай колькасці падрыхтаваных кампілятарам аб'ектных файлаў у Mold дасягаецца выкарыстаннем хутчэйшых алгарытмаў, актыўным распаралельваннем аперацый паміж даступнымі ядрам CPU і ўжываннем больш эфектыўных структур дадзеных. Напрыклад, у Mold рэалізаваная тэхніка выканання інтэнсіўных вылічэнняў адначасова з капіяваннем файлаў, папераджальная загрузка аб'ектных файлаў у памяць, выкарыстанне хуткіх хэш-табліц пры дазволе знакаў, сканаванне табліц перасоўванняў у асобным струмені і дэдуплікацыя паўтаральных у розных файлах аб'ядноўваных секцый.
Галінка Mold 3.0 характэрная перапісваннем кодавай базы з C++ (C++20) на мову Rust. Mold 3.0 можа выкарыстоўвацца ў якасці празрыстай замены Mold 2.42.1, апошняга выпуску на мове C++, і падтрымлівае ўсе раней даступныя опцыі і мэтавыя архітэктуры. Пераход на Rust дазволіў засцерагчы праект ад патэнцыйных праблем пры апрацоўцы пашкоджаных аб'ектных файлаў – у сітуацыях, калі версія на З++ аварыйна завяршалася з-за звароту да абласцей памяці за межамі буфера, варыянт на Rust спыняе працу на этапе праверкі межаў. Прадукцыйнасць рэалізацыі на Rust знаходзіцца на адным узроўні з версіяй на C++.
Апроч міграцыі на Rust ключавой мэтай пры распрацоўцы галінкі 3.0 было падвышэнне сумяшчальнасці з GNU ld і падрыхтоўка праекту да магчымасці выкарыстання ў якасці кампаноўніка па змаўчанні ў дыстрыбутывах Linux. Зборачная сістэма заменена з CMake на Cargo, а сістэма тэстаў з ctest на cargo test. З залежнасцяў выключана бібліятэка oneTBB.
Крыніца: opennet.ru
