LINUX.ORG.RU

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

 , , , ,

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

2

6

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)
Ответ на: комментарий от wandrien

Возможно, что это одна из причин, по которой пошли по пути busybox.

Radjah ★★★★★
()

В отличие от GNU Coreutils реализация на Rust распространяется под пермиссивной лицензией MIT, вместо копилефт-лицензии GPL.

Имхо, для этого всё и делается, а переход на Раст – только дымовая завеса для оправдания всей движухи.

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

Вот да. Даже без учёта новых фишек, полезно порой переизобретать колесо, просто что бы выкинуть накопившееся легаси. Оно и производительности способствует, и мэйнтейнить код становится проще

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

Так его все без рантайма собирают, получается по сути простой сишный код с вызовами из глибси, а вся безопасность ограничивается тем что на этапе написания кода бороучекер стукал по рукам.

uin ★★★
()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от unC0Rr

Потому что красношляпе и ораклу нужен линукс со всем его добром, а GPL не нужен он мешает вендорлок устраивать.

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

Так это обосновывать надо. А тут всё под флагом заботы о безопасности, и вроде как не тупой копипастинг, а работа проделана, код есть…

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

Ну, рантайма в расте нет (gc, шедулер корутин, и т. д.), в этом плане он как сишка. Бинарник большой, потому что включает в себя все растовые зависимости, плюс сама кодогенерация в расте не заморачивается с размером сгенерированного кода. Это проблема.

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

Бинарник большой, потому что включает в себя все растовые зависимости

Вот главная фича. Даже добросовестные авторы не знают, что за код они поставляют.

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

За оптимизацией нужно к алгоритмам.

Алгоритмы от языка не так сильно зависят. Зиг дает минимум сисколов, минимум бинарного кода, и отсутствие динамической линковки.

У меня вон самодельная сокращалка пути для баша получилась размером 9к, из них 8к — два буфера под работу со строкой.

sarumeister
()

Кстати, в новой mesa выпилили vdpau в пользу vaapi, потому что «поддержки vdpau в wayland нет». Такие дела.

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

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

Локализация это l10n

Интернационализация это i18n

Q-Master
()
Ответ на: комментарий от MrClon

Да и зачем пердолиться с разыменованием указателей на освобождённую память или выходом за пределы массива, когда компилятор решает проблему на корню? Сейчас вот «Java Concurrency In Practice» читаю и ловлю себе на мысли что не тем занят. В Rust’е боров позаботится про все эти неприятности. Хорошо если на планете останется сотня-другая специалистов способных указатели складывать в столбик, а остальные люди пусть прыгают на волосатую спину борова и через это продуктивней трудятся в народном хозяйсте.

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

И не надо говорить что боров сам привносит горы пердолинга. Он просто сообщает: «Твой код не будет работать, братан». Это как люди которые не пишут тесты и думают что у них всё работает, что есть обман себя и народа, который доверил программисту вдыхать жизнь в ЭВМ.

perl5_guy ★★★★★
()

Новость про очередное ненужно.

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

Это про одно и то же, но с разных сторон. i18n это когда вы в своей программе предусматриваете, что она может быть на разных языках, заводите функции и хуки, которые будут подставлять сообщения на нужном языке, делаете возможным письмо справа налево и т. п. А l10n это когда вы для программы в которой есть i18n прописываете какие же собственно слова и буквы выводить на экран если у пользователя, например, LANG=ru.

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

Схавайте, Как systemd схавали ;)

Я не схавал.

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

А l10n это когда вы для программы в которой есть i18n прописываете какие же собственно слова и буквы выводить на экран если у пользователя, например, LANG=ru.

Или когда вы вручную редактируете ресурсы (вплоть до замены ASCII-only шрифтов или редактирования битмапов) и строки в программе безо всякого i18n.

Vidrele ★★★★★
()

Я не знаю насколько rust хорош, но как я понимаю большинство от его упоминание тошнит, как и меня.

Если он настолько хороший, то почему о нём кричат из каждого утюга и у него упоротые последователи любители покукарекать брызгая слюной?

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

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

