Rilascio di Rust 1.79. È stato creato un consorzio per lo sviluppo di sistemi altamente affidabili in Rust

È stato pubblicato il rilascio del linguaggio di programmazione di uso generale Rust 1.79, originariamente sviluppato da Mozilla, ora sotto la guida della Rust Foundation, un'organizzazione indipendente senza scopo di lucro. Il linguaggio si concentra sulla gestione sicura della memoria e fornisce strumenti per raggiungere un elevato parallelismo nelle operazioni, senza necessitare di un garbage collector o di runtime (il runtime si limita a inizializzare e mantenere la 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:

  • È stato aggiunto il supporto per le costanti inline, che possono essere specificate direttamente nel codice tramite blocchi «const { … }», elaborati nel contesto delle costanti e che permettono di evitare la definizione separata delle costanti. Il codice nel blocco «const { … }» viene calcolato in fase di compilazione e usato come costante, senza essere eseguito al momento dell'esecuzione del programma. A differenza delle costanti definite con l'espressione «const ITEM: … = …», nei blocchi «const { … }» non è necessario specificare il tipo, poiché supportano l'inferenza automatica del tipo. 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 inline:

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

  • È stato stabilizzato il sintassi «T: Trait» per specificare vincoli in una posizione di tipo associativo, che consente di semplificare la definizione di espressioni con vincoli di tipo annidati, che in precedenza richiedevano di specificare un impl Trait annidato o più condizioni «where».
  • È stata garantita l'estensione automatica della vita dei valori temporanei utilizzati in costrutti «match» e «if».

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

  • È stata stabilizzata la possibilità di importare la funzione main da altri moduli e pacchetti crate.
  • Durante la compilazione della libreria standard, è stato utilizzato 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 traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • {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
  • L'indicatore «const», che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, è stato 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
  • È stata stabilizzata
    una parte delle funzionalità che possono essere utilizzate durante la compilazione in rappresentazione intermedia WebAssembly (WASM).
  • È stato implementato un terzo livello di supporto per le piattaforme aarch64-apple-visionos, aarch64-apple-visionos-sim e riscv32ima-unknown-none-elf. Il terzo livello implica il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilare codice.
  • È stato implementato un 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 implica la garanzia di compilazione.

Inoltre, la Rust Foundation, che sovrintende all'ecosistema legato al linguaggio Rust, ha annunciato la creazione del consorzio «Safety-Critical Rust Consortium», mirato all'uso del linguaggio Rust in soluzioni che richiedono un'elevata affidabilità (Safety-Critical Software), i cui guasti possono mettere a rischio la vita umana, danneggiare l'ambiente o causare gravi danni a attrezzature. Tra le aziende che hanno aderito al consorzio ci sono ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle e Woven by Toyota. Tra i compiti che il consorzio si prefigge di affrontare ci sono la scrittura di guide e lo sviluppo di librerie, linters e analizzatori statici, oltre all'applicazione di metodi di verifica formale dell'affidabilità e allo sviluppo di sottoinsiemi del linguaggio per sistemi ad alta affidabilità.

Tra i progetti legati a sistemi ad alta affidabilità, si segnala Verus — uno strumento per verificare la correttezza del codice scritto in Rust. La verifica avviene mediante la definizione di specifiche che descrivono il comportamento accettabile del codice. Durante l'esecuzione del codice eseguibile, Verus verifica la conformità alla specifica per attestare la correttezza del funzionamento.

Fonte: opennet.ru

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