LINUX.ORG.RU

uutils 0.2.0 и 0.2.2, вариант GNU Coreutils на языке Rust

 , , , ,

uutils 0.2.0 и 0.2.2, вариант GNU Coreutils на языке Rust

1

4

6 сентября опубликован выпуск 0.2.0 проекта uutils coreutils (Rust Coreutils), развивающего аналог пакета GNU Coreutils, написанный на языке Rust. В состав coreutils входит более ста утилит, включая sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls. Целью проекта является создание кроссплатформенной альтернативной реализации Coreutils, среди прочего способной работать на платформах Windows, Redox и Fuchsia.

Rust Coreutils применяется в дистрибутивах AerynOS (Serpent OS) и Apertis, а также будет задействован по умолчанию в осеннем выпуске Ubuntu 25.10. В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL. Дополнительно той же командой разработчиков развиваются написанные на Rust аналоги наборов утилит util-linux, diffutils, findutils и procps, а также программ sed и login.

В новой версии Rust Coreutils:

  • Пакет признан полностью готовым для рабочего применения в Ubuntu. Устранены все проблемы, мешавшие переходу Ubuntu по умолчанию на Rust Coreutils.

  • Добавлена поддержка локализации и интернационализации. Введена в строй инфрастурктура для поддержания переводов сообщений на разные языки. Учтены параметры локали при форматировании вывода и начат перевод на разные языки сообщений об ошибках. Для поддержки многоязычности задействована система локализации Fluent, развиваемая Mozilla и используемая в Firefox.

  • Добавлена поддержка Unicode. Символы Unicode, в том числе emoji, теперь могут применяться при обработке содержимого и параметров, например, в качестве разделителей полей: echo "🍔🍟🥤" | cut -d"🍟" -f1.

  • Проведена оптимизация производительности утилит tr, sort и cat. Производительность утилиты tr повышена в 15 раз - ранее данная утилита была медленнее GNU tr в 9.8 раз, а теперь быстрее в 1.58 раза.

  • Улучшена совместимость с эталонным тестовым набором GNU Coreutils, при прохождении которого успешно выполнено 538 тестов (в прошлой версии 522), 52 (65) теста завершилось неудачей, а 27 (31) тест был пропущен.

  • Улучшена совместимость с GNU Coreutils для утилит date, du, fmt, ls и sort.

  • Расширены возможности, устранены проблемы и добавлены недостающие опции для утилит basenc, basename, cat, chmod, chown, cksum, cp, split, date, dd, du, echo, env, expr, factor, fold, hashsum, head, install, ln, logname, ls, mkdir, mkfifo, mktemp, more, mv, nice, nl, od, pr, printf, pwd, realpath, rm, shred, sort, stat, stdbuf, stty, sync, tail, tee, timeout, touch, tr, uname, unexpand, uptime, users и who.

Версия 0.2.2 содержит исправления критических ошибок. Эти исправления обеспечивают безопасное распространение и развёртывание на разных платформах. Разработчики также улучшили производительность base64, сделав её в 1.56 раза быстрее, чем в версии GNU.

>>> Подробности на opennet



Проверено: dataman ()
Последнее исправление: hobbit (всего исправлений: 6)

Rust безнадёжен. Ничего нового не пишется, только старое переписывается.

Camel ★★★★★
()
Ответ на: комментарий от Camel

Не говори. От Rust-а просто гигатонны шума, при 0 (ноль) полезного выхлопа. Ни про один другой язык такого треша не припомню…

Язык маркетоидов, ей богу

Merlin86
()

52 (65) теста завершилось неудачей, а 27 (31) тест был пропущен.

Готово для прода!

будет задействован по умолчанию в осеннем выпуске Ubuntu 25.10

PPP328 ★★★★★
()

А как оно слинковано? Динамически? Сколько жрёт места и памяти в сравнении?

GAMer ★★★★★
()
Ответ на: комментарий от yars068

Вот похакают тебя через ls, или, не приведи господь, uname, будешь знать! :)

Merlin86
()

А они не указывают - сколько там кода переведено ИИ? думаеццо - процентов 99.

alysnix ★★★
()
Ответ на: комментарий от GAMer

Попробовал сравнить gnu sort из sort и этого уутилса. Входные данные - base64 /dev/urandom | head -c 50000000 > test.data

gnu sort :
real	0m0.491s
user	0m1.633s
sys	0m0.098s

В пике потребление памяти - 131712

