Në frontendin e kompilatorit Rust, i cili kryen detyra të tilla si analiza sintaksore, kontrolli i llojeve dhe analiza e borxhve, është implementuar mbështetje për ekzekutimin e paralel, i cili lejon një reduktim të konsiderueshëm të kohës së kompilimit. Paralelizimi është tashmë i disponueshëm në ndërtimet e natës të Rust dhe aktivizohet përmes opsionit "-Z threads=8". Mundësia e konsideruar për t'u përfshirë në degën stabile planifikohet për vitin 2024.
Puna për të reduktuar kohën e kompilimit në Rust ka vazhduar për disa vite. Gjatë 10 muajve të parë të vitit 2023, koha e kompilimit u zvogëlua në mesatare me 13%, konsumimi maksimal i memories u ul me 15%, dhe madhësia e skedareve të gjeneruara u zvogëlua me 7%. Në këtë fazë, përshpejtimi është arritur përmes optimizimeve të vetë kompilatorit. Pas kësaj, zhvilluesit kaluan në punën për përshpejtimin përmes paralelizimit të operacioneve gjatë kompilimit.
Ende, paralelizimi në Rust është kryesisht i siguruar në nivel procesi, për shembull, menaxheri i paketave Cargo mund të nisë disa procese rustc për kompilimin e shumë pakove në të njëjtën kohë. Mbështetja për paralelizimin është gjithashtu e pranishme në anën e backend-it, duke kryer operacione që lidhen me gjenerimin e kodit - backend-i Rust mund të gjenerojë kod në pjesë, të cilat më pas LLVM mund t'i përpunojë në mënyrë të paralel. Sidoqoftë, frontend-i deri tani mund të përpunonte kodin burimor vetëm në mënyrë njëprocesore.
Për të mbështetur paralelizmin, frontend-i është ridizajnuar për të përdorur bibliotekën Rayon dhe është rimodeluar ndjeshëm; për shembull, shumë pjesë tani sinkronizohen përmes mutex-eve dhe bllokimeve të leximit/shkrimit, ndërsa në kod përdoren llojet atomike. Gjatë testimit të performancës, implementimi i ri paralel mund të realizonte kompaktimin deri në 2% më ngadalë kur operohej në një njësi (-Z threads=1), por kur numri i thread-eve tejkalonte një, shpejtësia rritej ndjeshëm. Për shembull, me 8 thread (-Z threads=8), në disa raste, koha e kompaktimit mund të reduktohej me 50%.
Megjithatë, rezultati varet shumë nga konfigurimet e mjedisit dhe kodi i kompiliuar - për programe shumë të vogla, të cilat tashmë kompilohet shpejt, kompilimi në modin shumëprocesor mund të bëhet më i ngadalshëm. Për më tepër, konsumimi i kujtesës në modin shumëprocesor mund të rritet ndjeshëm, për shembull, në teste është vërejtur një rritje të konsumit të memories deri në 35%.
Burimi: opennet.ru
