ĂshtĂ« publikuar lĂ«shimi i gjuhĂ«s sĂ« programimit sistemor Rust 1.56, e bazuar nĂ« projektin Mozilla, por aktualisht e zhvilluar nĂ«n mbĂ«shtetje tĂ« organizatĂ«s sĂ« pavarur jofitimprurĂ«se Rust Foundation. PĂ«rveç numrit standard tĂ« versionit, lĂ«shimi shĂ«nohet gjithashtu si Rust 2021 dhe tregon stabilizimin e ndryshimeve tĂ« propozuara gjatĂ« tre viteve tĂ« fundit. Rust 2021 gjithashtu do tĂ« shĂ«rbejĂ« si bazĂ« pĂ«r rritjen e funksionalitetit nĂ« tri vitet e ardhshme, ashtu siç lĂ«shimi i Rust 2018 u bĂ« baza pĂ«r zhvillimin e gjuhĂ«s gjatĂ« tre viteve tĂ« kaluara.
Për të ruajtur kompatibilitetin, zhvilluesit mund të përdorin në programet e tyre etiketat "2015", "2018" dhe "2021", të cilat lejojnë lidhjen e programeve me prerjet e gjendjes së gjuhës, përkatëse me edicionet e përzgjedhura të Rust. Edicionet u introduhuan për të ndarë ndryshimet jo-kompatibile dhe konfigurohen në metadatën e pakove cargo përmes fushës "edition" në seksionin "[package]". Për shembull, edicioni "2018" përfshin funksionalitetin e stabilizuar deri në fund të vitit 2018 dhe gjithashtu mbulon të gjitha ndryshimet e mëtejshme që nuk dëmtojnë kompatibilitetin. Edicioni "2021" përfshin gjithashtu inovacione që dëmtojnë kompatibilitetin, të propozuara në lëshimin aktual 1.56 dhe të miratuara për zbatim në të ardhmen. Përveç gjuhës, edicionet gjithashtu marrin parasysh gjendjen e veglave dhe dokumentacionit.
Pikat kryesore të moskompatibilitetit të dokumentuara në Rust 2021:
- Kapja e ndarĂ« nĂ« mbyllje â mbylljet tani mund tĂ« kapin emra specifikĂ« fushash nĂ« vend tĂ« identifikatorit tĂ« plotĂ«. PĂ«r shembull, "|| a.x + 1" do tĂ« kapĂ« vetĂ«m "a.x" nĂ« vend tĂ« "a".
- Trait-i IntoIterator për array-e: array.into_iter() lejon organizimin e përshkimeve të elementeve të array-it sipas vlerave, dhe jo sipas referencave.
- NĂ« macro_rules Ă«shtĂ« ndryshuar pĂ«rpunimi i shprehjeve «|» (operacioni logjik OR) nĂ« shabllonĂ«t â specifikatori «:pat» nĂ« pĂ«rputhjet tani merr parasysh shabllonĂ«t «A | B».
- Në menaxherin e paketave cargo është përfshirë si versioni i dytë i përcaktuesit të mundësive (feature resolver), mbështetje kjo që ka ardhur me Rust 1.51.
- Tipazhet (trait) TryFrom, TryInto dhe FromIterator janë shtuar në përbërjen e modulit të bibliotekës standarde prelude.
- Makrot panic!(..) dhe assert!(expr, ..) tani gjithmonë përdorin format_args!(..) për formatimin e vargjeve në përputhje me println!().
- NĂ« sintaksĂ«n e gjuhĂ«s janĂ« rezervuar shprehjet ident#, ident»âŠÂ» dhe identââŠâ.
- Paralajmërimet bare_trait_objects dhe ellipsis_inclusive_range_patterns janë shkarkuar në kategorinë e gabimeve.
Novitetet e Rust 1.56:
- Në Cargo.toml, në seksionin «[package]» është shtuar fusha rust-version, përmes të cilës mund të përcaktoni versionin minimal që mbështetet nga Rust për crate-paketën. Nëse versioni aktual nuk i përgjigjet të dhënës, Cargo do të ndalojë punën me një mesazh gabimi.
- Në përputhjen me modelin përmes shprehjeve «binding @ pattern» është zbatuar mbështetje për dhënien e lidhjeve shtesë (p.sh., «let matrix @ Matrix { row_len, .. } = get_matrix();»).
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- 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
- Neni 'const' që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar në funksione
- std::mem::transmute
- [T]::first
- [T]::split_first
- [T]::last
- [T]::split_last
- Kompilatori është kaluar në përdorimin e versionit LLVM 13.
- ĂshtĂ« implementuar niveli i dytĂ« i mbĂ«shtetjes pĂ«r platformĂ«n aarch64-apple-ios-sim dhe niveli i tretĂ« pĂ«r platformat powerpc-unknown-freebsd dhe riscv32imc-esp-espidf. Niveli i tretĂ« pĂ«rfshin mbĂ«shtetje bazike, por pa testim tĂ« automatizuar, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« sĂ« ndĂ«rtimit tĂ« kodit.
Kujtojmë se gjuha Rust është e përqendruar në punën e sigurt me memorie, siguron menaxhim automatatik të memories dhe ofron mjete për të arritur një paralelizëm të lartë në përfundimin e detyrave, duke u shpëtuar pa përdorimin e mbledhësit të plehrave dhe runtime (runtime reduktohet në inicializimin bazik dhe mirëmbajtjen e bibliotekës standarde).
Menaxhimi automatik i memories në Rust e shpëton zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbron nga probleme që lindin nga puna në nivel të ulët me memorien, si aksesimi në një zonë të memories pas çlirimit të saj, dereferimi i treguesve nul, dalja jashtë kufijve të buffers dhe të tjerë. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillon menaxherin e pakove Cargo. Për hostimin e bibliotekave, mbështetet repozitari crates.io.
Burimi: opennet.ru
