Rust 1.90: rustc переключается на LLD в качестве стандартного компоновщика на x86_64 Linux

RustИнструменты сборкиDevOps

Основное обновление

Проект Rust объявил, что начиная с Rust 1.90.0 stable (запланирован на 2025-09-18) rustc будет использовать компоновщик LLVM LLD по умолчанию для целевой платформы x86_64-unknown-linux-gnu. В бенчмарках это изменение сокращает время компоновки до 7 раз для инкрементальных сборок (пример с ripgrep показал ~40% ускорение от начала до конца для инкрементальных отладочных пересборок и ~20% улучшение для полных отладочных сборок). Новый стандарт уже доступен в бета-версии 1.90 — проекты должны протестировать свои сборки на бета-версии и сообщить о проблемах, если они обнаружат регрессии компоновщика.

Почему это важно

Это практическое, ощутимое улучшение производительности для разработчиков Rust на Linux и систем CI: компоновка часто занимает доминирующую часть времени сборки для больших бинарных файлов и отладочных сборок, поэтому более быстрая компоновка напрямую сокращает циклы редактирования-компиляции и время выполнения CI. Для команд это может означать меньшие очереди CI, меньшее время и затраты на исполнителей, а также более быструю итерацию разработчиков без изменения кода. Поскольку rust-lld поставляется с инструментальными цепочками, вам не нужно устанавливать системные компоновщики, чтобы получить выгоду; однако изменение специфично для целевой платформы (x86_64 Linux) и не является глобальным поведением инструментальной цепочки для других платформ.

Существует небольшая поверхность совместимости: LLD не является побитово совместимым с GNU ld в редких случаях, поэтому некоторые библиотеки, которые полагались на устаревшую семантику компоновщика, могут потребовать флаги компоновки (или отказ). Если вы столкнетесь с проблемами, вы можете вернуться к предыдущему поведению для каждого проекта, установив RUSTFLAGS или .cargo/config.toml с -Clinker-features=-lld (или добавив эквивалентный флаг в вашу сборку CI). Практически рекомендуемые немедленные действия: протестируйте свои репозитории на бета-версии 1.90 в CI, обновите любые зафиксированные образы Docker/конфигурации rustup, используемые в CI, до бета/стабильного канала для проверки, и добавьте флаг отказа в шаблоны CI только в случае появления реальной несовместимости компоновщика. Также следите за длительными сборками, которые уже ограничены ресурсами, поскольку параллелизм LLD может увеличить использование CPU во время компоновки; если это повлияет на ваших исполнителей, ограничьте параллелизм или временно используйте отказ.

Это изменение является улучшением инструментов с низким риском и высокой отдачей для разработки Rust на Linux с ясными операционными и производственными преимуществами для разработчиков; подготовьтесь, запустив бета-версию в CI, следите за регрессиями времени компоновки и используйте задокументированный флаг отказа, когда это необходимо.

Источник

Читать дальше