Rilascio del linguaggio di programmazione Rust 1.42

pubblicato rilascio del linguaggio di programmazione del sistema Ruggine 1.42fondato dal progetto Mozilla. Il linguaggio si concentra sulla gestione sicura della memoria, fornisce una gestione automatica della memoria e fornisce i mezzi per ottenere un elevato parallelismo dei lavori evitando l'uso di un garbage collector e runtime.

La gestione automatica della memoria di Rust libera lo sviluppatore dalla manipolazione dei puntatori e protegge dai problemi derivanti dalla manipolazione della memoria di basso livello, come accessi alla memoria after-free, dereferenziazioni di puntatori nulli, sovraccarichi del buffer e simili. È in fase di sviluppo un gestore di pacchetti per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze del progetto. ufficio, che ti consente di ottenere le librerie necessarie per il programma in un clic. È supportato un repository per ospitare le librerie casse.io.

Il principale innovazioni:

  • Aggiunto da supporto per modelli per la corrispondenza di parti di sezioni (array dinamici, sezioni). In precedenza erano consentite corrispondenze esatte, ma ora è possibile utilizzare costrutti contrassegnati con ".." per coprire gli elementi rimanenti dell'array. Per esempio:

    fn foo(parole: &[&str]) {
    abbina le parole {

    // controlla gli elementi iniziali dell'array e li ignora
    elementi che li seguono
    ["Ciao", "Mondo", "!", ..] => println!("Ciao Mondo!"),

    // controlla i primi due elementi "Foo" e "Bar", il resto non è importante
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignora tutto, ma l'ultimo elemento deve essere "!".
    [.., “!”] => println!(“!!!”),

    // nella slice iniziale includiamo tutto tranne l'ultimo elemento, che dovrebbe essere “z”
    [inizio @ .., "z"] => println!("inizia con: {:?}", inizio),

    // nello slice finale mettiamo tutto tranne il primo elemento, che dovrebbe essere “a”.
    ["a", end @ ..] => println!("termina con: {:?}", end),

    resto => println!("{:?}", resto),
    }
    }

  • Aggiunta una nuova macro "matches!", che accetta un'espressione e un modello come input e restituisce "vero" se il modello corrisponde all'espressione. Il modello può utilizzare le operazioni "|". e se".

    corrisponde a self.partial_cmp(altro) {
    Alcuni (meno) => vero,
    _ => falso,
    }

    corrisponde!(self.partial_cmp(altro), Alcuni(Meno))

    lascia foo = 'f';
    assert!(corrisponde!(foo, 'A'..='Z' | 'a'..='z'));

    let bar = Alcuni(4);
    assert!(corrisponde!(bar, Some(x) se x > 2));

  • Nei messaggi di panico visualizzati se utilizzati in modo errato
    tipi Opzione e Risultato, ora visualizzano i numeri di riga con un collegamento al codice che ha effettuato la chiamata problematica, anziché collegamenti al codice che implementa la chiamata in libcore. Ad esempio, la modifica influisce sulle chiamate a unwrap e wait su Option::None oppure si blocca quando si utilizzano unwrap_err, wait, wait_err e metodi simili sul tipo Result.

  • Il gestore dei pacchetti Cargo fornisce la sostituzione automatica di "proc_macro crate" nel blocco "extern" per i pacchetti con macro procedurali. Questa modifica consente di applicare la direttiva "use" alle macro procedurali senza dover specificare "extern crate proc_macro;" nel codice. Ad esempio, se il programma utilizza la riga "use proc_macro::TokenStream;", il codice continuerà a funzionare anche se "extern crate proc_macro;" viene rimosso da esso.
  • Le capacità della libreria standard sono state ampliate. Nell'iter::Vuoto aggiunto Invia e sincronizza il supporto per qualsiasi valore T.
    Chiama Pin::{map_unchecked, map_unchecked_mut} consegnato dal dover restituire un valore di tipo per l'implementazione "Sized".
    In io::Cursore implementato ParzialeEq ed Eq. L'attributo “const” determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, applicato per il metodo Layout::new.

  • Una nuova porzione dell'API è stata trasferita nella categoria stabile, inclusa la CondVar::wait_through stabilizzata, CondVar::wait_timeout_through,
    DebugMap::chiave, DebugMap::valore,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut e ptr::slice_from_raw_parts.

  • Il metodo Error::description è stato deprecato.
  • Fornito supporto di secondo livello per le piattaforme armv7a-none-eabi e riscv64gc-unknown-linux-gnu. È stato fornito il supporto per la libreria standard per la piattaforma riscv64gc-unknown-linux-gnu.
    Piattaforme Apple a 32 bit retrocesso fino al terzo livello di supporto, che implica supporto di base, ma senza test automatizzati e pubblicazione di build ufficiali. Il downgrade del supporto è dovuto al fatto che Apple non supporta più le piattaforme a 32 bit.

Fonte: opennet.ru

Aggiungi un commento