Priekinė „Rust“ kompiliatoriaus dalis, atliekanti tokias užduotis kaip analizavimas, tipo tikrinimas ir skolinimosi analizė, palaiko lygiagretųjį vykdymą, o tai gali žymiai sutrumpinti kompiliavimo laiką. Lygiagretinimas jau galimas naktinėse Rust versijose ir įgalinamas naudojant parinktį „-Z threads=8“. Svarstomą galimybę į stabilią šaką planuojama įtraukti 2024 m.
Darbas, skirtas sutrumpinti rengimo laiką „Rust“, tęsiasi keletą metų. Per pirmuosius 10 2023 m. mėnesių kompiliavimo laikas sumažėjo vidutiniškai 13%, didžiausias atminties suvartojimas sumažėjo 15%, o sugeneruotų failų dydis sumažėjo 7%. Šiame etape pagreitis buvo pasiektas optimizuojant patį kompiliatorių. Po to kūrėjai pradėjo spartinti, lygiagrečiuodami operacijas kompiliavimo metu.
Iki šiol „Rust“ lygiagretinimas dažniausiai buvo atliekamas procesų lygiu; pavyzdžiui, „Cargo“ paketų tvarkyklė gali paleisti kelis „rustc“ procesus, kad vienu metu sudarytų kelis paketus. Lygiagretinimo palaikymas taip pat yra backend pusėje, kuri atlieka su kodo generavimu susijusias operacijas – „Rust backend“ gali generuoti kodą dalimis, kurias LLVM vėliau gali apdoroti lygiagrečiai. Iki šiol sąsaja galėjo apdoroti šaltinio kodą tik vienos gijos režimu.
Siekiant palaikyti lygiagrečiavimą, priekinė dalis buvo perjungta į Rayon biblioteką ir buvo žymiai pakeista, pavyzdžiui, daugelis jos dalių dabar sinchronizuojamos naudojant mutexes ir skaitymo / rašymo užraktus, o kode naudojami atominiai tipai. Atliekant našumo testavimą, naujasis lygiagretinas diegimas galėjo kompiliuoti iki 2% lėčiau, kai jis veikia vienos gijos režimu (-Z gijos = 1), tačiau kai buvo daugiau nei viena gija, greitis žymiai padidėjo. Pavyzdžiui, montuojant 8 gijas (-Z gijos=8), kai kuriose situacijose kompiliavimo laikas gali sutrumpėti 50%.
Tokiu atveju rezultatas stipriai priklauso nuo aplinkos nustatymų ir sukompiliuoto kodo – labai mažoms programoms, kurios ir taip greitai kompiliuoja, kompiliavimas kelių gijų režimu gali būti lėtesnis. Be to, atminties suvartojimas kelių gijų režimu gali žymiai padidėti; pavyzdžiui, atliekant bandymus, buvo pastebėtas atminties suvartojimo padidėjimas iki 35%.
Šaltinis: opennet.ru
