Projekt posixutils-rs 0.2.1 został wydany. Jego celem jest opracowanie zbioru narzędzi wiersza poleceń w Rust, które są wymienione w standardzie POSIX i spełniają jego wymagania (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed itd.). Zawsze, gdy jest to możliwe, w rozwoju używane są istniejące pakiety crate. Kod posixutils-rs jest dystrybuowany na licencji MIT.
Projekt nastawiony jest przede wszystkim na osiągnięcie zgodności z wymaganiami specyfikacji POSIX.2024 i nie przewiduje zapewnienia kompatybilności z narzędziami GNU, których funkcjonalność jest postrzegana przez autorów jako nieuzasadniona nadęta. Jednakże posixutils-rs planuje zaimplementować najpopularniejsze zaawansowane opcje narzędzi GNU, które można znaleźć w istniejących skryptach.
Wśród różnic w stosunku do projektu uutils, który rozwija implementację GNU Coreutils w Rust, jest szerszy zakres narzędzi, w tym między innymi tworzenie takich komponentów systemowych określonych przez POSIX, jak vi, awk, bc, m4, cron i kompilator c99, a także podejście minimalistyczne, które oznacza dostarczanie tylko minimalnego niezbędnego zestawu opcji zdefiniowanych w specyfikacji POSIX lub bez których jest to problematyczne. Programy w zestawie posixutils-rs są początkowo dostarczane jako samodzielny kod, który można wykorzystać w innych projektach.
Obecnie 55 narzędzi opracowanych przez projekt jest zgodnych z POSIX i znajduje się na etapie pokrycia testowego, 22 narzędzia mają wymaganą funkcjonalność (ale pokrycie testowe nie zostało jeszcze zaimplementowane), 20 jest na etapie wersji roboczej, a prace nad 44 narzędziami jeszcze się nie rozpoczęły. Wśród narzędzi z zaimplementowaną funkcjonalnością: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Wśród narzędzi, nad którymi prace jeszcze się nie rozpoczęły: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi.
Zmiany w nowej wersji obejmują dodanie implementacji narzędzi awk, m4, ps, realpath, join, time, fuser i gencat, a także początkowe wsparcie dla pracy w środowiskach opartych na bibliotece C musl oraz udostępnienie biblioteki ftw do przemierzania drzewa katalogów z zachowaniem bezpieczeństwa wyścigu.
Dodatkowo możemy odnotować ogłoszenie projektu rav1d, który rozwija wysokowydajny dekoder dla formatu kodowania wideo AV1, napisany w języku Rust. Rozwój odbywa się poprzez przeniesienie kodu dekodera biblioteki dav1d, która wyróżnia się wysoką wydajnością, do języka Rust. Przygotowany port jest w pełni kompatybilny z API biblioteki dav1d. Wybór na rzecz przeniesienia istniejącej biblioteki zamiast pisania własnej wersji jest tłumaczony chęcią wykorzystania sprawdzonego i przetestowanego dekodera jako podstawy, aby uniknąć możliwych problemów ze zgodnością i uwzględnić wszystkie zawiłości pracy z formatem AV1.
W obecnej formie przygotowana implementacja rav1d jest o 6% wolniejsza od dav1d pod względem wydajności, ale w przyszłości, po optymalizacji kodu, planowane jest osiągnięcie parytetu wydajnościowego. Aby osiągnąć wysoką wydajność, zastosowano podejście, w którym podstawowe funkcje dekodowania wartości prymitywnych są implementowane w asemblerze w postaci bloków typu unsafe (używany jest kod asemblera z dav1d), w których dane są otrzymywane po sprawdzeniu przez funkcje parsowania strumienia napisane w języku Rust (dotychczasowe doświadczenia w identyfikowaniu luk w zabezpieczeniach dekoderów wideo pokazują, że problemy pojawiają się głównie w kodzie parsowania formatów wysokiego poziomu, a nie w operacjach na danych niskiego poziomu).
Źródło: opennet.ru
