rilascio del linguaggio di programmazione di sistema , sviluppato da Mozilla. Il linguaggio è focalizzato sulla gestione sicura della memoria, offre gestione automatica della memoria e fornisce strumenti per raggiungere un elevato parallelismo nell'esecuzione dei compiti, evitando l'uso del garbage collector e .
La gestione automatica della memoria in Rust libera gli sviluppatori dalla manipolazione dei puntatori e protegge da problemi derivanti da operazioni a basso livello con la memoria, come l'accesso a memoria già liberata, dereferenziazione di puntatori nulli, overflow del buffer e simili. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, è in fase di sviluppo un gestore di pacchetti , che consente di ottenere le librerie necessarie per il programma con un clic. Per l'hosting delle librerie è supportato il repository .
Principali :
- supporto per schemi di corrispondenza per parti di slice (array dinamici). Se prima erano consentiti solo corrispondenze esatte, ora è stata aggiunta la possibilità di utilizzare costrutti con l'etichetta «..» per coprire gli elementi rimanenti nell'array. Ad esempio:
fn foo(words: &[&str]) {
match words {// проверяет начальные элементы массива с игнорированием
gli elementi successivi
[«Hello», «World», «!», ..] => println!(«Hello World!»),// проверяет первые два элемента «Foo» и «Bar», а остальное не важно
[«Foo», «Bar», ..] => println!(«Baz»),// игнорируем всё, но последний элемент должен быть «!».
[.., «!»] => println!(«!!!»),// в срез start включаем всё, кроме последнего элемента, который должен быть «z»
[start @ .., «z»] => println!(«inizia con: {:?}», start),// в срез end помещаем всё, кроме первого элемента, который должен быть «a».
[«a», end @ ..] => println!(«finisce con: {:?}», end),rest => println!(«{:?}», rest),
}
} - È stato aggiunto un nuovo macro «matches!», che accetta un'espressione e un modello come input e restituisce «true» se il modello corrisponde all'espressione. Nel modello è possibile utilizzare le operazioni «|» e «if».
match self.partial_cmp(other) {
Some(Less) => true,
_ => false,
}matches!(self.partial_cmp(other), Some(Less))
let foo = ‘f’;
assert!(matches!(foo, ‘A’..=’Z’ | ‘a’..=’z’));let bar = Some(4);
assert!(matches!(bar, Some(x) if x > 2)); - Nei messaggi di panic, emessi in caso di utilizzo errato
dei tipi Option e Result, vengono ora riflessi i numeri di riga con un rimando al codice che ha fatto il chiamata problematica, invece dei riferimenti al codice di implementazione della chiamata in libcore. Ad esempio, la modifica interessa la chiamata unwrap e expect su Option::None o i guasti quando si utilizza unwrap_err, expect, expect_err e metodi simili per il tipo Result. - Nel gestore di pacchetti Cargo è stata garantita l'inserimento automatico del "proc_macro crate" nel blocco "extern" per i pacchetti contenenti macro procedurali. Questa modifica consente di applicare la direttiva "use" alle macro procedurali senza la necessità di indicare nel codice "extern crate proc_macro;". Ad esempio, se nel programma è presente la riga "use proc_macro::TokenStream;", il codice rimarrà funzionante anche se si rimuove "extern crate proc_macro;".
- Ampliate le funzionalità della libreria standard. In iter::Empty il supporto Send e Sync per qualsiasi valore T.
Le chiamate Pin::{map_unchecked, map_unchecked_mut} dalla necessità di restituire un valore di tipo per implementare "Sized."
In io::Cursor PartialEq ed Eq. Il flag "const", che definisce la possibilità di utilizzarlo in qualsiasi contesto al posto di costanti, per il metodo Layout::new. - Una nuova serie di API è stata tradotta nella categoria stabile, inclusi CondVar::wait_while, CondVar::wait_timeout_while,
DebugMap::key, DebugMap::value,
ManuallyDrop::take,
ptr::slice_from_raw_parts_mut e ptr::slice_from_raw_parts. - Il metodo Error::description è stato dichiarato obsoleto.
- È stata garantita una seconda livello di supporto per le piattaforme armv7a-none-eabi e riscv64gc-unknown-linux-gnu. È stato garantito il supporto della libreria standard per la piattaforma riscv64gc-unknown-linux-gnu.
Le piattaforme Apple a 32 bit a un terzo livello di supporto, che prevede un supporto di base ma senza test automatizzati e pubblicazione di build ufficiali. La riduzione del livello di supporto è dovuta alla cessazione del supporto da parte di Apple per le piattaforme a 32 bit.
Fonte: opennet.ru
