Uscita di Rust 1.79. È stato creato un consorzio per lo sviluppo di sistemi ad alta affidabilità su Rust

È stato pubblicato il rilascio del linguaggio di programmazione di uso generale Rust 1.79, originariamente sviluppato da Mozilla e attualmente mantenuto da un'organizzazione no-profit indipendente, la Rust Foundation. Il linguaggio è focalizzato sulla sicurezza nella gestione della memoria e offre strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, evitando l'uso di un garbage collector e runtime (il runtime si limita all'inizializzazione di base e alla gestione 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:

  • È stato aggiunto il supporto per le costanti inline, che possono essere indicate direttamente nel codice utilizzando i blocchi «const { … }», elaborati nel contesto delle costanti e che permettono di evitare una definizione separata delle costanti. Il codice specificato nel blocco «const { … }» viene calcolato durante la fase di compilazione e utilizzato come costante, senza essere eseguito durante l'esecuzione del programma. A differenza della definizione di costanti tramite l'espressione «const ITEM: … = …», nei blocchi «const { … }» non è necessario specificare il tipo, poiché supportano l'inferenza automatica dei tipi. Ad esempio, il codice con una definizione separata della costante

    const EMPTY: Option<Vec> = None;
    let foo = [EMPTY; 100];

    può essere sostituito con l'uso in loco:

    let foo = [const { None }; 100];

  • È stato stabilizzato la sintassi «T: Trait» per specificare vincoli nella posizione dei tipi associativi, che consente di semplificare la definizione di espressioni con vincoli annidati, precedentemente richiedenti la specifica di un impl Trait annidato o di più condizioni «where».
  • È stato garantito l'automatico prolungamento della vita dei valori temporanei utilizzati nelle costruzioni «match» e «if».

    let a = if true {
    ..;
    &temp() // la vita sarà prolungata
    } else {
    ..;
    &temp() // la vita sarà prolungata
    };

  • È stata stabilizzata la possibilità di importare la funzione main da altri moduli e pacchetti crate.
  • Durante la compilazione della libreria standard, viene attivato il flag «-Cforce-frame-pointers=yes», che aggiunge dati per la ricostruzione dello stack durante il profiling dei programmi.
  • Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
    • {integer}::unchecked_add
    • {integer}::unchecked_mul
    • {integer}::unchecked_sub
    • ::split_at_unchecked
    • ::split_at_mut_unchecked
    • ::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • ::is_aligned
    • ::is_aligned
    • NonNull::is_aligned
    • ::len
    • ::len
    • ::is_empty
    • ::is_empty
    • NonNull::::is_empty
    • CStr::count_bytes
    • io::Error::downcast
    • num::NonZero
    • path::absolute
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • Il segno «const», che determina la possibilità di utilizzo in qualsiasi contesto invece delle costanti, è applicato nelle funzioni:
    • Atomic*::into_inner
    • io::Cursor::new
    • io::Cursor::get_ref
    • io::Cursor::position
    • io::empty
    • io::repeat
    • io::sink
    • panic::Location::caller
    • panic::Location::file
    • panic::Location::line
    • panic::Location::column
  • Stabilizzato
    parte delle funzionalità che possono essere utilizzate durante la compilazione in una rappresentazione intermedia WebAssembly (WASM).
  • Implementato il terzo livello di supporto per le piattaforme aarch64-apple-visionos, aarch64-apple-visionos-sim e riscv32ima-unknown-none-elf. Il terzo livello prevede un supporto di base, ma senza test automatizzati, pubblicazione di versioni ufficiali e verifica della possibilità di compilazione del codice.
  • Implementato il secondo livello di supporto per le piattaforme target aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. Il secondo livello di supporto garantisce la compilazione.

Inoltre, l'organizzazione Rust Foundation, che supervisiona l'ecosistema legato al linguaggio Rust, ha annunciato la creazione del consorzio "Safety-Critical Rust Consortium", mirato all'utilizzo del linguaggio Rust in soluzioni che richiedono una maggiore affidabilità (Software Safety-Critical), i cui guasti possono minacciare la vita delle persone, danneggiare l'ambiente o causare gravi danni all'attrezzatura. Hanno aderito al consorzio le aziende ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle e Woven by Toyota. Tra i compiti che affronterà il consorzio vi è la scrittura di guide e lo sviluppo di librerie, linters e analizzatori statici, nonché l'applicazione di metodi di verifica formale dell'affidabilità e lo sviluppo di sottogruppi del linguaggio per sistemi ad alta affidabilità.

Tra i progetti legati a sistemi ad alta affidabilità, si può citare Verus: uno strumento per la verifica della correttezza del codice scritto in Rust. La verifica avviene attraverso la definizione di specifiche che descrivono il comportamento consentito del codice. Durante l'esecuzione del codice, Verus controlla la conformità alle specifiche per confermare la correttezza del funzionamento.

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