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

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

Projekat je prvenstveno fokusiran na postizanje usaglašenosti sa zahtevima POSIX.2024 specifikacije i ne planira da obezbedi kompatibilnost sa GNU uslužnim programima, čiju funkcionalnost autori percipiraju kao neopravdano naduvanu. Međutim, posixutils-rs planira implementirati najpopularnije napredne GNU uslužne opcije koje se nalaze u postojećim skriptama.

Razlike od projekta uutils, koji razvija implementaciju GNU Coreutils u Rust-u, uključuju širi opseg uslužnih programa, uključujući, između ostalog, kreiranje takvih POSIX sistemskih komponenti 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 se u početku isporučuju kao samostalni kod koji se može koristiti u drugim projektima.

Trenutno je 55 uslužnih programa razvijenih u okviru projekta usklađeno sa POSIX-om i nalaze se u fazi testiranja pokrivenosti, 22 uslužna programa pružaju neophodnu funkcionalnost (ali pokrivenost testom još nije implementirana), 20 je u fazi nacrta, a rad na 44 komunalna programa nije još počelo. Među uslužnim programima sa 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 poč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 baziranim na musl C biblioteci i pružanju ftw biblioteka za državno zaštićenu utrku prelaska stabla direktorija.

Osim toga, možemo primijetiti najavu projekta rav1d, koji razvija dekoder visokih performansi za format kodiranja videa AV1, napisan na jeziku Rust. Razvoj se vrši portiranjem koda dekodera biblioteke dav1d, koja se odlikuje visokim performansama, na Rust. Pripremljeni port je u potpunosti kompatibilan sa API-jem biblioteke dav1d. Izbor portiranja postojeće biblioteke umjesto pisanja vlastite verzije objašnjava se željom da se kao osnova koristi već dokazani i testirani dekoder kako bi se izbjegli mogući problemi kompatibilnosti i uzele u obzir sve zamršenosti rada s AV1 formatom.

U sadašnjem obliku, pripremljena implementacija rav1d zaostaje 6% u performansama za dav1d, ali se u budućnosti, nakon optimizacije koda, planira postići paritet u performansama. Da bi se postigle visoke performanse, korišten je pristup u kojem se osnovne funkcije za dekodiranje primitivnih vrijednosti implementiraju u asembleru u obliku nesigurnih blokova (koristi se montažni kod iz dav1d), podaci u koje se primaju nakon provjere raščlanjivanjem toka funkcije napisane u Rustu (prethodno iskustvo u identifikaciji ranjivosti u video dekoderima pokazuje da se problemi uglavnom javljaju u kodu za raščlanjivanje formata visokog nivoa, a ne u operacijama podataka niskog nivoa).

izvor: opennet.ru

Dodajte komentar