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