Uscita di Rust 1.90. Strumenti per la creazione di driver Windows in Rust

È stata pubblicata la versione 1.90 del linguaggio di programmazione Rust, originariamente sviluppato dal progetto Mozilla e ora gestito dalla Rust Foundation, un'organizzazione no-profit indipendente. Il linguaggio è focalizzato sulla gestione sicura della memoria e offre strumenti per raggiungere un alto livello di parallelismo nell'esecuzione dei compiti, senza utilizzare un garbage collector e 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 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:

  • Su Linux, i computer con architettura x86_64 utilizzano per impostazione predefinita il linker LLD del progetto LLVM per il collegamento dinamico dei pacchetti crate. L'adozione di LLD rispetto al linker BFD ha portato a un miglioramento delle prestazioni nel collegamento di grandi file eseguibili e progetti con una considerevole quantità di informazioni di debug, oltre ad accelerare la ricompilazione incrementale. Nella maggior parte dei casi, LLD è retrocompatibile con BFD. In caso di problemi, è possibile tornare a BFD specificando nella variabile d'ambiente RUSTFLAGS il flag "-C linker-features=-lld" o aggiungendo al file di configurazione .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = ["-Clinker-features=-lld"]
  • Nel gestore di pacchetti cargo, il comando "publish" include l'opzione "--workspace", che consente di pubblicare automaticamente tutti i pacchetti all'interno di uno spazio di lavoro selezionato (un insieme di pacchetti che utilizza un file Cargo.lock e una directory comune per i risultati di compilazione), mantenendo l'ordine di sequenza dei pacchetti e considerando le dipendenze tra di essi.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • u{n}::checked_sub_signed
    • u{n}::overflowing_sub_signed
    • u{n}::saturating_sub_signed
    • u{n}::wrapping_sub_signed
    • impl Copy for IntErrorKind
    • impl Hash for IntErrorKind
    • impl PartialEq<&CStr> for CStr
    • impl PartialEq<CString> for CStr
    • impl PartialEq<Cow<CStr>> for CStr
    • impl PartialEq<&CStr> for CString
    • impl PartialEq<CStr> for CString
    • impl PartialEq<Cow<CStr>> for CString
    • impl PartialEq<&CStr> for Cow
    • impl PartialEq<CStr> for Cow
    • impl PartialEq<CString> for Cow
  • Il flag «const» è stato applicato nelle funzioni:
    • <[T]>::reverse
    • f32::floor
    • f32::ceil
    • f32::trunc
    • f32::fract
    • f32::round
    • f32::round_ties_even
    • f64::floor
    • f64::ceil
    • f64::trunc
    • f64::fract
    • f64::round
    • f64::round_ties_even
  • Per le piattaforme target basate sulla libreria Musl, di terzo livello di supporto, il collegamento dinamico è abilitato per impostazione predefinita: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl e thumbv7neon-unknown-linux-musleabihf.
  • La piattaforma target "x86_64-apple-darwin" è stata spostata dal primo al secondo livello di supporto (Apple prevede di interrompere il supporto per l'architettura x86_64). Il primo livello di supporto implica la creazione di build binarie, test approfonditi e la massima garanzia di supporto della piattaforma — ogni modifica nel compilatore è verificata tramite un intero set di test. Il secondo livello di supporto offre una garanzia di compilazione, ma nessuna garanzia per il superamento dei test.

Inoltre, va notato lo sviluppo da parte di Microsoft di strumenti per la creazione di driver Windows in Rust. Su GitHub è già disponibile un insieme di pacchetti crate per la creazione di driver basati su WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) e UMDF (User-Mode Driver Framework), oltre a servizi Win32, compatibili con Windows 11. L'obiettivo del progetto è fornire agli sviluppatori in Rust librerie e funzioni simili a quelle offerte nell'SDK WDK per i driver in C. Attualmente, gli strumenti per la creazione di driver in Rust utilizzano un elevato numero di chiamate unsafe nell'interazione con le sottosistemi Windows, ma in futuro si prevede di sviluppare astratti sicuri per strutture del kernel e DDI (Device Driver Interface). I risultati del progetto sono distribuiti sotto le licenze MIT e Apache 2.0.

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