A liberazione di a lingua di prugrammazione di u sistema Rust 1.56, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. In più di u numeru di versione regulare, a liberazione hè ancu marcata cum'è Rust 2021 è marca a stabilizazione di i cambiamenti pruposti in l'ultimi trè anni. Rust 2021 servirà ancu di basa per e funzioni di custruzzione in i prossimi trè anni, simile à cumu a versione Rust 2018 hè stata a basa per u sviluppu di a lingua in l'ultimi trè anni.
Per mantene a cumpatibulità, i sviluppatori ponu aduprà i tags "2015", "2018" è "2021" in i so prugrammi per ligà i prugrammi à e fette di u statu di lingua chì currispondenu à l'edizioni Rust selezziunate. E revisioni sò state introdutte per separà i cambiamenti incompatibili è sò cunfigurati in i metadati di i pacchetti di carica via u campu "edizione" in a sezione "[pacchettu]". Per esempiu, l'edizione "2018" include funziunalità stabilizzata à a fine di 2018 è copre ancu tutti i cambiamenti chì ùn violanu micca a cumpatibilità. L'edizione 2021 include ancu funzioni di rottura di cumpatibilità pruposte in a versione 1.56 attuale è appruvata per l'implementazione in u futuru. In più di a lingua stessa, l'editori piglianu ancu in contu u statu di l'arnesi è a ducumentazione.
I principali incompatibilità fissati in Rust 2021 sò:
- Capture Separate in Closures - I Closures ponu avà catturà nomi di campi individuali invece di l'ID sanu. Per esempiu, "|| ax + 1" catturarà solu "ax" invece di "a".
- U trattu IntoIterator per arrays: array.into_iter() permette di iterà nantu à l'elementi di un array per valore in quantu chì per riferimentu.
- U trattamentu di l'espressioni "|" hè statu cambiatu in macro_rules (operazione logica OR) in mudelli - U specificatore ": pat" in i partiti rispettu avà i mudelli "A | B".
- U gestore di pacchetti di carica include per automaticamente a seconda versione di u risolve di funzioni, u supportu per quale hè statu introduttu in Rust 1.51.
- I tratti TryFrom, TryInto, è FromIterator sò stati aghjuntu à u modulu di biblioteca standard di prelude.
- U panicu!(..) è assert!(expr, ..) macros avà sempre aduprà format_args!(..) per furmà strings, simili à println!().
- L'espressioni ident#, ident"..." è ident'...' sò riservate in a sintassi di a lingua.
- L'avvisi di bare_trait_objects è ellipsis_inclusive_range_patterns sò stati spustati in a categuria d'errore.
Novu in Rust 1.56:
- In Cargo.toml, in a sezione "[pacchettu]", hè statu aghjuntu u campu di rust-version, per mezu di quale pudete determinà a versione minima supportata di Rust per u pacchettu crate. Se a versione attuale ùn currisponde à u paràmetru specificatu, Cargo aborterà cù un errore.
- Quandu u mudellu di cunfrontu cù l'espressioni "binding @ pattern", hè furnitu supportu per specificà ligami supplementari (per esempiu, "let matrix @ Matrix { row_len, .. } = get_matrix();").
- Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
- std::os::unix::fs::chroot
- UnsafeCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
- Vec::shrink_to
- String::shrink_to
- OsString::shrink_to
- PathBuf::shrink_to
- BinaryHeap::shrink_to
- VecDeque::shrink_to
- HashMap::shrink_to
- HashSet::shrink_to
- L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in funzioni.
- std::mem::transmute
- [T]::prima
- [T]::split_first
- [T]::ultimu
- [T]::split_last
- U compilatore hè statu cambiatu per utilizà a versione LLVM 13.
- Implementatu u supportu di livellu 64 per a piattaforma aarch32-apple-ios-sim è u supportu di livellu XNUMX per e plataforme powerpc-unknown-freebsd è riscvXNUMXimc-esp-espidf. U terzu livellu implica un supportu basicu, ma senza teste automatizate, pubblicà custruzzioni ufficiali è verificate a capacità di custruisce u codice.
Ricurdativi chì a lingua Rust si focalizeghja nantu à a gestione di memoria sicura, furnisce una gestione automatica di memoria, è furnisce un mezzu per ottene un parallelismu elevatu di l'execuzione di u travagliu, senza l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di u travagliu). libreria standard).
A gestione automatica di a memoria di Rust salva u sviluppatore da l'errore durante a manipulazione di puntatori è prutegge da i prublemi chì si sviluppanu per via di a manipulazione di memoria di livellu bassu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prugettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per e biblioteche di hosting.
Source: opennet.ru