Satu set utilitas POSIX dan decoder AV1 yang ditulis dalam Rust

Rilis proyek posixutils-rs 0.2.1 telah diterbitkan, bertujuan untuk mengembangkan dalam bahasa Rust kumpulan utilitas baris perintah yang disebutkan dalam standar POSIX dan memenuhi persyaratannya (cp, mv, awk, make, vi, find, sortir, wc, xargs, sh, m4, sed, dll.). Selama pengembangan, bila memungkinkan, paket peti yang ada digunakan. Kode posixutils-rs didistribusikan di bawah lisensi MIT.

Proyek ini difokuskan terutama untuk mencapai kepatuhan terhadap persyaratan spesifikasi POSIX.2024 dan tidak berencana untuk menyediakan kompatibilitas dengan utilitas GNU, yang fungsinya dianggap oleh penulis sebagai terlalu membengkak. Namun, posixutils-rs berencana untuk mengimplementasikan opsi utilitas GNU lanjutan paling populer yang ditemukan di skrip yang ada.

Perbedaan dari proyek uutils, yang mengembangkan implementasi GNU Coreutils di Rust, mencakup cakupan utilitas yang lebih luas, termasuk, antara lain, pembuatan komponen sistem POSIX seperti vi, awk, bc, m4, cron dan compiler c99, serta pendekatan minimalis, yang berarti hanya menyediakan serangkaian opsi minimum yang diperlukan yang ditentukan dalam spesifikasi POSIX atau yang sulit dilakukan tanpanya. Program-program dalam suite posixutils-rs pada awalnya disediakan sebagai kode mandiri yang dapat digunakan dalam proyek lain.

Saat ini, 55 utilitas yang dikembangkan oleh proyek mematuhi POSIX dan berada pada tahap cakupan pengujian, 22 utilitas menyediakan fungsionalitas yang diperlukan (tetapi cakupan pengujian belum dilaksanakan), 20 berada pada tahap rancangan, dan pengerjaan 44 utilitas belum dilaksanakan. belum dimulai. Di antara utilitas dengan fungsionalitas yang diimplementasikan: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Di antara utilitas, pekerjaan yang belum dimulai: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

Perubahan pada rilis baru ini mencakup penambahan implementasi utilitas awk, m4, ps, realpath, join, time, fuser dan gencat, serta dukungan awal untuk bekerja di lingkungan berdasarkan musl C library dan penyediaan ftw. perpustakaan untuk perlombaan traversal pohon direktori yang dilindungi negara.

Selain itu, kami dapat mencatat pengumuman proyek rav1d, yang mengembangkan decoder berkinerja tinggi untuk format pengkodean video AV1, yang ditulis dalam bahasa Rust. Pengembangan dilakukan dengan mem-porting kode decoder perpustakaan dav1d, yang bercirikan kinerja tinggi, ke Rust. Port yang disiapkan sepenuhnya kompatibel dengan API perpustakaan dav1d. Pilihan untuk mem-porting perpustakaan yang ada daripada menulis versi kami sendiri dijelaskan oleh keinginan untuk menggunakan decoder yang sudah terbukti dan teruji sebagai dasar untuk menghindari kemungkinan masalah kompatibilitas dan memperhitungkan semua seluk-beluk bekerja dengan format AV1.

Dalam bentuknya saat ini, implementasi rav1d yang disiapkan tertinggal 6% dari dav1d dalam hal kinerja, tetapi di masa depan, setelah mengoptimalkan kode, direncanakan untuk mencapai keseimbangan dalam kinerja. Untuk mencapai kinerja tinggi, pendekatan digunakan di mana fungsi dasar untuk mendekode nilai primitif diimplementasikan di assembler dalam bentuk blok yang tidak aman (kode perakitan dari dav1d digunakan), data yang diterima setelah diperiksa dengan penguraian aliran fungsi yang ditulis dalam Rust (pengalaman masa lalu dalam mengidentifikasi kerentanan dalam dekoder video menunjukkan bahwa masalah terutama muncul pada kode penguraian format tingkat tinggi, bukan pada operasi data tingkat rendah).

Sumber: opennet.ru

Tambah komentar