Prednji kraj Rust kompajlera, koji obavlja zadatke kao što su raščlanjivanje, provjera tipa i analiza posuđivanja, podržava paralelno izvršavanje, što može značajno smanjiti vrijeme kompilacije. Paralelizacija je već dostupna u noćnim verzijama Rusta i omogućena je pomoću opcije “-Z threads=8”. Planirano je da se razmatrana prilika uključi u stabilnu granu 2024. godine.
Rad na smanjenju vremena kompilacije u Rustu traje već nekoliko godina. U prvih 10 mjeseci 2023. vrijeme kompilacije je smanjeno u prosjeku za 13%, najveća potrošnja memorije smanjena je za 15%, a veličina generiranih datoteka smanjena je za 7%. U ovoj fazi, ubrzanje je postignuto kroz optimizacije samog kompajlera. Nakon toga, programeri su prešli na rad na ubrzanju paraleliziranjem operacija u vrijeme kompajliranja.
Do sada se paralelizacija u Rustu uglavnom obavljala na nivou procesa, na primjer, Cargo paket menadžer može pokrenuti više rustc procesa za kompajliranje više paketa u isto vrijeme. Podrška za paralelizaciju je takođe prisutna na strani backend-a, koji obavlja operacije vezane za generisanje koda - Rust backend može generirati kod u dijelovima, koji LLVM zatim može obraditi paralelno. Frontend je do sada mogao da obrađuje izvorni kod samo u jednonitnom modu.
Da bi podržao paralelizaciju, frontend je prebačen na korištenje Rayon biblioteke i značajno je redizajniran, na primjer, mnogi njegovi dijelovi su sada sinkronizirani pomoću muteksa i brava za čitanje/pisanje, a atomski tipovi se koriste u kodu. U testiranju performansi, nova implementacija koja se može paralelizirati mogla bi kompajlirati do 2% sporije kada se radi u jednonitnom modu (-Z threads=1), ali kada je bilo više od jedne niti, brzina se značajno povećala. Na primjer, kada instalirate 8 niti (-Z threads=8), u nekim situacijama vrijeme kompilacije može se smanjiti za 50%.
U ovom slučaju, rezultat jako ovisi o postavkama okruženja i kompajliranom kodu - za vrlo male programe koji se već brzo kompajliraju, kompilacija u višenitnom načinu može biti sporija. Osim toga, potrošnja memorije u višenitnom načinu može se značajno povećati, na primjer, u testovima je uočeno povećanje potrošnje memorije do 35%.
izvor: opennet.ru
