Работа над сокращением времени компиляции в Rust ведётся уже несколько лет. За первые 10 месяцев 2023 года время компиляции сократилось в среднем на 13%, пиковое потребление памяти снизилось на 15%, а размер генерируемых файлов уменьшился на 7%. На данном этапе ускорение было достигнуто за счёт оптимизаций самого компилятора. На новом этапе разработчики намерены добиться значительного ускорения за счёт обеспечения распараллеливания операций во время компиляции.
До сих пор распараллеливание в Rust обеспечивалась в основном на уровне процессов, например, пакетный менеджер Cargo может запускать несколько процессов rustc для одновременной компиляции нескольких пакетов. Поддержка распараллеливания также присутствует на стороне бэкенда, выполняющего операции, связанные с генерацией кода — бэкенд Rust может генерировать код частями, которые в дальнейшем LLVM может обрабатывать параллельно. Фронтэнд же до сих пор мог обрабатывать исходный код только в однопоточном режиме.
Для поддержки распараллеливания фронтэнд переведён на использование библиотеки Rayon и значительно переработан, например, многие его части теперь синхронизируются с помощью мьютексов и блокировок чтения/записи, используются атомарные типы. При тестировании производительности новая распараллеливаемая реализация может выполнять компиляцию до 2% медленнее при работе в однопоточном режиме (-Z threads=1), но когда потоков больше одного скорость значительно возрастает. Например, при установке 8 потоков (-Z threads=8) время компиляции может сократиться на 50%.
При этом результат сильно зависит от настроек окружения и компилируемого кода — для очень маленьких программ, которые и так компилируются быстро, компиляция в многопоточном режиме может выполняться медленнее. Кроме того, потребление памяти в многопоточном режиме может значительно увеличиться, например, в тестах наблюдался рост потребления памяти до 35%.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60095