Rilascio di Rust 1.92. Progetti Rust per GUI, isolamento sandbox e creazione di firmware

È stato pubblicato il rilascio del linguaggio di programmazione Rust 1.92, originariamente sviluppato da Mozilla, ora sostenuto da un'organizzazione indipendente non profit, la Rust Foundation. Il linguaggio si concentra sulla gestione sicura della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione di incarichi, evitando l'uso di garbage collector e runtime (il runtime si limita a una semplice inizializzazione e alla gestione della libreria standard).

I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori nella manipolazione dei puntatori e li proteggono da problematiche derivanti dal lavoro a basso livello con la memoria, come l'accesso a zone di memoria dopo la loro liberazione, la dereferenziazione di puntatori nulli, il superamento dei limiti del buffer, e così via. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, si è sviluppato un gestore di pacchetti chiamato Cargo. Le librerie sono ospitate nel repository crates.io.

La gestione sicura della memoria in Rust è garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la gestione della durata degli oggetti (scope) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust offre anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita e offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Novità principali:

  • Continua la stabilizzazione del tipo «never», contrassegnato dal simbolo «!» e che definisce calcoli che non restituiscono mai valori (ad esempio, la funzione «exits», il macro «panic!» e i cicli infiniti non restituiscono mai il controllo). Nella nuova versione, i controlli Lint «never_type_fallback_flowing_into_unsafe» e «dependency_on_unit_never_type_fallback» sono passati di default dalla generazione di avvisi a quella di errori di compilazione. Questi controlli si attivano in presenza di problemi nel codice che si manifestano con l'uso del tipo «never».

    Secondo una prima valutazione, problemi simili si riscontrano in circa 500 pacchetti crate. L'attivazione dei controlli lint permetterà di prepararsi alla stabilizzazione del tipo "never", attualmente considerato una funzionalità sperimentale. I controlli lint vengono attivati solo durante la compilazione diretta dei pacchetti e non si manifestano durante la compilazione delle dipendenze. I controlli possono anche essere disattivati tramite l'attributo "#[allow]".

  • Modificato il comportamento del controllo lint "unused_must_use", che si attiva quando viene ignorato il valore restituito da una funzione, se la funzione o il tipo restituito sono contrassegnati con l'attributo "#[must_use]". Nella nuova versione, è cessata la visualizzazione degli avvisi riguardo l'ignoranza dei valori restituiti con tipi Result e ControlFlow, in cui lo stato di errore è determinato da un tipo senza valori ("!" o "Infallible"). Ad esempio, "fn can_never_fail() -> Result<(), Infallible> {…}".
  • Modificato il comportamento del flag "-Cpanic=abort", che, se specificato, attiva la generazione predefinita delle tabelle di unwind per eseguire il backtrace. Per ripristinare il comportamento precedente è disponibile l'opzione "-Cforce-unwind-tables=no".
  • La verifica degli argomenti dell'attributo «#[macro_export]» è stata inasprita. Ora verrà visualizzato un errore anziché un avviso quando vengono passati attributi non validi. I problemi con «#[macro_export]» verranno controllati non solo durante la compilazione diretta del crate, ma anche durante la compilazione delle dipendenze.
  • Nel codice safe è consentito ottenere puntatori raw («&raw [mut | const]») ai campi nei tipi union.
  • Supporto per il binding dinamico è stato implementato per la piattaforma di destinazione mips64el-unknown-linux-muslabi64.
  • La versione minima supportata del toolkit esterno LLVM è stata elevata al ramo LLVM 20.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • NonZero::div_ceil
    • Location::file_as_c_str
    • RwLockWriteGuard::downgrade
    • Box::new_zeroed
    • Box::new_zeroed_slice
    • Rc::new_zeroed
    • Rc::new_zeroed_slice
    • Arc::new_zeroed
    • Arc::new_zeroed_slice
    • btree_map::Entry::insert_entry
    • btree_map::VacantEntry::insert_entry
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
  • Il flag «const» è stato applicato nelle funzioni:
    • ::rotate_left
    • ::rotate_right
  • Nel gestore di pacchetti Cargo è stata garantita la ripetizione dell'operazione «git fetch» in caso di errore nella prima richiesta. Sono stati aggiunti componenti per l'integrazione con l'emulatore di terminale Ghostty. È stata aggiunta una nuova sezione alla guida sull'ottimizzazione del processo di compilazione.

