Rilascio del linguaggio di programmazione Rust 2021 (1.56)

È stata pubblicata la versione del linguaggio di programmazione di sistema Rust 1.56, nato dal progetto Mozilla, ma ora sviluppato sotto l'egida dell'organizzazione no-profit indipendente Rust Foundation. Oltre al normale numero di versione, la versione è denominata anche Rust 2021 e segna una stabilizzazione delle modifiche proposte negli ultimi tre anni. Rust 2021 servirà anche come base per aumentare le funzionalità nei prossimi tre anni, in modo simile a come il rilascio di Rust 2018 è diventato la base per lo sviluppo del linguaggio negli ultimi tre anni.

Per mantenere la compatibilità, gli sviluppatori possono utilizzare le etichette "2015", "2018" e "2021" nei loro programmi, consentendo ai programmi di essere collegati alle porzioni di stato della lingua corrispondenti alle edizioni selezionate di Rust. Le edizioni sono state introdotte per separare le modifiche incompatibili e sono configurate nei metadati dei pacchi cargo attraverso il campo “edizione” nella sezione “[pacchetto]”. Ad esempio, l’edizione “2018” include le funzionalità stabilizzate dalla fine del 2018 e copre anche tutte le ulteriori modifiche che non interrompono la compatibilità. L'edizione 2021 include inoltre funzionalità che compromettono l'interoperabilità proposte nell'attuale versione 1.56 e approvate per l'implementazione futura. Oltre al linguaggio stesso, i redattori tengono conto anche dello stato degli strumenti e della documentazione.

Principali incompatibilità registrate in Rust 2021:

  • Acquisizione separata nelle chiusure: ora le chiusure possono acquisire singoli nomi di campo anziché l'intero identificatore. Ad esempio, "|| ax + 1" catturerà solo "ax" anziché "a".
  • La caratteristica IntoIterator per gli array: array.into_iter() consente di eseguire l'iterazione sugli elementi dell'array in base ai valori, anziché ai riferimenti.
  • L'elaborazione delle espressioni "|" è stata modificata in macro_rules (OR booleano) nei modelli - Lo specificatore ":pat" nelle corrispondenze ora rispetta "A | B".
  • Il gestore dei pacchetti cargo include per impostazione predefinita la seconda versione del risolutore di funzionalità, il cui supporto è apparso in Rust 1.51.
  • I tratti TryFrom, TryInto e FromIterator sono stati aggiunti al modulo della libreria standard Prelude.
  • Le macro panico!(..) e assert!(expr, ..) ora usano sempre format_args!(..) per formattare le stringhe, in modo simile a println!().
  • Le espressioni ident#, ident»..." e ident'...' sono riservate nella sintassi del linguaggio.
  • Avvisi bare_trait_objects ed ellipsis_inclusive_range_patterns spostati negli errori.

Novità in Rust 1.56:

  • In Cargo.toml, nella sezione “[package]”, è stato aggiunto il campo ruggine-version, attraverso il quale è possibile determinare la versione minima supportata di Rust per il pacchetto crate. Se la versione corrente non corrisponde al parametro specificato, Cargo smetterà di funzionare con un messaggio di errore.
  • Quando si esegue la corrispondenza dei modelli utilizzando le espressioni "binding @ pattern", viene fornito il supporto per specificare ulteriori associazioni (ad esempio, "let matrice @ Matrix { row_len, .. } = get_matrix();").
  • Una nuova porzione dell'API è stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::riduci_a
    • Stringa::riduci_a
    • OsString::riduci_a
    • PathBuf::shrink_to
    • BinaryHeap::riduci_a
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::riduci_a
  • Nelle funzioni viene utilizzato l'attributo “const”, che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti
    • std::mem::trasmutare
    • [T]::prima
    • [T]::split_first
    • [T]::ultimo
    • [T]::dividi_ultimo
  • Il compilatore è stato modificato per utilizzare LLVM versione 13.
  • È stato implementato un secondo livello di supporto per la piattaforma aarch64-apple-ios-sim e un terzo livello per le piattaforme powerpc-unknown-freebsd e riscv32imc-esp-espidf. Il terzo livello prevede il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali o verifica se il codice può essere creato.

Ricordiamo che Rust è focalizzato sulla sicurezza della memoria, fornisce la gestione automatica della memoria e fornisce un mezzo per ottenere un elevato parallelismo nell'esecuzione dei lavori senza utilizzare un garbage collector o un runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

La gestione automatica della memoria di Rust elimina gli errori durante la manipolazione dei puntatori e protegge dai problemi derivanti dalla manipolazione della memoria di basso livello, come l'accesso a una regione di memoria dopo che è stata liberata, dereferenziazioni di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, garantire l'assemblaggio e gestire le dipendenze, il progetto sta sviluppando il gestore di pacchetti Cargo. Il repository crates.io è supportato per ospitare le librerie.

Fonte: opennet.ru

Aggiungi un commento