La part frontal del compilador Rust, que realitza tasques com ara l'anàlisi, la comprovació de tipus i l'anàlisi de préstecs, admet l'execució paral·lela, la qual cosa pot reduir significativament el temps de compilació. La paral·lelització ja està disponible a les versions nocturnes de Rust i s'habilita mitjançant l'opció "-Z threads=8". Es preveu incloure l'oportunitat en consideració a la branca estable el 2024.
Fa diversos anys que s'està treballant per reduir els temps de compilació a Rust. En els primers 10 mesos del 2023, els temps de compilació es van reduir en un 13% de mitjana, el consum màxim de memòria es va reduir un 15% i la mida dels fitxers generats es va reduir un 7%. En aquesta etapa, l'acceleració es va aconseguir mitjançant optimitzacions del propi compilador. Després d'això, els desenvolupadors van passar a treballar en l'acceleració paral·lelitzant les operacions en temps de compilació.
Fins ara, la paral·lelització a Rust s'ha fet principalment a nivell de procés, per exemple, el gestor de paquets Cargo pot llançar diversos processos rustc per compilar diversos paquets al mateix temps. El suport de paral·lelització també està present al costat del backend, que realitza operacions relacionades amb la generació de codi: el backend Rust pot generar codi en parts, que LLVM pot processar en paral·lel. La interfície, fins ara, només podia processar el codi font en mode d'un sol fil.
Per donar suport a la paral·lelització, la interfície s'ha canviat a utilitzar la biblioteca Rayon i s'ha redissenyat significativament, per exemple, moltes de les seves parts ara es sincronitzen mitjançant mutex i bloquejos de lectura/escriptura, i s'utilitzen tipus atòmics al codi. A les proves de rendiment, la nova implementació paral·lelitzable podria compilar-se fins a un 2% més lenta quan s'executava en mode d'un sol fil (fils -Z = 1), però quan hi havia més d'un fil, la velocitat augmentava significativament. Per exemple, en instal·lar 8 fils (-Z threads=8), en algunes situacions el temps de compilació es podria reduir en un 50%.
En aquest cas, el resultat depèn molt de la configuració de l'entorn i del codi compilat; per a programes molt petits que ja es compilen ràpidament, la compilació en mode multifil pot ser més lenta. A més, el consum de memòria en mode multifil pot augmentar significativament, per exemple, en les proves, es va observar un augment del consum de memòria de fins a un 35%.
Font: opennet.ru
