Objavljeno je izdanje sistemskog programskog jezika Rust 1.56, čiji je osnivač Mozilla projekat, a sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Osim redovnog broja verzije, izdanje je također označeno kao Rust 2021 i označava stabilizaciju promjena predloženih u protekle tri godine. Rust 2021 će takođe poslužiti kao osnova za izgradnju karakteristika u naredne tri godine, slično kao što je izdanje Rust 2018 bilo osnova za razvoj jezika u protekle tri godine.
Da bi održali kompatibilnost, programeri mogu koristiti oznake "2015", "2018" i "2021" u svojim programima da povežu programe sa rezovima stanja jezika koji odgovaraju odabranim Rust izdanjima. Revizije su uvedene za odvojene nekompatibilne promjene i konfigurirane su u metapodacima teretnih paketa preko polja "izdanje" u odjeljku "[paket]". Na primjer, izdanje "2018" uključuje funkcionalnost stabiliziranu krajem 2018. i također pokriva sve daljnje promjene koje ne narušavaju kompatibilnost. Izdanje za 2021. dodatno uključuje funkcije prekida kompatibilnosti predložene u trenutnom izdanju 1.56 i odobrene za implementaciju u budućnosti. Pored samog jezika, urednici vode računa i o stanju alata i dokumentacije.
Glavne nekompatibilnosti ispravljene u Rust 2021 su:
- Odvojeno hvatanje u zatvaranjima - Zatvaranja sada mogu uhvatiti pojedinačna imena polja umjesto cijelog ID-a. Na primjer, "|| ax + 1" će obuhvatiti samo "ax" umjesto "a".
- Karakteristika IntoIterator za nizove: array.into_iter() vam omogućava da iterirate elemente niza po vrijednosti, a ne po referenci.
- Obrada "|" izraza je promijenjena u macro_rules (logička operacija ILI) u obrascima - Specifikator ":pat" u podudaranjima sada poštuje obrasce "A | B".
- Upravljač teretnim paketima podrazumevano uključuje drugu verziju razrešivača karakteristika, podrška za koju je uvedena u Rust 1.51.
- Osobine TryFrom, TryInto i FromIterator dodane su modulu standardne biblioteke preludija.
- Makroi panike!(..) i assert!(expr, ..) sada uvijek koriste format_args!(..) za formatiranje stringova, slično println!().
- Izrazi ident#, ident"..." i ident'...' su rezervisani u sintaksi jezika.
- Upozorenja bare_trait_objects i ellipsis_inclusive_range_patterns su premještena u kategoriju greške.
Novo u Rust 1.56:
- U Cargo.toml, u odeljku "[package]", dodato je polje rust-version preko kojeg možete odrediti minimalnu podržanu verziju Rusta za paket sanduka. Ako trenutna verzija ne odgovara navedenom parametru, Cargo će prekinuti s greškom.
- Prilikom podudaranja šablona pomoću izraza "binding @ pattern", podrška je obezbeđena za određivanje dodatnih veza (na primjer, "neka matrica @ Matrix { row_len, .. } = get_matrix();").
- Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
- 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
- U funkcijama se koristi atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti
- std::mem::transmute
- [T]::prvi
- [T]::split_first
- [T]::zadnji
- [T]::split_last
- Kompajler je prebačen na LLVM verziju 13.
- Implementirana podrška nivoa 64 za platformu aarch32-apple-ios-sim i podrška nivoa XNUMX za platforme powerpc-unknown-freebsd i riscvXNUMXimc-esp-espidf. Treći nivo podrazumeva osnovnu podršku, ali bez automatizovanog testiranja, objavljivanja zvaničnih buildova i provere sposobnosti izrade koda.
Podsjetimo da se Rust jezik fokusira na bezbedno upravljanje memorijom, obezbeđuje automatsko upravljanje memorijom i obezbeđuje sredstva za postizanje visokog paralelizma izvršenja posla, bez upotrebe sakupljača smeća i vremena izvođenja (vreme izvođenja se svodi na osnovnu inicijalizaciju i održavanje standardna biblioteka).
Rust-ovo automatsko upravljanje memorijom spašava programere od grešaka prilikom manipulacije pokazivačima i štiti od problema koji nastaju zbog manipulacije memorijom niskog nivoa, kao što je pristup memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.
izvor: opennet.ru