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

È stata pubblicata la versione del linguaggio di programmazione Rust 1.92, originariamente sviluppata dal progetto Mozilla, ma ora mantenuta sotto l'egida della Rust Foundation, un'organizzazione non profit indipendente. Il linguaggio è focalizzato sulla gestione sicura della memoria e fornisce strumenti per raggiungere un elevato parallelismo nell'esecuzione dei compiti, evitando l'uso del garbage collector e del runtime (che si limita a una base di inizializzazione e al supporto della libreria standard).

I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori di manipolazione dei puntatori e li proteggono da problemi derivanti da operazioni a basso livello con la memoria, come l'accesso a aree di memoria dopo il loro rilascio, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, l'assicurazione della compilazione e la gestione delle dipendenze, il progetto promuove il gestore di pacchetti Cargo. È supportato un repository per l'hosting delle librerie su crates.io.

La gestione sicura della memoria in Rust è garantita durante la compilazione attraverso il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la considerazione del tempo di vita degli oggetti (ambiti di visibilità) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria 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 minimizzare gli errori logici.

Novità principali:

  • Prosegue la stabilizzazione del tipo "never", rappresentato dal simbolo "!", 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 stati impostati per impostazione predefinita da avvisi a errori di compilazione. Questi controlli scattano quando ci sono problemi nel codice, manifestandosi nell'uso del tipo "never".

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

  • Comportamento del controllo lint "unused_must_use" modificato, che scatta quando viene ignorato il valore restituito da una funzione, se la funzione o il tipo restituito sono contrassegnati dall'attributo "#[must_use]". Nella nuova versione è stata interrotta la stampa di avvisi per l'ignoranza dei valori restituiti con i tipi Result e ControlFlow, nei quali lo stato di errore è definito da un tipo senza valori ("!" o "Infallible"). Ad esempio, "fn can_never_fail() -> Result {…}".
  • Modificato il comportamento del flag "-Cpanic=abort", che consente la generazione di tabelle unwind di default per eseguire il backtrace. Per ripristinare il comportamento precedente, è prevista l'opzione "-Cforce-unwind-tables=no".
  • Rafforzato il controllo degli argomenti dell'attributo "#[macro_export]". Se vengono specificati attributi non validi, ora verrà emesso un errore anziché un avviso. I problemi con "#[macro_export]" verranno controllati non solo durante la compilazione diretta del pacchetto crate, ma anche durante la compilazione delle dipendenze.
  • Nel codice safe è consentito ottenere puntatori raw («&raw [mut | const]») ai campi nei tipi union.
  • Per la piattaforma target mips64el-unknown-linux-muslabi64 è stata implementata la supporto per il binding dinamico.
  • La versione minima supportata degli strumenti esterni LLVM è stata elevata alla branch LLVM 20.
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • 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 segnale «const» è stato applicato nelle funzioni:
    • ::rotate_left
    • ::rotate_right
  • Nel gestore di pacchetti Cargo è garantito il ripristino 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 nel manuale riguardante l'ottimizzazione del processo di build.

