La version du projet posixutils-rs 0.2.1 a été publiée, visant à développer dans le langage Rust une collection d'utilitaires de ligne de commande mentionnés dans le standard POSIX et répondant à ses exigences (cp, mv, awk, make, vi, find, trier, wc, xargs, sh, m4, sed, etc.). Pendant le développement, dans la mesure du possible, les packages de caisses existants sont utilisés. Le code posixutils-rs est distribué sous licence MIT.
Le projet se concentre principalement sur la conformité aux exigences de la spécification POSIX.2024 et ne prévoit pas d'assurer la compatibilité avec les utilitaires GNU, dont les fonctionnalités sont perçues par les auteurs comme déraisonnablement gonflées. Cependant, posixutils-rs prévoit d'implémenter les options utilitaires GNU avancées les plus populaires trouvées dans les scripts existants.
Les différences par rapport au projet uutils, qui développe l'implémentation de GNU Coreutils dans Rust, incluent une portée plus large d'utilitaires, y compris, entre autres, la création de composants système POSIX tels que vi, awk, bc, m4, cron et le compilateur c99, ainsi qu'une approche minimaliste, qui implique de fournir uniquement l'ensemble minimum requis d'options définies dans la spécification POSIX ou dont il est problématique de s'en passer. Les programmes de la suite posixutils-rs sont initialement fournis sous forme de code autonome pouvant être utilisé dans d'autres projets.
Actuellement, 55 utilitaires développés par le projet sont conformes à POSIX et sont au stade de la couverture des tests, 22 utilitaires fournissent les fonctionnalités nécessaires (mais la couverture des tests n'a pas encore été mise en œuvre), 20 sont au stade de projet et les travaux sur 44 utilitaires n'ont pas encore été réalisés. encore commencé. Parmi les utilitaires avec des fonctionnalités implémentées : awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Parmi les utilitaires dont le travail n'a pas commencé : crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .
Les changements dans la nouvelle version incluent l'ajout d'implémentations des utilitaires awk, m4, ps, realpath, join, time, fuser et gencat, ainsi que la prise en charge initiale du travail dans des environnements basés sur la bibliothèque musl C et la fourniture du ftw bibliothèque pour la course à la traversée de l'arborescence de répertoires protégée par l'état.
Par ailleurs, on peut noter l'annonce du projet rav1d, qui développe un décodeur performant pour le format de codage vidéo AV1, écrit en langage Rust. Le développement est réalisé en portant le code du décodeur de la bibliothèque dav1d, caractérisée par des performances élevées, vers Rust. Le port préparé est entièrement compatible avec l'API de la bibliothèque dav1d. Le choix de porter une bibliothèque existante au lieu d'écrire notre propre version s'explique par la volonté d'utiliser comme base un décodeur déjà éprouvé et testé afin d'éviter d'éventuels problèmes de compatibilité et de prendre en compte toutes les subtilités du travail avec le format AV1.
Dans sa forme actuelle, l'implémentation préparée de rav1d est 6 % en retard sur dav1d en termes de performances, mais à l'avenir, après avoir optimisé le code, il est prévu d'atteindre la parité en termes de performances. Pour obtenir des performances élevées, une approche a été utilisée dans laquelle les fonctions de base de décodage des valeurs primitives sont implémentées dans l'assembleur sous la forme de blocs non sécurisés (le code d'assemblage de dav1d est utilisé), dans lequel les données sont reçues après vérification avec analyse de flux fonctions écrites en Rust (l'expérience passée dans l'identification des vulnérabilités dans les décodeurs vidéo montre que les problèmes surviennent principalement dans le code d'analyse du format de haut niveau, plutôt que dans les opérations de données de bas niveau).
Source: opennet.ru
