Die voorkant van die Rust-samesteller, wat take soos ontleding, tipekontrole en leenontleding uitvoer, ondersteun parallelle uitvoering, wat die samestellingstyd aansienlik kan verminder. Parallellisering is reeds beskikbaar in nagtelike bouwerk van Rust en word geaktiveer deur die "-Z threads=8" opsie te gebruik. Die geleentheid wat oorweeg word, word beplan om in 2024 by die staltak ingesluit te word.
Werk aan die vermindering van samestellingstye in Rust is al etlike jare aan die gang. In die eerste 10 maande van 2023 is samestellingstye met gemiddeld 13% verminder, piekgeheueverbruik is met 15% verminder en die grootte van gegenereerde lêers is met 7% verminder. Op hierdie stadium is versnelling bereik deur optimalisering van die samesteller self. Hierna het die ontwikkelaars aanbeweeg om aan versnelling te werk deur bedrywighede tydens samestellingstyd te paralleliseer.
Tot nou toe is parallelisering in Rust meestal op prosesvlak gedoen; byvoorbeeld, die Cargo-pakketbestuurder kan verskeie rustc-prosesse begin om verskeie pakkette gelyktydig saam te stel. Parallelliseringsondersteuning is ook aan die kant van die agterkant teenwoordig, wat bewerkings uitvoer wat verband hou met kodegenerering - die Rust-agterkant kan kode in dele genereer, wat LLVM dan parallel kan verwerk. Die frontend kon tot nou toe slegs bronkode in enkeldraadmodus verwerk.
Om parallelisering te ondersteun, is die frontend oorgeskakel na die gebruik van die Rayon-biblioteek en is aansienlik herontwerp, byvoorbeeld, baie van sy dele word nou gesinchroniseer met behulp van mutexes en lees/skryf-slotte, en die kode gebruik atoomtipes. In prestasietoetsing kan die nuwe paralleliseerbare implementering tot 2% stadiger saamstel wanneer dit in enkel-draadmodus uitgevoer word (-Z-drade=1), maar wanneer daar meer as een draad was, het die spoed aansienlik toegeneem. Byvoorbeeld, wanneer 8 drade (-Z drade=8) geïnstalleer word, kan die samestellingstyd in sommige situasies met 50% verminder word.
In hierdie geval hang die resultaat sterk af van die omgewingsinstellings en die saamgestelde kode - vir baie klein programme wat reeds vinnig saamstel, kan samestelling in multi-threaded-modus stadiger wees. Daarbenewens kan geheueverbruik in multi-threaded-modus aansienlik toeneem; byvoorbeeld, in toetse is 'n toename in geheueverbruik van tot 35% waargeneem.
Bron: opennet.ru
