Набор POSIX-утыліт і дэкадавальнік AV1, напісаныя на Rust

Апублікаваны выпуск праекта posixutils-rs 0.2.1, накіраванага на распрацоўку на мове Rust калекцыі ўтыліт каманднага радка, якія згадваюцца ў стандарце POSIX і адпаведных яго патрабаванням (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed і да т.п.). Пры распрацоўцы па магчымасці выкарыстоўваюцца ўжо існуючыя crate-пакеты. Код posixutils-rs распаўсюджваецца пад ліцэнзіяй MIT.

Праект засяроджаны галоўнай выявай на дасягненні адпаведнасці патрабаванням спецыфікацыі POSIX.2024 і не плануе забяспечваць сумяшчальнасць з утылітамі GNU, функцыянальнасць якіх успрымаецца аўтарамі як неабгрунтавана разадзьмутая. Тым не менш, у posixutils-rs плануецца рэалізаваць найболей папулярныя пашыраныя опцыі ўтыліт GNU, якія сустракаюцца ў існых скрыптах.

З адрозненняў ад праекту uutils, які развівае рэалізацыю GNU Coreutils на Rust, згадваецца шырэйшы ахоп утыліт, улучальны, сярод іншага, стварэнне такіх згадваных у POSIX кампанентаў сістэмы, як vi, awk, bc, m4, cron і кампілятара c99, а таксама мінімалістычны падыход , які прадугледжвае прадастаўленне толькі мінімальна неабходнага набору опцый, вызначаных у спецыфікацыі POSIX або без якіх праблематычна абысціся. Праграмы ў наборы posixutils-rs першапачаткова пастаўляюцца ў выглядзе самадастатковага кода, які можна выкарыстоўваць у іншых праектах.

У цяперашні час 55 якія развіваюцца праектам утыліт адпавядаюць POSIX і знаходзяцца на стадыі пакрыцця тэстамі, у 22 утылітах забяспечана неабходная функцыянальнасць (але пакуль не рэалізавана пакрыццё тэстамі), 20 знаходзяцца на стадыі чарнавога варыянту, а праца над 44 утылітамі яшчэ не пачата. Сярод утыліт з рэалізаванай функцыянальнасцю: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Сярод утыліт, праца над якімі не пачыналася: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi.

Са змен у новым выпуску адзначаецца даданне рэалізацый утыліт awk, m4, ps, realpath, join, time, fuser і gencat, а таксама пачатковая падтрымка працы ў асяроддзі на базе Сі-бібліятэкі musl і падаванне бібліятэкі ftw для абыходу дрэва каталогаў з абаронай ад станаў гонкі.

Дадаткова можна адзначыць анонс праекту rav1d, які развівае высокапрадукцыйны дэкадавальнік фармату кадавання відэа AV1, напісаны на мове Rust. Распрацоўка вядзецца праз партаванне на Rust кода дэкадавальніка бібліятэкі dav1d, адрознай высокай прадукцыйнасцю. Падрыхтаваны порт цалкам сумяшчальны з API бібліятэкі dav1d. Выбар у карысць партавання існай бібліятэкі замест напісання ўласнага варыянту тлумачыцца жаданнем выкарыстоўваць у якасці асновы ўжо правераны і пратэставаны дэкадавальнік, каб пазбегнуць магчымых праблем з сумяшчальнасцю і ўлічыць усе тонкасці працы з фарматам AV1.

У бягучым выглядзе падрыхтаваная рэалізацыя rav1d на 6% адстае па прадукцыйнасці ад dav1d, але ў далейшым пасля аптымізацыі кода плануецца дабіцца парытэту ў прадукцыйнасці. Для дасягнення высокай прадукцыйнасці выкарыстаны падыход пры якім базавыя функцыі дэкадавання прымітыўных значэнняў рэалізаваны на асэмблеры ў выглядзе unsafe-блокаў (задзейнічаны асэмблерны код з dav1d), дадзеныя ў якія паступаюць пасля праверкі напісанымі на Rust функцыямі разбору струменя (мінулы досвед выяўлення ўразлівасцяў у дэкадавальнікаў , што праблемы ў асноўным узнікаюць у высокаўзроўневым кодзе разбору фармату, а не ў нізкаўзроўневых аперацыях з дадзенымі).

Крыніца: opennet.ru

Дадаць каментар