У нічних зборках Rust розширено можливості розпаралелювання компіляції.

У фронтенді компілятора Rust, що виконує такі завдання, як синтаксичний аналіз, перевірка типів та аналіз запозичень, реалізована підтримка паралельного виконання, що дозволяє значно скоротити час компіляції. Розпаралелювання вже доступне в нічних збірках Rust і включається за допомогою опції "-Z threads = 8". У стабільну гілку розглянуту можливість планують включити у 2024 році.

Робота над скороченням часу компіляції в Rust триває кілька років. За перші 10 місяців 2023 року час компіляції скоротився в середньому на 13%, пікове споживання пам'яті знизилося на 15%, а розмір файлів, що генеруються, зменшився на 7%. На цьому етапі прискорення було досягнуто рахунок оптимізації самого компілятора. Після цього розробники перейшли до роботи над прискоренням за допомогою розпаралелювання операцій під час компіляції.

До цього часу розпаралелювання в Rust забезпечувалося переважно на рівні процесів, наприклад, пакетний менеджер Cargo може запускати кілька процесів rustc для одночасної компіляції декількох пакетів. Підтримка розпаралелювання також присутня на стороні бекенда, що виконує операції, пов'язані з генерацією коду - бекенд Rust може генерувати код частинами, які надалі LLVM може обробляти паралельно. Фронтенд досі міг обробляти вихідний код лише у однопоточному режимі.

Для підтримки розпаралелювання фронтенд переведений на використання бібліотеки Rayon і значно перероблений, наприклад, багато його частин тепер синхронізуються за допомогою м'ютексів та блокувань читання/запису, а в коді використовуються атомарні типи. При тестуванні продуктивності нова реалізація, що розпаралелюється, могла виконувати компіляцію до 2% повільніше при роботі в однопоточному режимі (-Z threads=1), але коли потоків більше одного швидкість значно зростала. Наприклад, при встановленні 8 потоків (-Z threads=8) у деяких ситуаціях час компіляції вдавалося скоротити на 50%.

При цьому результат сильно залежить від налаштувань оточення і коду, що компілюється - для дуже маленьких програм, які і так компілюються швидко, компіляція в багатопоточному режимі може виконуватися повільніше. Крім того, споживання пам'яті в багатопотоковому режимі може значно зростати, наприклад, у тестах спостерігалося зростання споживання пам'яті до 35%.

Джерело: opennet.ru

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster