Le frontal du compilateur Rust, qui effectue des tĂąches telles que l'analyse syntaxique, la vĂ©rification de type et l'analyse d'emprunt, prend en charge l'exĂ©cution parallĂšle, ce qui peut rĂ©duire considĂ©rablement le temps de compilation. La parallĂ©lisation est dĂ©jĂ disponible dans les versions nocturnes de Rust et est activĂ©e Ă l'aide de l'option « -Z threads=8 ». LâopportunitĂ© Ă lâĂ©tude devrait ĂȘtre incluse dans la branche stable en 2024.
Les travaux visant Ă rĂ©duire les temps de compilation dans Rust se poursuivent depuis plusieurs annĂ©es. Au cours des 10 premiers mois de 2023, les temps de compilation ont Ă©tĂ© rĂ©duits en moyenne de 13 %, la consommation maximale de mĂ©moire a Ă©tĂ© rĂ©duite de 15 % et la taille des fichiers gĂ©nĂ©rĂ©s a Ă©tĂ© rĂ©duite de 7 %. Ă ce stade, l'accĂ©lĂ©ration a Ă©tĂ© obtenue grĂące Ă des optimisations du compilateur lui-mĂȘme. AprĂšs cela, les dĂ©veloppeurs ont travaillĂ© sur lâaccĂ©lĂ©ration en parallĂ©lisant les opĂ©rations au moment de la compilation.
Jusqu'Ă prĂ©sent, la parallĂ©lisation dans Rust se faisait principalement au niveau du processus ; par exemple, le gestionnaire de packages Cargo peut lancer plusieurs processus rustc pour compiler plusieurs packages en mĂȘme temps. La prise en charge de la parallĂ©lisation est Ă©galement prĂ©sente du cĂŽtĂ© du backend, qui effectue des opĂ©rations liĂ©es Ă la gĂ©nĂ©ration de code - le backend Rust peut gĂ©nĂ©rer du code en plusieurs parties, que LLVM peut ensuite traiter en parallĂšle. Jusqu'Ă prĂ©sent, le frontend ne pouvait traiter le code source qu'en mode monothread.
Pour prendre en charge la parallĂ©lisation, l'interface a Ă©tĂ© basculĂ©e vers la bibliothĂšque Rayon et a Ă©tĂ© considĂ©rablement repensĂ©e. Par exemple, bon nombre de ses parties sont dĂ©sormais synchronisĂ©es Ă l'aide de mutex et de verrous de lecture/Ă©criture, et le code utilise des types atomiques. Lors des tests de performances, la nouvelle implĂ©mentation parallĂ©lisable pouvait compiler jusqu'Ă 2 % plus lentement lorsqu'elle Ă©tait exĂ©cutĂ©e en mode monothread (-Z threads=1), mais lorsqu'il y avait plus d'un thread, la vitesse augmentait considĂ©rablement. Par exemple, lors de l'installation de 8 threads (-Z threads=8), dans certaines situations, le temps de compilation peut ĂȘtre rĂ©duit de 50 %.
Dans ce cas, le rĂ©sultat dĂ©pend fortement des paramĂštres de l'environnement et du code compilĂ© - pour les trĂšs petits programmes qui se compilent dĂ©jĂ rapidement, la compilation en mode multithread peut ĂȘtre plus lente. De plus, la consommation de mĂ©moire en mode multithread peut augmenter considĂ©rablement : par exemple, lors des tests, une augmentation de la consommation de mĂ©moire allant jusqu'Ă 35 % a Ă©tĂ© observĂ©e.
Source: opennet.ru
