Rust 1.90.0: линкером по умолчанию на Linux стал LLD, а cargo publish научился публиковать воркспейс
18.09.2025Вышел Rust 1.90.0. Главное изменение невидимо в коде: на платформе x86_64-unknown-linux-gnu компилятор теперь линкует линкером LLD вместо GNU ld. Инкрементальная сборка стала примерно на 40 процентов быстрее, сама линковка — в семь раз.
Смена линкера по умолчанию
Линуксовые дистрибутивы поставляют GNU ld, и он не самый быстрый: программа последовательно проходит по своим структурам, не используя параллелизм в полную силу. LLD создан в LLVM и линкует быстрее, особенно когда данных много.
По замеру на примере ripgrep, приведённому в предварительном анонсе этого изменения: инкрементальная пересборка сокращает время линковки в семь раз, что даёт около 40 процентов сокращения времени сборки целиком. Чистая отладочная сборка с нуля — около 20 процентов. Выигрыш тем больше, чем крупнее бинарный файл и чем больше в нём отладочной информации, то есть ровно в тех проектах, где сборка и так была долгой.
Оговорка разработчиков: часть выигрыша приходит от параллелизма, а это может быть нежелательно на машинах с ограниченными ресурсами или на больших проектах, уже упирающихся в предел железа.
Обратная совместимость и откат
В подавляющем большинстве случаев LLD полностью совместим с GNU ld, и разница будет только в скорости. Но отдельные крейты опираются на особенности GNU ld — и для них понадобятся дополнительные линковочные аргументы. Откат предусмотрен флагом компилятора -C linker-features=-lld.
Практический совет: перед обновлением на 1.90 стоит прогнать сборку в CI. Ничего не сломается молча — но предупреждениялинкера появятся на этапе сборки, и их лучше увидеть заранее.
cargo publish --workspace
Появилась команда публикации всех крейтов воркспейса разом. Крейты выкладываются в правильном порядке с учётом зависимостей между ними — то есть больше не нужно вручную соблюдать последовательность.
Проверка публикации прогоняет сборку по всему набору, как при пробном запуске. Но сама публикация не атомарна: сетевая ошибка посередине оставит воркспейс опубликованным частично. Об этом сказано прямо, и знать об этом стоит заранее.
Что ещё стабилизировано
- семейство вычитания со знаком для беззнаковых целых:
checked_sub_signed,overflowing_sub_signed,saturating_sub_signed,wrapping_sub_signed— вычитание, когда результат может оказаться отрицательным, без ручных проверок; impl CopyиHashдляIntErrorKind;- сравнения между
CStr,CString,Cow<CStr>и строками —CStrтеперь можно сравнивать прямо сstrиString; - в константных контекстах —
slice::reverseи функции округленияfloor,ceil,trunc,fract,round,round_ties_evenдля чисел с плавающей точкой.
Также подтверждено понижение x86_64-apple-darwin до второго уровня.
Оригинал
Announcing Rust 1.90.0 от 18 сентября 2025 года; предварительный анонс с замерами — от 1 сентября
Упоминаний: 1 · Просмотров: 3