Ну если только... Ну пусть собирают спецдистрибут под себя. Тащемта мы не против, были же всякие security enchanced Irix, SE-VMS и прочие спецсборки.

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

Так coreutils обычно и поставляется в виде одного бинаря, а всё множество утилит (cat, ls, wc и т.д.) - это символьные ссылки на этот бинарь, который понимает как его вызвали через argv[0].

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

Да, попутал. Но не с busybox, а с GNU coreutils в Termux. Там они тоже собраны в один бинарь размером 1.2 Мб. А вот на ноутбуке сотня мелких бинарей.

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

Он просто сообщает: «Твой код не будет работать, братан».

Вот только часто он это сообщает на код, который прекрасно работает. Приходится писать unsafe и скатываться к безопасности уровня Си++.

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

Я не знаю насколько rust хорош, но как я понимаю большинство от его упоминание тошнит, как и меня.

Если посмотреть на код, то точно стошнит. Такое отвратительное месиво, что даже С++ нервно курит в коридоре.

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

Не-а, я с Раста обратно на Си всë перепишу :)

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

Далеко не всегда. Возможно уже половина этих тестов не актуальна. А луддиты со скриптами из начала 2000-х все равно не используют убунту.

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

а всё множество утилит (cat, ls, wc и т.д.) - это символьные ссылки на этот бинарь, который понимает как его вызвали через argv[0].

Нет.

ls -l /bin/{cat,ls,wc}
-rwxr-xr-x 1 root root  43376 июн 21  2021 /bin/cat
-rwxr-xr-x 1 root root 154360 июн 21  2021 /bin/ls
-rwxr-xr-x 1 root root  55608 июн 21  2021 /bin/wc

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

Давай ты свою рекламу кому-то другому продавай. Концептуально проблемы производительности софта при сравнении двух компилируемых языков возникают из-за неоптимальных алгоритмов.

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

Возможно уже половина этих тестов не актуальна.

Если они не актуальны, то зачем тогда их запилили?

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

Та же, что и между докером и кубернетисом :)

Интернационализация — это много локализаций.

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

который прекрасно работает

Вот об этом я и писал :3

P.S. 100% боров не идеален и может хрюкнуть что-нибудь ложноположительное, но ИМХО чаще разработчики просто не понимают чё он от них хочет. Наверное «Java Concurrency In Practice» я таки дочитаю (:

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

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

То есть люди переписывают критические части программы с питона на С исключительно из любви к искусству?

VIT ★★
()

Эталонное ненужно. Или сознательная попытка развалить GNU Coreutils комьюнити.

x-signal ★★
()
Ответ на: комментарий от VIT

Нет. Ради упрощения дальнейшей поддержки же. Чтобы, раз уж руст помогает избегать утечек памяти by design, в дальнейшем Вася не наговнякал чего-то привычного ему по опыту сей. С в смысле.

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

при сравнении двух компилируемых языков возникают из-за неоптимальных алгоритмов.

Вот сравнение двух компиллируемых языков. Один с контейнерами и вечно дергает malloc/free, второй живет с мемори ареной. У мемори арены алгоритм выделения и проще, и быстрее, и сисколы не дергает.

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

Какой раз уже пытаюсь донести, что проблемы производительности - это проблемы алгоритма. Если говнокодить в C и писать чисто в Zig, то конечно можно героически петь о преимуществах языка.

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

uutils - это один бинарник размером 13 мегабайт.

А ты точно release собрал? Если уж сравнивать одно с другим, то я бы собирал в статику относительно musl и пострипал. uutils всё ещё будет ощутимо больше, но не 13 мегабайт.

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

Раст хреново умеет в динамическую линковку, а для статической *GPL противопоказаны.

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

Если говнокодить в C

Вот другая самодельная утилитка. Берет время, форматирует, кладет в буфер обмена. Тот вариант на Си, который чистый, — он будет форматировать в рантайме, после подгрузки libc.so.

Все ж у Zig проблемы в иной плоскости. Не в плоскости оптимизаций и быстроты.

sarumeister
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.