Rusti kompilaatori frontendis, mis teostab selliseid ülesandeid nagu süntaktianalüüs, tüüpide kontrollimine ja laenude analüüs, on rakendatud paralleelse täitmise tugi, mis võimaldab märkimisväärselt vähendada kompileerimisaega. Paralleelsus on juba saadaval Rusti öistes kogumites ja selle aktiveerimiseks tuleb kasutada valikut "-Z threads=8". Stabiilsesse haru plaanitakse seda võimalust lisada 2024. aastal.
Kompileerimisaegade vähendamise töö Rustis on käinud juba mitmeid aastaid. 2023. aasta esimesel 10 kuul on kompileerimisaeg keskmiselt lühenenud 13%, mälu tippkasutamine on vähenenud 15% ja genereeritud failide suurus on kahanenud 7%. Sel hetkel saavutati kiirusetõus peamiselt kompilaatori enda optimeerimise kaudu. Seejärel läksid arendajad tööle operatsioonide paralleelsete täitmise kiirusetõusu suunas.
Siiani tagati Rustis paralleelsus peamiselt protsesside tasemel, näiteks paketihaldur Cargo saab käivitada mitu rustc protsessi mitme paketi samal ajal kompileerimiseks. Paralleelsuse tugi on olemas ka backendis, mis teostab koodi genereerimisega seotud operatsioone — Rusti backend võib genereerida koodi osade kaupa, mida LLVM saab hiljem paralleelselt töödelda. Frontend aga suutis siiani allika koodi töödeldes kasutada ainult ühetasandilist režiimi.
Paralleelsuse toetamiseks on frontend viidud üle Rayon teegi kasutamisele ja see on oluliselt ümberehitatud, näiteks paljusid selle osi sünkroniseeritakse nüüd mutexite ning lugemise/kirjutamise lukustustega, samas kasutatakse koodis atomaarseid tüüpe. Jõudluse testimisel suutis uus paralleelne rakendus kompileerida kuni 2% aeglasemalt ühetasandilises režiimis (-Z threads=1), kuid kui lõngade arv oli suurem kui üks, tõusis kiirus märkimisväärselt. Näiteks 8 lõnga seadistamisel (-Z threads=8) õnnestus kompileerimisaega mõnes olukorras vähendada 50%.
Tulemus sõltub tugevalt keskkonna seadistustest ja kompileeritavast koodist — väga väikeste programmide puhul, mis niigi kompileeruvad kiiresti, võib mitme lõime režiimis kompileerimine toimuda aeglasemalt. Lisaks võib mitme lõime režiimis mälu kasutamine oluliselt suureneda, näiteks testides on täheldatud mälu kasutamise kasvu kuni 35%.
Allikas: opennet.ru
