Um conjunto de utilitários POSIX e um decodificador AV1 escrito em Rust

Foi publicado o lançamento do projeto posixutils-rs 0.2.1, que visa desenvolver na linguagem Rust uma coleção de utilitários de linha de comando mencionados no padrão POSIX e atendendo aos seus requisitos (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed, etc.). Durante o desenvolvimento, sempre que possível, são usados ​​pacotes de caixas existentes. O código posixutils-rs é distribuído sob a licença do MIT.

O projeto está focado principalmente em alcançar a conformidade com os requisitos da especificação POSIX.2024 e não planeja fornecer compatibilidade com utilitários GNU, cuja funcionalidade é percebida pelos autores como excessivamente inchada. No entanto, posixutils-rs planeja implementar as opções avançadas de utilitários GNU mais populares encontradas em scripts existentes.

As diferenças do projeto uutils, que desenvolve a implementação GNU Coreutils em Rust, incluem um escopo mais amplo de utilitários, incluindo, entre outras coisas, a criação de componentes do sistema POSIX como vi, awk, bc, m4, cron e o compilador c99, bem como uma abordagem minimalista, que implica fornecer apenas o conjunto mínimo necessário de opções definidas na especificação POSIX ou que são problemáticas de serem dispensadas. Os programas do conjunto posixutils-rs são inicialmente fornecidos como código independente que pode ser usado em outros projetos.

Atualmente, 55 utilidades desenvolvidas pelo projeto estão em conformidade com POSIX e estão em fase de cobertura de teste, 22 utilidades fornecem a funcionalidade necessária (mas a cobertura de teste ainda não foi implementada), 20 estão em fase de rascunho e o trabalho em 44 utilidades ainda não foi implementado. ainda começou. Entre os utilitários com funcionalidade implementada: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Entre os utilitários cujo trabalho ainda não começou: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

As mudanças na nova versão incluem a adição de implementações dos utilitários awk, m4, ps, realpath, join, time, fuser e gencat, bem como suporte inicial para trabalhar em ambientes baseados na biblioteca musl C e o fornecimento do ftw biblioteca para corrida de travessia de árvore de diretórios protegida pelo estado.

Adicionalmente, podemos destacar o anúncio do projeto rav1d, que está desenvolvendo um decodificador de alto desempenho para o formato de codificação de vídeo AV1, escrito na linguagem Rust. O desenvolvimento é feito portando o código decodificador da biblioteca dav1d, que se caracteriza pelo alto desempenho, para Rust. A porta preparada é totalmente compatível com a API da biblioteca dav1d. A escolha de portar uma biblioteca existente em vez de escrever sua própria versão é explicada pelo desejo de usar como base um decodificador já comprovado e testado para evitar possíveis problemas de compatibilidade e levar em consideração todas as complexidades de trabalhar com o formato AV1.

Em sua forma atual, a implementação preparada de rav1d está 6% atrás de dav1d em desempenho, mas no futuro, após a otimização do código, está planejado alcançar paridade de desempenho. Para obter alto desempenho, foi utilizada uma abordagem na qual as funções básicas para decodificação de valores primitivos são implementadas em assembler na forma de blocos inseguros (é usado o código assembly de dav1d), cujos dados são recebidos após verificação com análise de fluxo funções escritas em Rust (a experiência anterior na identificação de vulnerabilidades em decodificadores de vídeo mostra que os problemas surgem principalmente no código de análise de formato de alto nível, e não nas operações de dados de baixo nível).

Fonte: opennet.ru

Adicionar um comentário