Вышла версия 0.11 проекта uutils Coreutils. Это значительное обновление кроссплатформенной реализации GNU Coreutils на Rust.
Одно из самых заметных изменений: новый механизм диагностики на базе Ariadne. Вместо обычной ошибки командной строки утилиты с поддержкой этого механизма теперь могут показать переданный аргумент и поставить символ ^ прямо под проблемным символом, как это делают современные компиляторы.
Улучшенная диагностика уже добавлена во многие утилиты, включая chmod, mkdir, install, tr, sort, cut, head, tail, split, dd, stat, join, ls, df и du. Сообщения могут дополнительно показывать короткие подсказки об ожидаемом синтаксисе и при этом остаются совместимыми с локализованным выводом.
Официальные сборки для Linux, macOS и Windows теперь используют Profile-Guided Optimization (PGO). По оценкам разработчиков, это может ускорить работу до 31%.
Ряд утилит получил дополнительные оптимизации помимо PGO. Заметнее всего изменилась cp: в некоторых операциях она теперь открывает файлы только один раз, что даёт прирост производительности на 32.93%. Кроме того, cp может повторно использовать уже открытый файловый дескриптор назначения, когда операция reflink откатывается к обычному копированию.
Утилита join также значительно ускорилась. По бенчмаркам проекта, она теперь в 1.37 раза быстрее при обработке парных входных данных и может быть примерно в 2.5 раза быстрее, чем GNU join, на такой нагрузке.
Другие оптимизации вошли в dd, tac, od, ptx, nl, tail, expand, unexpand, numfmt и sort. Они уменьшают лишние выделения памяти, системные вызовы и копирование данных. Интересно, что разработчики uutils приняли новое правило: если одна из их утилит заметно медленнее аналога из GNU, это считается ошибкой, о которой стоит сообщать.
Совместимость с GNU Coreutils продолжает улучшаться. uutils Coreutils 0.11 теперь проходит 653 теста из тестового набора GNU, тогда как в версии 0.10 было 645. Количество неудачных тестов сократилось с 28 до 22, а число ошибок в тестовом наборе впервые уменьшилось с одной до нуля. В целом измеренная совместимость с GNU выросла с 94.44% до 95.33%.
Также добавлено несколько совместимых с GNU параметров командной строки. Среди них uname -A/--all-labeled, cut -F и --whitespace-delimited, а также дополнительные параметры и псевдонимы для pr.
Помимо новых параметров, исправлены многочисленные расхождения в поведении команд pr, numfmt, uniq, truncate, paste, join, id, mkdir, more, fold, sort, stat, od и date. В ряде утилит сообщения об ошибках теперь берутся из реальных сообщений операционной системы, где это уместно, вместо собственных или сокращённых вариантов.
Уделили внимание и безопасности, и работе с файловой системой. cp и mv теперь используют операции на основе файловых дескрипторов, чтобы устранить проблемы TOCTOU, связанные с расширенными атрибутами, а rm больше не следует по символической ссылке, подменённой в операнде во время рекурсивного удаления.
Команда chmod получила дополнительную защиту при рекурсивных операциях и работе с символическими ссылками, а cp избегает изменения прав через символическую ссылку назначения.
Также улучшилась поддержка интернационализации. ls теперь сортирует имена файлов с учётом локали, comm использует правила локали при сравнении строк, а cut корректнее обрабатывает многобайтовые поля, байты и разделители.
Дополнительные подробности можно найти в changelog.




Пока нет комментариев. Будьте первым!