Uscita di Rust 1.99.0. Microsoft ha elevato Rust a uno dei linguaggi principali

È stata pubblicata la versione 1.99 del linguaggio di programmazione Rust, originariamente sviluppato da Mozilla e attualmente gestito da un'organizzazione no-profit indipendente, la Rust Foundation. Il linguaggio si concentra sulla gestione sicura della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, il tutto senza l'uso di un garbage collector e di un runtime (il runtime si limita a un'inizializzazione di base e alla gestione della libreria standard).

I metodi di gestione della memoria in Rust mirano a evitare errori nella manipolazione dei puntatori e a proteggere da problemi derivanti dal lavoro a basso livello con la memoria, come l'accesso a porzioni di memoria dopo che sono state liberate, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, la compilazione e la gestione delle dipendenze, viene sviluppato il gestore di pacchetti Cargo. È supportato un repository per la pubblicazione delle librerie, 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:

  • È possibile creare funzioni in Rust con un numero variabile di argomenti (variadic), esportabili per essere chiamate da progetti in C (C ABI). Come ultimo elemento della lista dei parametri in tali funzioni, si può utilizzare la costruzione «…», che viene elaborata in Rust mediante un tipo speciale VaList, simile a va_list in C. unsafe extern «C» fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Sono state stabilizzate le funzioni Layout::for_value_raw, mem::size_of_val_raw e mem::align_of_val_raw, che consentono di determinare in modo sicuro la dimensione e l'allineamento dei puntatori raw, anche quando si utilizzano tipi di dimensione dinamica, come gli slice, senza la necessità di creare riferimenti ai dati.
  • La documentazione è stata aggiornata con la raccomandazione di evitare di rilasciare la memoria a cui è stato ottenuto un riferimento statico con vita illimitata (&’static) tramite la chiamata a Box::leak (round-trip unleaking), poiché tale azione può comportare problemi a causa dell'incompatibilità con le ottimizzazioni future del compilatore e i meccanismi di allocazione della memoria. Invece di creare un riferimento statico per la temporanea cessione di proprietà, si consiglia di utilizzare puntatori raw, ad esempio tramite Box::into_non_null.
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • IntoIterator for Box
    • IntoIterator for &Box
    • IntoIterator for &mut Box
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator for StepBy
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Il gestore di pacchetti cargo ha implementato un nuovo profilo integrato "debug", simile al profilo "dev" (in futuro, le funzionalità per il debug e lo sviluppo saranno separati). Durante la compilazione in CI, la compilazione incrementale è disabilitata per impostazione predefinita.
  • La piattaforma target riscv64-unknown-linux-musl è stata portata al secondo livello di supporto, il che implica la garanzia di compilazione, ma l'assenza di garanzie durante il passaggio del test set.

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

  • Microsoft ha elevato Rust a linguaggio di primo livello e fornirà supporto completo in tutte le fasi di sviluppo all'interno dell'azienda. In precedenza, il primo livello di supporto era riservato ai linguaggi C++, C# e TypeScript. Si segnala che Rust è già utilizzato in oltre 100 repository Microsoft. Tra l'altro, i componenti scritti in Rust sono già utilizzati in prodotti come Microsoft 365 e Copilot, e per il compilatore MSVC è stato preparato un backend separato rustc_codegen_utc per Rust, basato sul compilatore rustc.

    Come obiettivo principale dell'uso di Rust in Microsoft viene citato il rafforzamento della sicurezza del codice, critico dal punto di vista della sicurezza. Secondo il CTO di Microsoft Azure, circa il 70% di tutte le vulnerabilità in Windows sono causate da problemi di gestione della memoria, che possono essere evitati utilizzando Rust.

  • Google ha rimosso dal kernel Linux la vecchia implementazione del meccanismo di comunicazione interprocesso Binder, scritta in C, a favore del nuovo driver Binder IPC riscritto in Rust. Si segnala che in 15 anni di esistenza, il vecchio driver ha accumulato un notevole debito tecnico e numerose complicazioni che hanno reso difficile la ricerca di bug, la manutenzione e l'aggiunta di nuove funzionalità. Il driver Binder IPC in Rust è stato riconosciuto come principale e non è più considerato uno sviluppo sperimentale.
  • È stata pubblicata la versione 2.7.0 di Arti, una realizzazione 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 dare ad Arti lo status di implementazione principale di Tor e gradualmente interrompere la manutenzione della versione in C. Nella nuova versione sono stati apportati sviluppi delle funzionalità per i relay. server directory (Directory Authority), collegato al parsing dei documenti, al supporto del mirroring dei server directory e all'elaborazione del traffico DNS. Implementata la funzionalità RPC per modificare e verificare la configurazione. Risolte diverse vulnerabilità: agli amministratori dei servizi onion si raccomanda di aggiornare urgentemente i propri sistemi.

Fonte: opennet.ru

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