Izdanje programskog jezika Rust 2021 (1.56)

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

Dodajte komentar