Publikimi i gjuhës programuese Rust 2021 (1.56)

Është publikuar publikimi i gjuhës së programimit të sistemit Rust 1.56, i themeluar nga projekti Mozilla, por tashmë i zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation. Përveç numrit të versionit të rregullt, lëshimi është caktuar gjithashtu Rust 2021 dhe shënon një stabilizim të ndryshimeve të propozuara gjatë tre viteve të fundit. Rust 2021 do të shërbejë gjithashtu si bazë për rritjen e funksionalitetit gjatë tre viteve të ardhshme, ngjashëm me mënyrën se si lëshimi i Rust 2018 u bë baza për zhvillimin e gjuhës në tre vitet e fundit.

Për të ruajtur përputhshmërinë, zhvilluesit mund të përdorin etiketat "2015", "2018" dhe "2021" në programet e tyre, duke lejuar që programet të lidhen me pjesët e gjendjes së gjuhës që korrespondojnë me botimet e zgjedhura të Rust. Botimet u prezantuan për të veçuar ndryshimet e papajtueshme dhe konfigurohen në meta të dhënat e paketave të ngarkesave përmes fushës "edicion" në seksionin "[paketë]". Për shembull, edicioni "2018" përfshin funksionalitetin e stabilizuar në fund të vitit 2018 dhe gjithashtu mbulon të gjitha ndryshimet e mëtejshme që nuk prishin përputhshmërinë. Edicioni i vitit 2021 përfshin gjithashtu veçori të thyerjes së ndërveprueshmërisë të propozuara në versionin aktual 1.56 dhe të miratuara për zbatimin e ardhshëm. Përveç vetë gjuhës, redaktorët marrin parasysh edhe gjendjen e mjeteve dhe dokumentacionit.

Papajtueshmëritë kryesore të regjistruara në Rust 2021:

  • Regjistrimi i veçantë në mbyllje - Mbylljet tani mund të kapin emrat e fushave individuale në vend të të gjithë identifikuesit. Për shembull, "|| sëpatë + 1" do të kapë vetëm "ax" në vend të "a".
  • Tipari IntoIterator për vargje: array.into_iter() ju lejon të përsërisni mbi elementët e grupit sipas vlerave, dhe jo sipas referencave.
  • Përpunimi i shprehjeve "|" është ndryshuar në makro_rregullat (Boolean OR) në modele - Specifikimi ":pat" në përputhje tani respekton "A | B".
  • Menaxheri i paketave të ngarkesave përfshin si parazgjedhje versionin e dytë të zgjidhësit të veçorive, mbështetja për të cilën u shfaq në Rust 1.51.
  • Tiparet TryFrom, TryInto dhe FromIterator janë shtuar në modulin standard të bibliotekës së preludit.
  • Paniku!(..) dhe pohoni!(expr, ..) makrot tani përdorin gjithmonë format_args!(..) për të formatuar vargjet, të ngjashme me println!().
  • Shprehjet ident#, ident»... dhe ident'...' janë të rezervuara në sintaksën e gjuhës.
  • Paralajmërimet e bare_trait_objects dhe ellipsis_inclusive_range_patterns u zhvendosën te gabimet.

E re në Rust 1.56:

  • Në Cargo.toml, në seksionin "[paketë]", është shtuar fusha rust-version, përmes së cilës mund të përcaktoni versionin minimal të mbështetur të Rust për paketën e arkës. Nëse versioni aktual nuk përputhet me parametrin e specifikuar, Cargo do të ndalojë së punuari me një mesazh gabimi.
  • Kur modeli përputhet duke përdorur shprehjet "binding @ pattern", ofrohet mbështetje për specifikimin e lidhjeve shtesë (për shembull, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Një pjesë e re e API-së është zhvendosur në kategorinë e qëndrueshme, duke përfshirë metodat dhe implementimet e tipareve janë stabilizuar:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • thelbi::panik::{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
  • Atributi "const", i cili përcakton mundësinë e përdorimit në çdo kontekst në vend të konstanteve, përdoret në funksione
    • std::mem::transmute
    • [T]:: së pari
    • [T]::split_first
    • [T]:: e fundit
    • [T]::split_last
  • Përpiluesi është ndërruar për të përdorur versionin 13 të LLVM.
  • Një nivel i dytë i mbështetjes është zbatuar për platformën aarch64-apple-ios-sim dhe një nivel i tretë për platformat powerpc-unknown-freebsd dhe riscv32imc-esp-espidf. Niveli i tretë përfshin mbështetjen bazë, por pa testim të automatizuar, publikim të ndërtimeve zyrtare ose kontrollim nëse kodi mund të ndërtohet.

Kujtoni se Rust është i fokusuar në sigurinë e memories, siguron menaxhimin automatik të kujtesës dhe ofron një mjet për të arritur paralelizëm të lartë në ekzekutimin e punës pa përdorur një grumbullues mbeturinash ose kohëzgjatjeje (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Menaxhimi automatik i kujtesës i Rust eliminon gabimet gjatë manipulimit të treguesve dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të memories, të tilla si qasja në një rajon memorie pasi të jetë liruar, mosreferencat e treguesit null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë, projekti po zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Burimi: opennet.ru

Shto një koment