uutils Coreutils 0.11 на основе Rust: более высокая производительность, улучшенные сообщения об ошибках
Вышла версия 0.11 uutils Coreutils, в которой существенно обновлена кроссплатформенная реализация GNU Coreutils на основе Rust.
Одним из наиболее заметных изменений является новый диагностический движок на базе Ariadne. Вместо того, чтобы возвращать только традиционную ошибку командной строки, затронутые утилиты теперь могут отображать предоставленный аргумент и помещать курсор непосредственно под проблемным символом, аналогично диагностике, производимой современными компиляторами.
Улучшенная диагностика уже добавлена в длинный список утилит, включая chmod, mkdir, installtr, sort cuthead, tail splitdd, stat joinls, df du. Сообщения также могут содержать короткие подсказки, объясняющие ожидаемый синтаксис, оставаясь совместимыми с локализованным выводом.
Что касается производительности, то в официальных сборках для Linux, macOS и Windows теперь используется оптимизация на основе профилей, которая, по словам разработчиков, может повысить производительность до 31 %.
Несколько утилит получили дополнительную оптимизацию помимо PGO. В частности, cp теперь открывает файлы только один раз во время определенных операций, что повышает производительность на 32,93 %. Кроме того, он может повторно использовать уже открытый дескриптор файла назначения, когда операция reflink возвращается к обычному копированию.
The join utility also received a significant speed boost. According to the project’s benchmarks, it is now 1.37 times faster when processing paired input and can be around 2.5 times faster than GNU join in that particular workload.
Другие улучшения производительности коснулись dd, tac, od, ptx, nl, tail, expand, unexpand, numfmt и sort, что позволило сократить ненужное выделение памяти, системные вызовы и копирование данных. Интересно, что разработчики uutils приняли новую политику: если одна из их утилит работает значительно медленнее, чем ее аналог в GNU, они считают это ошибкой, о которой стоит сообщить.
Важно отметить, что совместимость с GNU Coreutils продолжает улучшаться. uutils Coreutils 0.11 теперь проходит 653 теста из набора тестов GNU по сравнению с 645 в версии 0.10. Количество неудачных тестов снизилось с 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 теперь используют операции на основе файловых дескрипторов для решения проблем, связанных с расширенными атрибутами, а rm больше не следует за символической ссылкой, преобразованной в операнд при рекурсивном удалении.
Кроме того, команда chmod была усовершенствована с точки зрения рекурсивных операций и работы с символическими ссылками, а cp позволяет избежать изменения разрешений через символическую ссылку назначения.
Наконец, была улучшена поддержка интернационализации. ls теперь сортирует имена файлов с учетом языкового стандарта, comm использует правила языкового стандарта при сравнении строк и cut более корректно обрабатывает многобайтовые поля, байты и разделители.
Подробнее см. в журнале изменений.
Редактор: AndreyEx
Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.