In de nachtbouwen van Rust zijn de mogelijkheden voor parallelle compilatie uitgebreid.

In de frontend van de Rust-compiler, die taken uitvoert zoals syntactische analyse, typechecking en leenanalyse, is ondersteuning voor parallelle uitvoering geïmplementeerd, waardoor de compileertijd aanzienlijk kan worden verkort. Deze parallelisatie is al beschikbaar in de nachtbouwen van Rust en kan worden ingeschakeld met de optie "-Z threads=8". De mogelijkheid wordt gepland om in 2024 in de stabiele versie op te nemen.

Er wordt al enkele jaren gewerkt aan het verkorten van de compileertijd in Rust. In de eerste 10 maanden van 2023 is de compileertijd gemiddeld met 13% verminderd, het piek geheugengebruik is met 15% gedaald en de grootte van de gegenereerde bestanden is met 7% afgenomen. In deze fase zijn de versnellingen bereikt door optimalisaties van de compiler zelf. Daaropvolgend zijn de ontwikkelaars begonnen te werken aan versnelling door het paralleliseren van operaties tijdens de compilatie.

Tot nu toe werd parallelisatie in Rust voornamelijk op procestniveau gerealiseerd; bijvoorbeeld, de pakketbeheerder Cargo kan meerdere rustc-processen starten voor gelijktijdige compilatie van verschillende pakketten. Ondersteuning voor parallelisatie is ook aanwezig aan de backendzijde, die operaties gerelateerd aan codegeneratie uitvoert – de Rust-backend kan de code in delen genereren, die vervolgens door LLVM parallel kunnen worden verwerkt. De frontend kon tot nu toe echter de broncode alleen in een single-threaded modus verwerken.

Om parallelisatie te ondersteunen, is de frontend omgeschakeld naar het gebruik van de Rayon-bibliotheek en significant herzien; bijvoorbeeld, veel delen ervan worden nu gesynchroniseerd met behulp van mutexen en lees-/schrijfsloten, en er worden atomische types in de code gebruikt. Bij prestatietests kon de nieuwe paralleliseerbare implementatie de compilatie tot 2% trager uitvoeren in single-threaded modus (-Z threads=1), maar wanneer er meer dan één thread actief was, nam de snelheid aanzienlijk toe. Bijvoorbeeld, met 8 threads (-Z threads=8) kon de compileertijd in bepaalde situaties met 50% worden verkort.

Het resultaat hangt sterk af van de omgevingsinstellingen en de gecompileerde code - voor zeer kleine programma's, die al snel gecompileerd worden, kan de compilatie in een multithreaded modus langzamer verlopen. Bovendien kan het geheugenverbruik in de multithreaded modus aanzienlijk toenemen; in tests werd bijvoorbeeld een stijging van het geheugenverbruik tot 35% waargenomen.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster