Руи Уејама, автор на поврзувачот LLVM lld и компајлерот chibicc, го претстави првото стабилно издание на новиот поврзувач на Mold со високи перформанси, кој е забележливо пред поврзувачите на GNU gold и LLVM lld во однос на брзината на поврзување на објектните датотеки. Проектот се смета за подготвен за распоредување на производството и може да се користи како побрза транспарентна замена за GNU поврзувачот на Linux системите. Плановите за следното големо издание вклучуваат подготвеност за поддршка за macOS платформата, по што ќе започне работата на прилагодување на Mold за Windows.
Калапот е напишан во C++ (C++20) и се дистрибуира под лиценцата AGPLv3, која е во согласност со GPLv3, но не е во согласност со GPLv2, бидејќи бара да се отворат промени кога се развиваат мрежни услуги. Овој избор се должи на желбата да се добие финансирање за развој - авторот е подготвен да ги продаде правата на кодот за релиценцирање под дозволена лиценца, како што е MIT, или да обезбеди посебна комерцијална лиценца за оние кои не се задоволни со AGPL.
Mold ги поддржува сите карактеристики на поврзувачот на GNU и е многу брз, поврзувајќи се со само половина од брзината од едноставното копирање датотеки со cp. На пример, кога се гради Chrome 96 (големина на кодот 1.89 GB), потребни се 8 секунди за да се изградат извршни датотеки за дебагинфо c на 53-јадрен компјутер користејќи GNU gold, 11.7 секунди за LLVM lld и само 2.2 секунди за Mold (26 пати побрзо од GNU злато). При поврзување на Clang 13 (3.18 GB), на GNU gold му се потребни 64 секунди, на LLVM lld 5.8 секунди, а на Mold 2.9 секунди. При поврзување на Firefox 89 (1.64 GB), GNU gold трае 32.9 секунди, LLVM lld трае 6.8 секунди, а Mold трае 1.4 секунди.
Намалувањето на времето за поврзување може значително да ја подобри употребливоста на развојот на големи проекти со намалување на чекањето во процесот на генерирање на извршни датотеки за време на дебагирање и тестирање промени. Молд беше мотивиран од досадноста што мораше да чека да заврши поврзувањето по секоја промена на кодот, како и лошите перформанси на постоечките поврзувачи на повеќејадрените системи и желбата да се проба фундаментално различна архитектура за поврзување без непотребно прибегнување кон комплицирани модели, како што се инкрементално поврзување.
Високите перформанси за поврзување на извршна датотека од голем број објектни датотеки подготвени од компајлерот во Mold се постигнуваат со користење на побрзи алгоритми, активно паралелизирање на операциите помеѓу достапните јадра на процесорот и користење на поефикасни структури на податоци. На пример, Mold ја имплементира техниката на извршување интензивни пресметки истовремено со копирање датотеки, претходно преземање датотеки со објекти во меморијата, користење на брзи табели за хаш при разрешување знаци, скенирање на табели за преместување во посебна нишка и дедупликација на споени делови кои се повторуваат во различни датотеки.
Извор: opennet.ru