Rui Ueyama, autorul legătorului LLVM lld și al compilatorului chibicc, a prezentat prima versiune stabilă a noului legător de înaltă performanță Mold, care depășește semnificativ viteza de legare a fișierelor obiect comparativ cu legătorii GNU gold și LLVM lld. Proiectul este considerat pregătit pentru implementări funcționale și poate fi utilizat ca un înlocuitor transparent mai rapid pentru GNU linker pe sistemele Linux. Printre planurile pentru următoarea versiune importantă se numără finalizarea suportului pentru platforma macOS, după care va începe lucrul la adaptarea Mold pentru Windows.
Mold este scris în C++ (C++20) și este distribuit sub licența AGPLv3, care este compatibilă cu GPLv3, dar nu este compatibilă cu GPLv2, deoarece necesită deschiderea modificărilor în dezvoltarea serviciilor online. Această alegere este motivată de dorința de a obține finanțare pentru dezvoltare — autorul este dispus să vândă drepturile asupra codului pentru a fi relicentizat sub o licență permissivă, precum MIT, sau să ofere o licență comercială separată pentru cei care nu sunt de acord cu AGPL.
Mold suportă toate funcționalitățile GNU linker și se distinge printr-o performanță foarte ridicată — legarea se desfășoară cu o viteză de doar două ori mai lentă decât copierea simplă a fișierelor cu utilitarul cp. De exemplu, la compilarea Chrome 96 (dimensiunea codului 1.89 GB) pentru legarea fișierelor executabile cu debuginfo pe un computer cu 8 nuclee, utilizând GNU gold, se necesită 53 de secunde, LLVM lld — 11.7 secunde, iar Mold doar 2.2 secunde (de 26 de ori mai repede decât GNU gold). La compilarea Clang 13 (3.18 GB) în GNU gold sunt necesare 64 de secunde, în LLVM lld — 5.8 secunde, iar în Mold — 2.9 secunde. La compilarea Firefox 89 (1.64 GB) în GNU gold sunt necesare 32.9 secunde, în LLVM lld — 6.8 secunde, iar în Mold — 1.4 secunde.

Reducerea timpului de linkare permite îmbunătățirea semnificativă a confortului dezvoltării proiectelor mari prin scurtarea așteptării în timpul generării fișierelor executabile în timpul depanării și testării modificărilor. Motivul creării lui Mold a fost iritarea cauzată de necesitatea de a aștepta finalizarea linkării după fiecare modificare în cod, precum și eficiența scăzută a linker-elor existente pe sisteme multicore și dorința de a experimenta o arhitectură de linkare complet diferită, fără a recurge la modele excesiv de complicate, cum ar fi linkarea incrementală.
Performanța ridicată a linkării fișierelor executabile dintr-un număr mare de fișiere obiect pregătite de compilator în Mold este obținută prin utilizarea de algoritmi mai rapizi, paralele activi ale operațiunilor între nucleele CPU disponibile și aplicarea unor structuri de date mai eficiente. De exemplu, în Mold este implementată tehnica executării calculului intensiv simultan cu copierea fișierelor, încărcarea anticipată a fișierelor obiect în memorie, utilizarea unor hărți hash rapide la rezolvarea simbolurilor, scanarea tabelelor de relocare într-un fir de execuție separat și deduplicarea secțiunilor repetitive din fișierele diferite.
Sursa: opennet.ro
