uutils Coreutils 0.11: Значне оновлення для Rust-реалізації

uutils Coreutils 0.11: Значне оновлення для Rust-реалізації GNU Coreutils

Випущено uutils Coreutils 0.11, яке привносить суттєве оновлення для Rust-реалізації GNU Coreutils. Цей проект пропонує реалізації багатьох стандартних утиліт командного рядка, поширених на Unix-подібних системах, таких як cp, ls, mv, rm, cut, sort, dd, chmod та десятки інших.

Поліпшення діагностики та продуктивності

Основною метою проекту є максимально наблизити його до поведінки GNU Coreutils, зберігаючи крос-платформеність. Однією з найбільш помітних змін є новий діагностичний механізм на основі Ariadne. Тепер утиліти можуть відображати переданий аргумент та вказувати на проблемний символ, що нагадує сучасну діагностику компіляторів. Поліпшена діагностика вже додана до багатьох утиліт, включно з chmod, mkdir, install, tr, sort, cut, head, tail, split, dd, stat, join, ls, df та du.

Додатково, офіційні збірки для Linux, macOS та Windows тепер використовують оптимізацію, керовану профілем, що дозволяє підвищити продуктивність до 31%. Утиліта cp тепер відкриває файли лише один раз під час певних операцій, досягаючи підвищення продуктивності на 32.93%. Цікаво, що uutils розробники виступили з новою політикою: якщо одна з їх утиліт суттєво повільніша за аналог GNU, це вважається помилкою, яку варто повідомити.

Покращена сумісність з GNU Coreutils

uutils Coreutils 0.11 продовжує вдосконалювати сумісність з GNU Coreutils, проходячи 653 тести з тестового пакету GNU, у порівнянні з 645 в версії 0.10. Кількість невдалих тестів зменшилася з 28 до 22, а помилки тестового пакету знизилися з одного до нуля вперше. Загалом сумісність проекту з GNU зросла з 94.44% до 95.33%.

Крім нових опцій, внесено численні виправлення в поведінці команд, таких як pr, numfmt, uniq, truncate, paste, join, id, mkdir, more, fold, sort, stat, od та date. Повідомлення про помилки в кількох утилітах тепер використовують реальні повідомлення про помилки операційної системи, де це доречно.

Поліпшення безпеки та підтримка міжнародних стандартів

Безпека та обробка файлової системи також були увагою. Утиліти cp та mv тепер використовують операції на основі файлових дескрипторів для вирішення проблем TOCTOU, що стосуються розширених атрибутів. Утиліта rm більше не слідує за символічним посиланням, яке було підставлено під час рекурсивного видалення. Таким чином, команда chmod була посилена в контексті рекурсивних операцій і символічних посилань.

Завершуючи, підтримка міжнародної стандартизації також покращилася. Утиліта ls тепер сортує імена файлів з урахуванням локалі, команда comm використовує правила локалі при порівнянні рядків, а cut правильніше обробляє багатобайтові поля, байти та роздільники.

Для додаткових деталей ознайомтеся з чек-листом змін.