
Як прискорився rustc у вересні: середній час компіляції зменшився на 4,57%
З 29 липня до 28 вересня 2026 року середній час компіляції rustc зменшився на 4,57%: з 629 бенчмаркових вимірювань 555 покращилися, лише 74 погіршилися. Огляд опублікував Nicholas Nethercote.
Nicholas Nethercote опублікував 30 вересня черговий огляд продуктивності компілятора Rust. Від попереднього звіту минуло два місяці, і за цей період rustc помітно прискорився.
Загальний результат
За вимірюваннями періоду з 29 липня до 28 вересня 2026 року середній час компіляції зменшився на 4,57%. З 629 бенчмаркових вимірювань 555 покращилися, лише 74 погіршилися, а кілька бенчмарків показали двозначне відсоткове зниження. Автор називає цей результат «зеленим морем».
rustdoc, Clippy і LLVM 23
Значне прискорення rustdoc здійснив Noah Lev і пояснив в окремому пості, як він цього досяг. Для Clippy PGO увімкнув Jakub Beránek (#159642): wall-time покращився на більшості бенчмарків Clippy, у найкращому випадку на 18%.
Nikita Popov оновив версію LLVM, використану в компіляторі, до LLVM 23 (#158734). Оновлення LLVM зазвичай дає прискорення: середній wall-time на всіх бенчмарках зменшився на 1,2%, що для однієї зміни є суттєвим.
Новий borrow checker і trait solver
У каналі Nightly увімкнено новий borrow checker Polonius Alpha. Він точніший і приймає деякі валідні програми, які старий підхід відхиляв, хоча виконує більше роботи й в окремих випадках також збільшує час компіляції. Це торкнулося й популярної бібліотеки serde. Jack Huey (#161938) зробив обчислення liveness на вимогу: для serde кількість інструкцій зменшилася на 3-5%. У #163027 він змінив структуру даних і інлайнінг, що дає зниження менш ніж на 1% на більшості бенчмарків.
У Nightly також увімкнено новий trait solver, який у невеликій частині випадків працює повільно. Jana Dönszelmann написала детальний пост про його продуктивність. Зміни Nethercote (#160479, #160605, #160801, #160892, #161077, #161211) різко зменшили час компіляції на деяких виняткових крейтах: в одному місці на 50%, в іншому на 25%, ще в одному на 15%, а в одному стрес-тесті ще більше.
xmakro і dataflow аналіз
Новий контриб'ютор xmakro подав кілька оптимізацій. У #157281 він покращив обробку impl під час побудови графа спеціалізації: кількість циклів на всіх бенчмарках зменшилася в середньому на 1,58%. У #158059 прискорив завантаження даних інкрементальної компіляції (у найкращому випадку 6%), у #160473 зменшив алокації на шляху гарячих obligations (2%), а в #160268 замінив динамічну диспетчеризацію статичною.
Nethercote змінив алгоритм обходу CFG для dataflow-аналізів (#160193). У крейті cranelift-codegen одна функція має понад 18 000 базових блоків: зі старим алгоритмом аналіз EverInitializedPlaces потребував 1,5 мільйона викликів до fixpoint, а з новим — 90 000. Для check-збірки цього крейта wall-time зменшився приблизно на 30%. У #160033 EverInitializedPlaces було додатково вдосконалено, що зменшило кількість інструкцій на бенчмарку match-stress на 17%.
Серед решти змін — #160535, де Chris Denton збільшив типовий розмір стека (у найкращому випадку майже на 3%). Nethercote завтра починає роботу в Hexcat над проєктом оптимізації продуктивності rustc.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.