Un conjunto de utilidades POSIX y un decodificador AV1 escrito en Rust

Se ha publicado el lanzamiento del proyecto posixutils-rs 0.2.1, cuyo objetivo es desarrollar en lenguaje Rust una colección de utilidades de línea de comandos mencionadas en el estándar POSIX y cumplir con sus requisitos (cp, mv, awk, make, vi, find, ordenar, wc, xargs, sh, m4, sed, etc.). Durante el desarrollo, siempre que sea posible, se utilizan paquetes de cajas existentes. El código posixutils-rs se distribuye bajo la licencia MIT.

El proyecto se centra principalmente en lograr el cumplimiento de los requisitos de la especificación POSIX.2024 y no planea proporcionar compatibilidad con las utilidades GNU, cuya funcionalidad los autores perciben como excesivamente exagerada. Sin embargo, posixutils-rs planea implementar las opciones de utilidad GNU avanzadas más populares que se encuentran en los scripts existentes.

Las diferencias con el proyecto uutils, que desarrolla la implementación de GNU Coreutils en Rust, incluyen una gama más amplia de utilidades, incluida, entre otras cosas, la creación de componentes del sistema POSIX como vi, awk, bc, m4, cron y el compilador c99. así como un enfoque minimalista, que implica proporcionar solo el conjunto mínimo requerido de opciones definidas en la especificación POSIX o de las que es problemático prescindir. Los programas de la suite posixutils-rs se suministran inicialmente como código autónomo que se puede utilizar en otros proyectos.

Actualmente, 55 servicios públicos desarrollados por el proyecto cumplen con POSIX y se encuentran en la etapa de cobertura de prueba, 22 servicios públicos brindan la funcionalidad necesaria (pero la cobertura de prueba aún no se ha implementado), 20 están en la etapa de borrador y el trabajo en 44 servicios públicos aún no se ha implementado. aún comenzado. Entre las utilidades con funcionalidad implementada: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Entre las utilidades cuyo trabajo aún no ha comenzado: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi. .

Los cambios en la nueva versión incluyen la adición de implementaciones de las utilidades awk, m4, ps, realpath, join, time, fuser y gencat, así como soporte inicial para trabajar en entornos basados ​​en la biblioteca musl C y la provisión de ftw. biblioteca para la carrera transversal del árbol de directorios protegido por el estado.

Además, podemos destacar el anuncio del proyecto rav1d, que está desarrollando un decodificador de alto rendimiento para el formato de codificación de video AV1, escrito en lenguaje Rust. El desarrollo se lleva a cabo transfiriendo el código del decodificador de la biblioteca dav1d, que se caracteriza por su alto rendimiento, a Rust. El puerto preparado es totalmente compatible con la API de la biblioteca dav1d. La elección de portar una biblioteca existente en lugar de escribir nuestra propia versión se explica por el deseo de utilizar como base un decodificador ya probado y probado para evitar posibles problemas de compatibilidad y tener en cuenta todas las complejidades de trabajar con el formato AV1.

En su forma actual, la implementación preparada de rav1d está un 6% por detrás de dav1d en rendimiento, pero en el futuro, después de optimizar el código, se planea lograr la paridad en rendimiento. Para lograr un alto rendimiento, se utilizó un enfoque en el que las funciones básicas para decodificar valores primitivos se implementan en ensamblador en forma de bloques inseguros (se usa código ensamblador de dav1d), cuyos datos se reciben después de verificar con análisis de flujo. funciones escritas en Rust (la experiencia pasada en la identificación de vulnerabilidades en decodificadores de video muestra que los problemas surgen principalmente en el código de análisis de formato de alto nivel, en lugar de en las operaciones de datos de bajo nivel).

Fuente: opennet.ru

Añadir un comentario