U publikua versioni 1.34 i gjuhës së programimit sistemor Rust, e zhvilluar nga projekti Mozilla. Gjuha fokusohet në punën e sigurt me kujtesën, ofron menaxhim automatik të kujtesës dhe siguron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, duke u anashkaluar pa përdorimin e mbledhësit të plehrave dhe runtime-it.
Menaxhimi automatik i kujtesës në Rust e çliron zhvilluesin nga manipulimi i treguesve dhe e mbron atë nga problemet që dalin nga puna me kujtesën në nivel të ulët, si adresimi i hapësirës së kujtesës pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers, etj. Për shpërndarjen e bibliotekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti përfshin menaxherin e paketave Cargo, që lejon marrjen e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository crates.io.
TĂ« rejat kryesore:
- Në menaxherin e paketave Cargo janë shtuar mjete për të punuar me registrat alternative të paketave, të cilat mund të bashkëjetojnë me regjistrin publik crates.io. Për shembull, zhvilluesit e aplikacioneve private tani mund të përdorin regjistrin e tyre privat, i cili mund të përdoret gjatë listimit të varësive në Cargo.toml, dhe të aplikojnë për produktet e tyre një model versionimi të ngjashëm me crates.io, si dhe të referojnë në varësitë si në crates.io ashtu edhe në regjistrin e tyre.
Për të shtuar një regjistër të jashtëm në ~/.cargo/config
në seksionin «[registries]» është parashikuar një opsion i ri «my-registry», dhe për të përmendur regjistrin e jashtëm në varësi në Cargo.toml, në seksionin «[dependencies]» është shtuar opsioni «other-crate». Për t'u lidhur me regjistrin shtesë, mjafton të vendosni tokenin e autentikimit në skedarin ~/.cargo/credentials dhe të ekzekutoni komandën
«cargo login âregistry=my-registry», dhe pĂ«r publikimin e pakot â
«cargo publish âregistry=my-registry»; - ĂshtĂ« shtetur mbĂ«shtetje e plotĂ« pĂ«r pĂ«rdorimin e operatorit «?» nĂ« testet doctests, duke lejuar pĂ«rdorimin e kodit tĂ« shembujve nga dokumentacioni si teste. MĂ« parĂ« operatori
«?» mund tĂ« pĂ«rdorej pĂ«r trajtimin e gabimeve gjatĂ« ekzekutimit tĂ« testeve vetĂ«m nĂ«se kishte funksionin «fn main()» ose nĂ« funksionet «#[test]»; - NĂ« atributet e veçanta qĂ« pĂ«rcaktohen me makros procedurale (custom attribute) Ă«shtĂ« siguruar mundĂ«sia e pĂ«rdorimit tĂ« grupeve tĂ« rastĂ«sishme tĂ« tokenĂ«ve («#[attr($tokens)]», «#[attr[$tokens]] dhe #[attr{$tokens}]»). MĂ« herĂ«t elementĂ«t mund tĂ« pĂ«rcaktoheshin vetĂ«m nĂ« formĂ« tĂ« pemĂ«s/rekursive duke pĂ«rdorur literale string, pĂ«r shembull «#[foo(bar, baz(quux, foo = «bar»))]», ndĂ«rsa tani Ă«shtĂ« e mundur tĂ« pĂ«rdoren enumerime (â#[range(0..10)]â) dhe konstruktime si «#[bound(T: MyTrait)]»;
- Të stabilizuar tipazhet (trait) TryFrom dhe TryInto, të cilat lejojnë të kryhen konvertime të tipave me trajtim të gabimeve. Për shembull, metodat si from_be_bytes, me tipet e numrave si hyrje përdorin array, por shpesh të dhënat vijnë me tipin Slice, dhe konvertimi midis array-ve dhe slice-ve është problematik të bëhet manualisht. Me ndihmën e tipazheve të rinj, operacioni i përmendur mund të kryhet në fluks përmes thirrjes .try_into(), për shembull, "let num = u32::from_be_bytes(slice.try_into()?)". Për konvertimet që gjithmonë përfundojnë me sukses (për shembull, nga tipi u8 në u32) është shtuar tipi i gabimeve Infallible, që lejon përdorimin e qetë
TryFrom pĂ«r tĂ« gjitha implementimet ekzistuese tĂ« "From"; - ĂshtĂ« shpallur si e tĂ«rhequr funksioni CommandExt::before_exec, i cili lejonte ekzekutimin e njĂ« trajtesĂ« para se tĂ« fillohej exec, i cili ekzekutohej nĂ« kontekstin e procesit fĂ«mije, tĂ« ndarĂ« pas thirrjes fork(). NĂ« kushte tĂ« tilla, disa burime tĂ« procesit prind, siç janĂ« deshifruesit e skedarĂ«ve dhe zonat e reflektuar tĂ« memories, mund tĂ« ishin kopjuar, gjĂ« qĂ« mund tĂ« çonte nĂ« sjellje tĂ« paqartĂ« dhe tĂ« gabuar tĂ« bibliotekave.
Në vend të before_exec, rekomandohet përdorimi i funksionit të pasigurt CommandExt::pre_exec. - Të stabilizuara janë tipet atomike të numrave të plotë me shenja dhe pa shenja me madhësi nga 8 deri në 64 bit (për shembull, AtomicU8), si dhe tipet me shenja NonZeroI[8|16|32|54|128].
- Një grup i ri API-së është përfshirë në kategorinë e stabilizuar, duke përfshirë metodat Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub] dhe SystemTime::checked_[add|sub]. Funksionet iter::from_fn dhe iter::successors janë gjithashtu stabilizuar;
- Për të gjitha tipet e numrave të plotë janë implementuar metodet checked_pow, saturating_pow, wrapping_pow dhe overflowing_pow;
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« pĂ«rfshirĂ« optimizimet gjatĂ« fazĂ«s sĂ« lidhjes pĂ«rmes specifikimit tĂ« opsionit tĂ« ndĂ«rtimit '-C linker-plugin-lto' (rustc komandon kodin Rust nĂ« bitcode LLVM, qĂ« lejon aplikimin e optimizimeve LTO).
Burimi: opennet.ru
