V sprednjem delu prevajalnika Rust, ki opravlja naloge, kot so sintaktična analiza, preverjanje tipov in analiza prevzemov, je bila omogočena podpora za paralelno izvajanje, kar bistveno skrajša čas prevajanja. Paralelizacija je že na voljo v nočnih gradnjah Rust in se vključuje z uporabo možnosti „-Z threads=8“. V stabilno vejo načrtujejo vključitev te možnosti leta 2024.
Zmanjšanje časa prevajanja v Rustu poteka že vrsto let. V prvih 10 mesecih leta 2023 se je povprečni čas prevajanja zmanjšal za 13 %, vrhunska poraba pomnilnika se je zmanjšala za 15 %, velikost generiranih datotek pa se je zmanjšala za 7 %. V tej fazi so bila pospešenja dosežena z optimizacijami samega prevajalnika. Po tem so se razvijalci osredotočili na pospeševanje s paralelizacijo operacij med prevajanjem.
Doslej je bila paralelizacija v Rustu večinoma omogočena na ravni procesov; na primer, upravitelj paketov Cargo lahko za hkratno prevajanje več paketov zažene več procesov rustc. Podpora za paralelizacijo je prisotna tudi na strani zadnjega dela, ki izvaja operacije, povezane z generacijo kode - zadnji del Rust lahko generira kodo v delih, ki jih lahko nato LLVM obdeluje hkrati. Sprednji del pa je doslej lahko obdeloval izvorno kodo samo v enojnem načinu.
Za podporo paralelizaciji je bil sprednji del preusmerjen na uporabo knjižnice Rayon in je bil precej predelano; na primer, mnogi njegovi deli zdaj sinhronizirajo z mutexi in zaklepanjem branja/pisanja, medtem ko se v kodi uporabljajo atomski tipi. Pri testiranju zmogljivosti je nova paralelizirana izvedba morda prevajala do 2 % počasneje pri delu v enojnem načinu (-Z threads=1), vendar se je hitrost pri več kot enem niti znatno povečala. Na primer, pri nastavitvi 8 niti (-Z threads=8) je v nekaterih situacijah čas prevajanja uspelo zmanjšati za 50 %.
Pri tem je rezultat močno odvisen od nastavitev okolja in kompiliranega kode — za zelo majhne programe, ki se že tako hitro kompilirajo, lahko kompilacija v večnitnem načinu poteka počasneje. Poleg tega se lahko poraba pomnilnika v večnitnem načinu znatno poveča, na primer, v testih je bilo opaženo povečanje porabe pomnilnika do 35%.
Izvor: opennet.ru
