Objavljen je Rust 1.56, sistemski programski jezik koji je osnovala Mozilla, a sada ga održava neovisna neprofitna organizacija Rust Foundation. Osim službenog broja verzije, izdanje je također označeno kao Rust 2021 i označava stabilizaciju promjena predloženih tijekom protekle tri godine. Rust 2021 također će poslužiti kao temelj za dodavanje značajki tijekom sljedeće tri godine, slično kao što je Rust 2018 činio osnovu za razvoj jezika tijekom protekle tri godine.
Kako bi održali kompatibilnost, programeri mogu koristiti oznake "2015", "2018" i "2021" u svojim programima, koje ih povezuju s dijelovima stanja jezika koji odgovaraju odabranim Rust izdanjima. Izdanja su uvedena kako bi se odvojile nekompatibilne promjene i konfiguriraju se u metapodacima teretnog paketa putem polja "izdanje" u odjeljku "[paket]". Na primjer, izdanje "2018" uključuje funkcionalnost stabiliziranu od kraja 2018. i pokriva sve buduće promjene koje nisu ključne. Izdanje "2021" dodatno uključuje značajke koje su ključne predložene u trenutnom izdanju 1.56 i odobrene za buduću implementaciju. Osim samog jezika, izdanja također uzimaju u obzir stanje alata i dokumentacije.
Glavne nekompatibilnosti ispravljene u Rustu 2021:
- Odvojeno snimanje u closuresima – Closures sada mogu snimati pojedinačna imena polja umjesto cijelog identifikatora. Na primjer, "|| ax + 1" će snimati samo "ax" umjesto "a".
- IntoIterator svojstvo za nizove: array.into_iter() omogućuje vam iteraciju kroz elemente niza po vrijednostima, a ne po referencama.
- U makro pravilima (macro_rules) promijenjeno je rukovanje izrazima "|" (logička ILI operacija) u uzorcima - specifikator ":pat" u podudaranjima sada uzima u obzir uzorke "A | B".
- Upravitelj cargo paketa sada prema zadanim postavkama uključuje drugu verziju resolvera značajki, koja je dodana u Rustu 1.51.
- Svojstva TryFrom, TryInto i FromIterator dodana su u standardni bibliotečni modul Prelude.
- Makroi panic!(..) i assert!(expr, ..) sada uvijek koriste format_args!(..) za formatiranje nizova, slično kao println!().
- Izrazi ident#, ident»…» i ident'…' su rezervirani u sintaksi jezika.
- Upozorenja bare_trait_objects i ellipsis_inclusive_range_patterns su unaprijeđena u pogreške.
Što je novo u Rustu 1.56:
- U odjeljak "[package]" datoteke Cargo.toml dodano je polje za verziju Rusta. Ovo polje omogućuje vam da odredite minimalnu podržanu verziju Rusta za paket crate. Ako trenutna verzija ne odgovara navedenom parametru, Cargo će prestati raditi i vratiti grešku.
- Prilikom usklađivanja uzoraka korištenjem izraza "vezivanje @ uzorak", sada je implementirana podrška za specificiranje dodatnih vezanja (npr. "let matrix @ Matrix { row_len, .. } = get_matrix();").
- Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
- std::os::unix::fs::chroot
- NesigurnaCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
- Vec::smanji_na
- String::smanji_se_na
- OsString::shrink_to
- PathBuf::shrink_to
- BinaryHeap::shrink_to
- VecDeque::smanji_na
- HashMap::shrink_to
- HashSet::shrink_to
- Zastavica "const", koja određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama.
- std::mem::transmute
- [T]::prvi
- [T]::split_first
- [T]::zadnji
- [T]::split_last
- Kompajler je prebačen na korištenje LLVM verzije 13.
- Podrška razine 2 implementirana je za platformu aarch64-apple-ios-sim, a podrška razine 3 za platforme powerpc-unknown-freebsd i riscv32imc-esp-espidf. Razina 3 pruža osnovnu podršku, ali bez automatiziranog testiranja, službenih izdanja ili provjere verzija.
Podsjećamo, Rust jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma u izvršavanju zadataka, sve bez potrebe za sakupljačem smeća ili okruženjem za izvođenje (okruženje za izvođenje je ograničeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).
Rustovo automatsko upravljanje memorijom uklanja pogreške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što je pristup memorijskoj regiji nakon što je oslobođena, dereferenciranje nultog pokazivača, prekoračenje međuspremnika, itd. Za distribuciju knjižnica, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.
Izvor: opennet.ru
