ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.57, e cila Ă«shtĂ« bazuar nĂ« projektin Mozilla, por tani Ă«shtĂ« duke u zhvilluar nĂ«n mbikĂ«qyrjen e njĂ« organizate tĂ« pavarur dhe jo-fitimprurĂ«se, Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e menaxhimit tĂ« memories, ofron menaxhim automatik tĂ« memories dhe siguron mjete pĂ«r arritjen e paralelizmit tĂ« lartĂ« tĂ« ekzekutimeve, duke shmangur pĂ«rdorimin e mbledhĂ«sve tĂ« plehrave dhe runtime (runtime reduktohet nĂ« inicializimin bazik dhe mbĂ«shtetje pĂ«r bibliotekĂ«n 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.
TĂ« rejat kryesore:
- ĂshtĂ« stabilizuar pĂ«rdorimi i makrosĂ« «panic!» nĂ« kontekstet e krijuara gjatĂ« kompilimit, tĂ« tilla si shpalljet «const fn». PĂ«r mĂ« tepĂ«r, pĂ«rveç pĂ«rdorimit tĂ« «panic!» nĂ« shpalljet const, lejohet pĂ«rdorimi i makrosĂ« «assert!» dhe disa API tĂ« tjera tĂ« bibliotekĂ«s standarde. Stabilizimi akoma nuk mbulon gjithĂ« infrastrukturĂ«n e formatimit, prandaj nĂ« formĂ«n aktuale makroja «panic!» mund tĂ« pĂ«rdoret vetĂ«m me stringje statike (panic!(«âŠÂ»)) ose me njĂ« vlerĂ« tĂ« njĂ« ndĂ«rvlerĂ«suar «&str» gjatĂ« vendosjes (panic!(«{}», a)), e cila duhet tĂ« kufizohet nĂ« vendosjen e «{}» pa specifikatorĂ« formatimi dhe tipa tĂ« tjerĂ«. NĂ« tĂ« ardhmen, aplikueshmĂ«ria e makrosĂ«ve nĂ« kontekstet konstante do tĂ« zgjerohen, por mundĂ«sitĂ« e stabilizuara tashmĂ« janĂ« tĂ« mjaftueshme pĂ«r tĂ« kryer verifikime assert nĂ« fazĂ«n e kompilimit: const _: () = assert!(std::mem::size_of::() == 8); const _: () = assert!(std::mem::size_of::() == 1);
- NĂ« menaxherin e paketave Cargo, lejohet pĂ«rdorimi i profileve me emra tĂ« rastĂ«sishĂ«m, pa u kufizuar nĂ« «dev», «release», «test» dhe «bench». PĂ«r shembull, pĂ«r tĂ« aktivizuar optimizimin gjatĂ« procesit tĂ« lidhjes (LTO) vetĂ«m gjatĂ« krijimit tĂ« montimeve pĂ«rfundimtarĂ« tĂ« produktit, mund tĂ« krijoni njĂ« profil «production» nĂ« Cargo.toml dhe tĂ« shtoni flagun «lto = true». NĂ« kĂ«tĂ« rast, kur pĂ«rcaktoni profilet tuaja, Ă«shtĂ« e nevojshme tĂ« specifikoni njĂ« profil ekzistues nga i cili tĂ« trashĂ«goni cilĂ«simet pĂ«rkatĂ«se. NĂ« shembullin mĂ« poshtĂ« krijohet njĂ« profil «production», i cili plotĂ«son profilin «release» duke shtuar flagun «lto = true». Profili aktivizohet kur thirrni cargo me opsionin «âprofile production», dhe artefaktet e ndĂ«rtimit do tĂ« vendosen nĂ« katalogun «target/production». [profile.production] inherits = «release» lto = true
- Stabilizimi i përdorimit të try_reserve për tipet Vec, String, HashMap, HashSet dhe VecDeque, i cili lejon rezervimin paraprak të hapësirës për një numër të caktuar elementesh të tipit të caktuar për të ulur frekuencën e operacioneve të alokimit të memories dhe për të shmangur përfundimin e papritur të procesit për shkak të mungesës së memories.
- Lejohet përdorimi i makrove me kurriza në shprehje si «m!{ .. }.method()» dhe «m!{ .. }?».
- Optimizimi i ekzekutimit të funksioneve File::read_to_end dhe read_to_string është bërë.
- MbSupportimi i specifikimit Unicode është përditësuar në versionin 14.0.
- Numri i funksioneve të shënuara si «#[must_use]» është zgjeruar për të dhënë një paralajmërim në rast të injorimit të vlerës së kthyer, çka ndihmon në identifikimin e gabimeve që lindin nga supozimi se funksioni do të ndryshojë vlerat, dhe jo të kthejë një vlerë të re.
- Shtuar një backend eksperimental për gjenerimin e kodit duke përdorur libgccjit.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- [T; N]::as_mut_slice
- [T; N]::as_slice
- collections::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_reserve
- Vec::try_reserve_exact
- VecDeque::try_reserve
- VecDeque::try_reserve_exact
- Iterator::map_while
- iter::MapWhile
- proc_macro::is_available
- Command::get_program
- Command::get_args
- Command::get_envs
- Command::get_current_dir
- CommandArgs
- CommandEnvs
- Të dhënat «const», që përcakton mundësinë e përdorimit në çdo kontekst, në vend të konstanteve, aplikohet në funksionin hint::unreachable_unchecked.
- ĂshtĂ« realizuar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi dhe armv7a-kmc-solid_asp3-eabihf. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazĂ«, por pa testim automatizuar, publikim tĂ« ndĂ«rtimeve zyrtare dhe verifikimin e mundĂ«sisĂ« sĂ« ndĂ«rtimit tĂ« kodit.
Burimi: opennet.ru
