Skup POSIX uslužnih programa i AV1 dekoder napisan u Rustu

Objavljeno je izdanje projekta posixutils-rs 0.2.1, čiji je cilj razvoj zbirke uslužnih programa naredbenog retka spomenutih u standardu POSIX u jeziku Rust i ispunjavanje njegovih zahtjeva (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed, itd.). Tijekom razvoja, kad god je to moguće, koriste se postojeći paketi sanduka. Kod posixutils-rs distribuira se pod licencom MIT-a.

Projekt je prvenstveno usmjeren na postizanje usklađenosti sa zahtjevima specifikacije POSIX.2024 i ne planira osigurati kompatibilnost s GNU uslužnim programima, čiju funkcionalnost autori smatraju nerazumno prenapuhanom. Međutim, posixutils-rs planira implementirati najpopularnije napredne opcije GNU uslužnog programa koje se nalaze u postojećim skriptama.

Razlike u odnosu na projekt uutils, koji razvija GNU Coreutils implementaciju u Rustu, uključuju širi opseg uslužnih programa, uključujući, između ostalog, stvaranje komponenti sustava POSIX kao što su vi, awk, bc, m4, cron i c99 kompajler, kao i minimalistički pristup, koji podrazumijeva pružanje samo minimalnog potrebnog skupa opcija definiranih u POSIX specifikaciji ili bez kojih je problematično. Programi u paketu posixutils-rs u početku se isporučuju kao samostalni kod koji se može koristiti u drugim projektima.

Trenutačno je 55 pomoćnih programa razvijenih projektom u skladu s POSIX-om i u fazi su testne pokrivenosti, 22 pomoćne usluge pružaju potrebnu funkcionalnost (ali testna pokrivenost još nije implementirana), 20 je u fazi nacrta, a rad na 44 pomoćne usluge nije još započeto. Među uslužnim programima s implementiranom funkcionalnošću: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Među uslužnim programima, rad na kojima još nije započeo: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

Promjene u novom izdanju uključuju dodavanje implementacija uslužnih programa awk, m4, ps, realpath, join, time, fuser i gencat, kao i početnu podršku za rad u okruženjima koja se temelje na musl C biblioteci i pružanju ftw knjižnica za državno zaštićeno stablo imenika traversal race.

Dodatno, možemo primijetiti najavu projekta rav1d, koji razvija dekoder visokih performansi za format video kodiranja AV1, napisan na jeziku Rust. Razvoj se provodi prijenosom koda dekodera biblioteke dav1d, koji se odlikuje visokim performansama, na Rust. Pripremljeni priključak u potpunosti je kompatibilan s API-jem knjižnice dav1d. Odabir prijenosa postojeće biblioteke umjesto pisanja vlastite verzije objašnjava se željom da se kao osnova koristi već provjereni i testirani dekoder kako bi se izbjegli mogući problemi s kompatibilnošću i uzele u obzir sve zamršenosti rada s AV1 formatom.

U svom sadašnjem obliku, pripremljena implementacija rav1d je 6% iza dav1d u performansama, ali u budućnosti, nakon optimizacije koda, planira se postići paritet u performansama. Da bi se postigla visoka izvedba, korišten je pristup u kojem su osnovne funkcije za dekodiranje primitivnih vrijednosti implementirane u asembleru u obliku nesigurnih blokova (koristi se sklopovni kod iz dav1d), podaci u koje se primaju nakon provjere raščlanjivanjem toka funkcije napisane u Rustu (prošlo iskustvo u identificiranju ranjivosti u video dekoderima pokazuje da problemi uglavnom nastaju u kodu parsiranja formata visoke razine, a ne u operacijama podataka niske razine).

Izvor: opennet.ru

Dodajte komentar