uutils sort:
real	0m0.352s
user	0m1.091s
sys	0m0.070s

В пике потребление памяти - 101248

Насчет линковки:

$ ldd ~/.cargo/bin/coreutils
	linux-vdso.so.1 (0x00007ffe9d9f4000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007c719cdd2000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007c719cce9000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007c719ca00000)
	/lib64/ld-linux-x86-64.so.2 (0x00007c719d9c3000)

uutils - это один бинарник размером 13 мегабайт. По сравнению с busybox (828k) огромный размер, конечно. По сравнению с gnu coreutils не знаю, сложно сравнивать.

provaton ★★★★★
()
Последнее исправление: provaton (всего исправлений: 2)
Ответ на: комментарий от provaton
$ apt show coreutils
Package: coreutils
Version: 9.1-1
Priority: required
Essential: yes
Section: utils
Maintainer: Michael Stone <mstone@debian.org>
Installed-Size: 18,5 MB

Debian 12

Плюс-минус одинаково должно быть.

Radjah ★★★★★
()
Ответ на: комментарий от provaton

Не уверен что тесты в секунду показательны, особенно в эпоху процессоров с плавающей частотой - второй тест, запущенный следом, всегда будет быстрее первого тупо из-за того что проц успел в буст уйти но не успел заснуть назад - сам на это на днях накололся :)

rukez ★★★★★
()

молодцы!
еще немного переписать осталось, еще чуточку!

olelookoe ★★★
()
Ответ на: комментарий от AleksK

538 пройдено, 79 - нет.

Чот около 12% сценариев там не работают. Класс. Ш-штабильность. Офигенно будет читать новости о том, что скрипты установки/настройки на новой бубунте перестали работать/стали делать рандомные вещи

PPP328 ★★★★★
()

Опять же - опять всё делается для корпов. Смена лицензии на ту, под которой корпы могут что угодно делать с кодом и не давать исходники. GPL выкидывается всюду и усиленно суётся MIT

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Это делается под диктовку Дарпы и АНБ а корпы это их ручные марионетки, так что корпы ширма, просьба перейти на раст где только возможно исходила от АНБ и Дарпа, если дистры хотят гранты, хотят быть в системе, прийдётся делать как велел ВПК, потому как линукс не ограничивается десктопами анонов, он ещё и в продукции ВПК используется, та же история со снопами

Ты готов к снопам, $USER ?

RedTerror
()
Ответ на: комментарий от RedTerror

QNX и прочие микроядра где надо припилены, но новейшая продукция ВПК разрабатывается на линуксе и обкатывается под его управлением

RedTerror
()

Да, не успели BSDшники всё переписать, теперь тут эти.

steemandlinux ★★★★★
()

Добавлена поддержка Unicode.

способной работать на платформах Windows

Или я что делаю не так, или одно из двух.

G:\build\coreutils>target\release\coreutils.exe ls i:\*.mkv
'i:\[Seiichi] Azur Lane - 06 [BD 1080p HEVC FLAC] [E8EC0FF4].mkv'
'i:\'$'\320\241\321\203\320\264\320\267\321\203\320\274\321\215'', '$'\320\267\320\260\320\272\321\200\321\213\320\262\320\260\321\216\321\211\320\260\321\217'' '$'\320\264\320\262\320\265\321\200\320\270''.mkv'
Radjah ★★★★★
()
Ответ на: комментарий от PPP328

всё делается для корпов

Кто девушку ужинает, тот её и танцует.

Radjah ★★★★★
()
Ответ на: комментарий от Zlogene

От systemd пользы больше, чем вреда. За ним хоть технологический смысл есть. А тут только политически-мотивированное действие. Так что вряд ли. Пройдет это.

gns ★★★★★
()
Ответ на: комментарий от Camel

И в один прекрасный день в Ubuntu, Debian и Arch по-умолчанию будет идти uutils вместо coreutils. Можно будет, конечно, и coreutils поставить, только из-за жирности coreutils, неизбежного изменения окружения и желаний пользователей, проблемы совместимости никуда не денутся. И перенесут этот coreutils в AUR, сторонние репозитории и дистры для отшельников.

kaldeon
()
Ответ на: комментарий от Radjah

Попробовал сравнить gnu sort из sort и этого уутилса

Если оно у тебя еще осталось - можешь попробовать chmod -R USER:GROUP на большом количестве файлов? Все так же file list too long?

