Выпуск новостей завершён 15 сентября 2026. Материалы сохранены на дату публикации. Перейти к инструкциям →

Архив · Полный материал · Tproger

Rust Coreutils 0.11 показывает ошибку кареткой и ускоряет cp на треть

Вышел Rust Coreutils 0.11.0: сообщения об ошибках с указателем на проблемный символ в 28 утилитах, PGO-сборки до 31% быстрее, cp ускорен на 32,93%, совместимость с GNU 653 из 685 тестов.

Разработка · TprogerПолина Ярцева3 минуты
Перейти к тексту ↓
Rust Coreutils 0.11 показывает ошибку кареткой и ускоряет cp на треть
Tproger
Коротко о главномРазвернутьСвернуть
  1. Проект uutils 31 августа выпустил Rust Coreutils 0.
  2. 0, переписанный на Rust набор базовых утилит Linux.
  3. Главное изменение видно сразу: cut , chmod , sort и ещё 25 утилит при ошибке в аргументах показывают строку с указателем на проблемный символ, как это делают компиляторы Rust и Clang.

Проект uutils 31 августа выпустил Rust Coreutils 0.11.0, переписанный на Rust набор базовых утилит Linux. Главное изменение видно сразу: cut , chmod , sort и ещё 25 утилит при ошибке в аргументах показывают строку с указателем на проблемный символ, как это делают компиляторы Rust и Clang. Плюс сборки с PGO, которые, по данным команды, дают до 31% прироста, и cp , ускоренный на 32,93%.

Для тех, кто пользуется обычными GNU Coreutils, ничего не меняется, пока дистрибутив не переключится сам. Но тенденция понятна: Ubuntu уже ставит Rust-реализацию по умолчанию, и вопрос «а чем это отличается» становится практическим. Ответ версии 0.11: сообщениями об ошибках, скоростью и очередным шагом к полной совместимости с GNU.

Как выглядит новая ошибка

Идея, описанная Сильвестром Ледрю в блоге проекта , проста: GNU-утилиты десятилетиями отвечали на опечатку сухой строкой вроде «invalid field specification», и пользователь сам искал, где именно ошибся. Теперь под командой печатается сама команда, а под ней каретка, указывающая на неверный символ, и короткое объяснение. Реализовано это на библиотеке ariadne , той же, что используют некоторые парсеры на Rust.

Важная деталь для тех, кто пишет скрипты: многострочная диагностика включается только в интерактивном терминале. В пайпах и при перенаправлении вывода по умолчанию остаётся привычное однострочное сообщение, поэтому парсеры stderr не сломаются. Управляет этим переменная окружения UUTILS_DIAG со значениями always , never и auto . Попробовать без установки можно в браузерной песочнице проекта.

Скорость: «медленнее GNU теперь считается багом»

Команда прямо формулирует новую политику: «утилита, которая значительно медленнее GNU, теперь считается багом» (перевод редакции). В релизе это подкреплено PGO-сборками для Linux, macOS и Windows, которые, по замерам проекта, дают до 31% прироста. Отдельно названы cp , ускоренный на 32,93%, и join , который в одном из сценариев работает в 2,5 раза быстрее GNU-версии. Это замеры самого проекта на его наборах; на других данных разница будет иной.

Совместимость с GNU

Таблица в релизе сравнивает результаты на тестовом наборе GNU Coreutils: в 0.10.0 было 645 успешных и 28 неудачных тестов из 683, в 0.11.0 стало 653 успешных, 22 неудачных и 10 пропущенных из 685. Оставшиеся расхождения касаются редких флагов и краевых случаев, но именно они всплывают в старых скриптах, поэтому перед заменой системных утилит стоит прогнать свои сценарии.

Из исправлений безопасности названы TOCTOU-проблемы, то есть гонки между проверкой и использованием файла, в mv , cp , rm и chmod ; также закрыты зависания и переполнения. Реализации kill и uptime доработаны для Windows.

Как попробовать

Проект распространяется под лицензией MIT и рассчитан на Linux, Windows, Redox и Fuchsia. Самый безопасный способ познакомиться: поставить uutils рядом с системными утилитами, а не вместо них. По README проекта, сборка из исходников выполняется через cargo , а в ряде дистрибутивов пакет называется uutils-coreutils или rust-coreutils и ставит бинарники в отдельный каталог. Точные имена пакетов зависят от дистрибутива, поэтому проверять их стоит в его репозитории.

Если ваши скрипты парсят stderr утилит, оставьте UUTILS_DIAG в значении auto: тогда в неинтерактивном режиме формат ошибок не изменится.

В релиз вошли 358 pull request от 26 новых участников; всего в проекте отметились более 1000 контрибьюторов. Редакция проверит, как изменится таблица совместимости в 0.12.

Источники: Релиз 0.11.0 на GitHub , Блог uutils: новая диагностика ошибок