In aggiunta, si possono notare i progetti e gli eventi recentemente annunciati legati a Rust:

  • L'azienda Ferrocene ha annunciato di aver superato la certificazione IEC 61508 (SIL 2) per la libreria libcore, che include un sottoinsieme di chiamate dalla libreria di base standard di Rust. La certificazione conferma che la libreria soddisfa i requisiti per i sistemi industriali critici. Ferrocene è nota per la creazione di strumenti per lo sviluppo di applicazioni in Rust per sistemi critici (Safety-Critical Systems), nonché per il mantenimento della specifica FLS (Ferrocene Language Specification), sulla quale si basa la specifica di riferimento per il linguaggio Rust.
  • È stata pubblicata la versione 0.14 della libreria Iced per la creazione di interfacce grafiche utente utilizzando un modello di programmazione reattivo. In Iced è implementata un'architettura familiare per gli sviluppatori a conoscenza del linguaggio di costruzione dell'interfaccia dichiarativa Elm. Viene offerta una gamma completa di widget con la possibilità di creare gestori asincroni e di applicare un layout adattivo degli elementi dell'interfaccia a seconda delle dimensioni della finestra e dello schermo. Sono disponibili diversi motori di rendering che supportano Vulkan, Metal e DX12. Tra i progetti di maggior rilievo che utilizzano Iced, si può citare l'ambiente desktop COSMIC.

    Nella nuova versione sono stati aggiunti i widget «table», «grid», «sensor», «float» e «pin», ed è stata ampliata la funzionalità del widget per lavorare con il markup Markdown. Sono stati implementati: modalità di rendering reattivo; barre di scorrimento che appaiono se necessario; API per lavorare con le animazioni; supporto per i metodi di input; modalità headless; possibilità di apportare modifiche senza fermare l'applicazione (hot reloading); parallelizzazione del decodificatore 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, che consente di utilizzare un'unica base di codice per la creazione di applicazioni grafiche per diverse piattaforme (Linux, Windows, macOS, con piani per Android e iOS). 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'utility Island, progettata per l'esecuzione isolata delle applicazioni. Per l'isolamento sandbox è stato utilizzato il meccanismo Landlock. Island consente di creare regole nel formato TOML e applicarle per l'isolamento mediante Landlock di file eseguibili esistenti, senza la necessità di modificare il codice. A differenza di Firejail, l'utility Island non richiede diritti di root e permessi speciali.
  • Google ha presentato un toolkit Wasefire scritto in Rust per lo sviluppo di firmware sicuri. L'idea principale è l'esecuzione di gestori isolati (applets) sopra l'ambiente di base del firmware (piattaforma). Lo sviluppo del firmware non è legato a linguaggi di programmazione — i componenti del firmware possono essere forniti nel formato WebAssembly con estensioni WASI (WebAssembly System Interface) e possono essere eseguiti tramite Wasmtime.
  • È stato pubblicato l'aggiornamento del firmware UEFI Patina 18, scritto in Rust. Patina fornisce un'alternativa ai componenti di base del firmware UEFI e può essere utilizzato per una transizione graduale dei firmware esistenti scritti in C all'uso del linguaggio Rust.
  • Il progetto Brimstone sta sviluppando un nuovo motore JavaScript, scritto da zero in Rust. Nella sua forma attuale supporta già oltre il 97% delle funzionalità di ECMAScript 2026. La macchina virtuale per l'esecuzione del bytecode è stata creata 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" (analogamente a Fuchsia) e utilizza una gerarchia distribuita delle risorse simile a quella di Plan 9, con indirizzamento dei percorsi dei file tramite URI.
  • È stato pubblicato il rilascio della shell interattiva Fish 4.2.0 (friendly interactive shell). Il ramo 4.x si distingue per la traduzione completa del codice sorgente dal C++ al Rust.
  • La società Cloudflare ha aperto il codice della libreria Rust tokio-quiche, per integrare il supporto ai protocolli QUIC e HTTP/3 nelle applicazioni asincrone basate sul framework Tokio.
  • Il progetto Tor ha pubblicato le versioni Arti 1.7 e 1.8, implementazioni dello strumento Tor, scritto in Rust. Quando il codice Arti raggiungerà lo stadio in grado di sostituire completamente la versione in C, gli sviluppatori di Tor intendono conferire ad Arti lo status di implementazione principale di Tor, interrompendo gradualmente il supporto per l'implementazione in C.

    Nella nuova versione è stata stabilizzata l'implementazione della definizione limitata dei servizi onion con autorizzazione del cliente ("restricted-discovery"). Oltre al proxy SOCKS, è stata aggiunta la supporto per i proxy HTTP che usano il metodo CONNECT. È stata implementata l'esposizione 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 directory (Directory Authority). È stato aggiunto il comando "arti hsc ctor-migrate" per trasferire le chiavi dal client C nel deposito delle chiavi di Arti. Sono state aggiunte impostazioni per gestire l'avvio dei servizi onion.

  • È stato pubblicato il database RustDB, creato in Rust ispirandosi a PostgreSQL. Supporta le operazioni SQL di base (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transazioni, MVCC, WAL (Write-Ahead Log), indici, connessione tramite protocollo compatibile con PostgreSQL. Durante la scrittura di RustDB è stata utilizzata l'IA.

Fonte: opennet.ru

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