windows10 ★★★★★
()
Ответ на: комментарий от vbcnthfkmnth123

Зафиксируй частоту и тогда вполне и потуши лишние процессы

RedTerror
()

а также будет задействован по умолчанию в осеннем выпуске Ubuntu 25.10.

Видимо, выходит плюс один пакет, который в минте разрабы будут заменять на нормальный.

Smacker ★★★★★
()
Ответ на: комментарий от provaton

Как и следовало ожидать, примерно то же самое.

tiinn ★★★★★
()

Вообще, мне кажется порочной идея ожидать, что от переписывания программы на другом языке как-то принципиально изменится её производительность/потребление памяти.

Кажется, ни один переписыватель на расте такое не декларировал.

tiinn ★★★★★
()
Ответ на: комментарий от Radjah

да, но только есть один нюанс:

#ls -l /usr/bin/sort
-rwxr-xr-x 1 root root 118456 сен 20 2022 /usr/bin/sort

а не все 100500 мб сразу в память

mumpster ★★★★★
()
Ответ на: комментарий от provaton

Вы так сравниваете, как будто это сам язык раст даёт этот прирост. Тогда как его даёт оптимизация, которую можно было провести и на C.

rumgot ★★★★★
()

Добавлена поддержка локализации и интернационализации.

А в чём разница между локализацией и интернационализацией?

Mischutka ★★★★★
()
Ответ на: комментарий от Merlin86

Ни про один другой язык такого треша не припомню…

Чел, лет 15 назад всё на python переписывали. Забыл уже?

MrClon ★★★★★
()
Ответ на: комментарий от Mischutka

А в чём разница между локализацией и интернационализацией?

Мама интернационализация, папа локализация.

sarumeister
()
Ответ на: комментарий от provaton

Ну и неплохо! Почему спрашивал - считаю, что базовый утиль должен быть собран статически, чтобы работать при любых условиях, а у раста с этим вроде были проблемы...

GAMer ★★★★★
()
Ответ на: комментарий от windows10

Не уверен, что это достаточно много. Я попробовал на каталоге с собранной программой.

$ find -type f | wc -l
4279
$ ./target/release/coreutils chown radjah:radjah -R .
$
Radjah ★★★★★
()
Ответ на: комментарий от mumpster

Из README в репе:

If you don't want to build the multicall binary and would prefer to build the utilities as individual binaries, that is also possible. Each utility is contained in its own package within the main repository, named «uu_UTILNAME». To build individual utilities, use cargo to build just the specific packages (using the --package [aka -p] option). For example:

cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm

Можно одним куском, можно порезать.

Но есть нюанс.

$ ls -la /bin/chown target/release/chown
-rwxr-xr-x 1 root   root     72752 сен 20  2022 /bin/chown
-rwxr-xr-x 2 radjah radjah 1430384 сен 12 08:43 target/release/chown
Radjah ★★★★★
()
Последнее исправление: Radjah (всего исправлений: 1)
Ответ на: комментарий от rukez

ну я запускал несколько раз, конечно. В любом случае спрашивали не про скорость, а про использование РАМ. А оно от прогрева процессора уж никак не зависит.

provaton ★★★★★
()
Ответ на: комментарий от Camel

только старое переписывается

Это тоже полезная работа. Старые утилиты давно прекратили развиваться, а мир не останавливается. И как бы вам не казалась бесполезной поддержка emoji в качестве разделителей, кому-то может понадобиться и утилиты шелла должны их корректно обработать.

MoldAndLimeHoney ★★
()
Ответ на: комментарий от GAMer

Можно собирать статически, но из коробки это поддерживается только с musl. С gnu libc я не знаю как статически собирать, хотя теоретически это должно быть возможно.

Но олды вообще в целом всегда топят за динамическую линковку, только она Ъ.

provaton ★★★★★
()
Ответ на: комментарий от provaton

поддерживается только с musl

Если статически, то какая разница с чем? )

GAMer ★★★★★
()

Хотел ответить provaton, но он коммент потёр.

Повторю так.

Там либо один рантайм в большом бинарнике, либо по рантайму в каждом.

По-хорошему надо погонять тесты на больших наборах данных, чтобы сравнить потребление памяти. А то получается оценка качества еды по размеру сисек поварихи.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

по рантайму в каждом

И так будет со всем софтом на Rust.

Если всё на Rust переписать, жор Десяточки ерундой покажется.

wandrien ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.