Inoltre, si possono evidenziare i progetti e gli eventi recentemente annunciati legati a Rust:

  • L'azienda Ferrocene ha annunciato di aver ottenuto la certificazione IEC 61508 (SIL 2) per la libreria libcore, che include un sottoinsieme di chiamate dalla libreria standard di base di Rust. La certificazione conferma che la libreria soddisfa i requisiti per sistemi industriali critici. Ferrocene è conosciuta per la creazione di strumenti per lo sviluppo di applicazioni in Rust per sistemi critici (Safety-Critical Systems) e per il mantenimento della specifica FLS (Ferrocene Language Specification), su cui si basa la specifica di riferimento per il linguaggio Rust.
  • È stata pubblicata la versione 0.14 della libreria Iced per la creazione di interfacce utente utilizzando un modello di programmazione reattiva. Iced implementa un'architettura familiare per gli sviluppatori che conoscono il linguaggio di costruzione dichiarativa delle interfacce Elm. È fornito un set completo di widget con la possibilità di creare gestori asincroni e di applicare un layout adattivo degli elementi dell'interfaccia a seconda della dimensione della finestra e dello schermo. Sono disponibili diversi motori di rendering, compatibili con Vulkan, Metal e DX12. Tra i progetti principali che utilizzano Iced, si può citare l'ambiente desktop COSMIC.

    Nella nuova versione sono stati aggiunti i widget "table", "grid", "sensor", "float" e "pin", e sono state ampliate le funzionalità del widget per lavorare con il markup Markdown. Sono stati implementati: modalità di rendering reattivo; barre di scorrimento che appaiono quando necessario; API per lavorare con l'animazione; supporto per metodi di input; modalità headless; possibilità di apportare modifiche senza fermare l'applicazione (hot reloading); parallelizzazione della decodifica delle immagini; strumenti per il debug e il profiling delle prestazioni.

  • Il progetto Ribir sviluppa una libreria per la creazione di applicazioni multipiattaforma con interfaccia grafica, permettendo di utilizzare un'unica base di codice per generare applicazioni grafiche per diverse piattaforme (Linux, Windows, macOS, con Android e iOS in programma). Sono disponibili un linguaggio dichiarativo per la costruzione dell'interfaccia basato su macro Rust, oltre a più di 20 widget, temi e un rendering basato su wgpu.
  • È stata presentata l'utilità Island, progettata per l'esecuzione isolata delle applicazioni. Per l'isolamento sandbox viene utilizzato il meccanismo Landlock. Island consente di creare regole in formato TOML e applicarle per isolare i file eseguibili esistenti tramite Landlock, senza la necessità di modificare il codice. A differenza di Firejail, l'utilità Island non richiede diritti di root e permessi speciali.
  • Google ha presentato Wasefire, un toolkit scritto in Rust per lo sviluppo di firmware sicuri. L'idea principale è quella di eseguire gestori isolati (applet) sopra un ambiente di base del firmware (piattaforma). Lo sviluppo del firmware non è legato a linguaggi di programmazione: i componenti del firmware possono essere forniti in formato WebAssembly con estensioni WASI (WebAssembly System Interface) e eseguiti tramite Wasmtime.
  • È stato pubblicato il rilascio del firmware UEFI Patina 18, scritto in Rust. Patina fornisce una sostituzione per i componenti di base del firmware UEFI e può essere utilizzata per una migrazione graduale di firmware esistenti scritti in C verso l'utilizzo del linguaggio Rust.
  • Il progetto Brimstone sta sviluppando un nuovo motore JavaScript, scritto da zero in Rust. Nella sua attuale incarnazione supporta già oltre il 97% delle funzionalità di ECMAScript 2026. La macchina virtuale per l'esecuzione del bytecode è stata progettata tenendo conto dell'architettura del motore V8.
  • Il progetto Catten sviluppa il kernel per il sistema operativo sperimentale CharlotteOS, scritto in Rust. Il kernel supporta la gestione degli accessi basata su «capability» (simile a Fuchsia) e utilizza una gerarchia di risorse distribuite simile a Plan 9 con indirizzamento dei percorsi dei file tramite URI.
  • È stata pubblicata la versione 4.2.0 della shell interattiva Fish (friendly interactive shell). La serie 4.x è nota per la completa traduzione del codice sorgente da C++ a Rust.
  • L'azienda Cloudflare ha reso pubblico il codice della libreria Rust tokio-quiche, per integrare il supporto ai protocolli QUIC e HTTP/3 in applicazioni asincrone basate sul framework Tokio.
  • Il progetto Tor ha pubblicato le versioni 1.7 e 1.8 di Arti, un'implementazione della suite degli strumenti Tor, scritta in Rust. Quando il codice di Arti raggiungerà un livello in grado di sostituire completamente la versione in C, gli sviluppatori di Tor intendono conferire ad Arti lo status di implementazione principale di Tor e interrompere gradualmente il supporto per la versione in C.

    Nella nuova versione è stata stabilizzata l'implementazione della scoperta limitata dei servizi onion utilizzando l'autenticazione del cliente («restricted-discovery»). Oltre al proxy SOCKS, è stato aggiunto il supporto per un proxy HTTP che utilizza il metodo CONNECT. È stata implementata un'assegnazione adattiva dei timeout in base al carico. È stato aggiunto il supporto sperimentale per tokio-console. È proseguito lo sviluppo delle funzionalità per i relay e server le directory (Directory Authority). È stato aggiunto il comando «arti hsc ctor-migrate» per trasferire le chiavi dal client C al repository di chiavi di Arti. Sono state aggiunte impostazioni per gestire l'avvio dei servizi onion.

  • È stato pubblicato il DBMS RustDB, creato in linguaggio Rust ispirato a PostgreSQL. Sono supportate le operazioni SQL di base (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), le transazioni, l'MVCC, il WAL (Write-Ahead Log), gli indici e la connessione tramite protocollo compatibile con PostgreSQL. Durante lo sviluppo di RustDB è stata utilizzata l'intelligenza artificiale.

Fonte: opennet.ru

Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting affidabile per siti con protezione DDoS, server VPS VDS | ProHoster