Un insieme di utilità POSIX e un decodificatore AV1 scritti in Rust

È stato pubblicato il rilascio del progetto posixutils-rs 0.2.1, volto a sviluppare nel linguaggio Rust una raccolta di utility a riga di comando menzionate nello standard POSIX e rispondenti ai suoi requisiti (cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed, ecc.). Durante lo sviluppo, quando possibile, vengono utilizzati i pacchetti crate esistenti. Il codice posixutils-rs è distribuito sotto la licenza MIT.

Il progetto si concentra principalmente sul raggiungimento della conformità con i requisiti della specifica POSIX.2024 e non prevede di garantire la compatibilità con le utilità GNU, la cui funzionalità è percepita dagli autori come irragionevolmente gonfia. Tuttavia, posixutils-rs prevede di implementare le opzioni di utilità GNU avanzate più popolari presenti negli script esistenti.

Le differenze rispetto al progetto uutils, che sviluppa l'implementazione GNU Coreutils in Rust, includono una gamma più ampia di utilità, inclusa, tra le altre cose, la creazione di componenti di sistema POSIX come vi, awk, bc, m4, cron e il compilatore c99, così come un approccio minimalista, che implica fornire solo l'insieme minimo richiesto di opzioni definite nelle specifiche POSIX o di cui è problematico fare a meno. I programmi della suite posixutils-rs vengono inizialmente forniti come codice autonomo che può essere utilizzato in altri progetti.

Attualmente, 55 servizi di pubblica utilità sviluppati dal progetto sono conformi a POSIX e sono in fase di test di copertura, 22 servizi di pubblica utilità forniscono le funzionalità necessarie (ma la copertura di test non è stata ancora implementata), 20 sono in fase di bozza e il lavoro su 44 servizi di pubblica utilità non è stato ancora completato. ancora iniziato. Tra le utilità con funzionalità implementate: awk, basename, bc, cp, cut, chown, date, diff, file, find, grep, ls, nice, ps, sort, strings, tail, tr, tty, wc, uniq. Tra le utilità, il cui lavoro non è ancora iniziato: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

Le modifiche nella nuova versione includono l'aggiunta delle implementazioni delle utilità awk, m4, ps, realpath, join, time, fuser e gencat, nonché il supporto iniziale per lavorare in ambienti basati sulla libreria C musl e la fornitura della ftw libreria per la corsa trasversale all'albero di directory protetta dallo stato.

Inoltre, possiamo notare l'annuncio del progetto rav1d, che sta sviluppando un decoder ad alte prestazioni per il formato di codifica video AV1, scritto nel linguaggio Rust. Lo sviluppo viene effettuato portando su Rust il codice del decodificatore della libreria dav1d, caratterizzata da elevate prestazioni. La porta preparata è completamente compatibile con l'API della libreria dav1d. La scelta di trasferire una libreria esistente invece di scrivere la nostra versione è spiegata dal desiderio di utilizzare come base un decoder già collaudato e testato per evitare possibili problemi di compatibilità e tenere conto di tutte le complessità del lavoro con il formato AV1.

Nella sua forma attuale, l'implementazione preparata di rav1d è inferiore del 6% a dav1d in termini di prestazioni, ma in futuro, dopo l'ottimizzazione del codice, si prevede di raggiungere la parità di prestazioni. Per ottenere prestazioni elevate, è stato utilizzato un approccio in cui le funzioni di base per la decodifica dei valori primitivi sono implementate nell'assemblatore sotto forma di blocchi non sicuri (viene utilizzato il codice assembly da dav1d), i dati in cui vengono ricevuti dopo il controllo con l'analisi del flusso funzioni scritte in Rust (l'esperienza passata nell'identificazione delle vulnerabilità nei decoder video mostra che i problemi sorgono principalmente nel codice di analisi del formato di alto livello, piuttosto che nelle operazioni di dati di basso livello).

Fonte: opennet.ru

Aggiungi un commento