Satu set utiliti POSIX dan penyahkod AV1 yang ditulis dalam Rust

Pengeluaran projek posixutils-rs 0.2.1 telah diterbitkan, bertujuan untuk membangunkan dalam bahasa Rust koleksi utiliti baris arahan yang disebut dalam standard POSIX dan memenuhi keperluannya (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed, dll.). Semasa pembangunan, apabila boleh, pakej peti sedia ada digunakan. Kod posixutils-rs diedarkan di bawah lesen MIT.

Projek ini tertumpu terutamanya untuk mencapai pematuhan dengan keperluan spesifikasi POSIX.2024 dan tidak merancang untuk menyediakan keserasian dengan utiliti GNU, yang fungsinya dianggap oleh pengarang sebagai kembung yang tidak munasabah. Walau bagaimanapun, posixutils-rs merancang untuk melaksanakan pilihan utiliti GNU lanjutan paling popular yang terdapat dalam skrip sedia ada.

Perbezaan daripada projek uutils, yang membangunkan pelaksanaan GNU Coreutils dalam Rust, termasuk skop utiliti yang lebih luas, termasuk, antara lain, penciptaan komponen sistem POSIX seperti vi, awk, bc, m4, cron dan pengkompil c99, serta pendekatan minimalis , yang membayangkan hanya menyediakan set pilihan minimum yang diperlukan yang ditakrifkan dalam spesifikasi POSIX atau yang bermasalah untuk dilakukan tanpa. Program dalam suite posixutils-rs pada mulanya dibekalkan sebagai kod serba lengkap yang boleh digunakan dalam projek lain.

Pada masa ini, 55 utiliti yang dibangunkan oleh projek mematuhi POSIX dan berada di peringkat liputan ujian, 22 utiliti menyediakan fungsi yang diperlukan (tetapi liputan ujian masih belum dilaksanakan), 20 berada di peringkat draf, dan kerja pada 44 utiliti belum belum bermula. Antara utiliti dengan fungsi yang dilaksanakan: awk, nama asas, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Antara utiliti, kerja yang belum dimulakan: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

Perubahan dalam keluaran baharu termasuk penambahan pelaksanaan utiliti awk, m4, ps, realpath, join, time, fuser dan gencat, serta sokongan awal untuk bekerja dalam persekitaran berdasarkan perpustakaan musl C dan penyediaan ftw perpustakaan untuk perlumbaan lintasan pokok direktori yang dilindungi negeri.

Selain itu, kita boleh perhatikan pengumuman projek rav1d, yang sedang membangunkan penyahkod berprestasi tinggi untuk format pengekodan video AV1, yang ditulis dalam bahasa Rust. Pembangunan dijalankan dengan mengalihkan kod penyahkod perpustakaan dav1d, yang dicirikan oleh prestasi tinggi, kepada Rust. Port yang disediakan serasi sepenuhnya dengan API perpustakaan dav1d. Pilihan untuk mengalihkan perpustakaan sedia ada dan bukannya menulis versi kami sendiri dijelaskan oleh keinginan untuk menggunakan penyahkod yang telah terbukti dan diuji sebagai asas untuk mengelakkan kemungkinan masalah keserasian dan mengambil kira semua selok-belok bekerja dengan format AV1.

Dalam bentuk semasa, pelaksanaan rav1d yang disediakan adalah 6% di belakang dav1d dalam prestasi, tetapi pada masa hadapan, selepas mengoptimumkan kod, ia dirancang untuk mencapai pariti dalam prestasi. Untuk mencapai prestasi tinggi, pendekatan telah digunakan di mana fungsi asas untuk menyahkod nilai primitif dilaksanakan dalam pemasang dalam bentuk blok tidak selamat (kod pemasangan dari dav1d digunakan), data yang diterima selepas menyemak dengan penghuraian aliran fungsi yang ditulis dalam Rust (pengalaman lalu dalam mengenal pasti kelemahan dalam penyahkod video menunjukkan bahawa masalah terutamanya timbul dalam kod penghuraian format peringkat tinggi, dan bukannya dalam operasi data peringkat rendah).

Sumber: opennet.ru

Tambah komen