ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.53, e cila Ă«shtĂ« zhvilluar nga projekti Mozilla, por tani po zhvillohet nĂ«n mbrojtjen e organizatĂ«s jo fitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e pĂ«rdorimit tĂ« memories, ofron menaxhim automatik tĂ« memories dhe siguron mjete pĂ«r arritjen e paralelizmit tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke shmangur pĂ«rdorimin e mbledhĂ«sit tĂ« plehrave dhe runtime (runtime reduktohet nĂ« inicializimin themelor 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:
- Për arrays është implementuar tipazhi IntoIterator, i cili lejon organizimin e përshkueshmërisë së elementeve të arrays sipas vlerave: for i in [1, 2, 3] { .. }
Po ashtu, është bërë e mundur kalimi i arrays në metoda që pranojnë iterators, për shembull: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
MĂ« parĂ«, IntoIterator ishte implementuar vetĂ«m pĂ«r referenca nĂ« arrays, dmth. pĂ«r tĂ« iteruar sipas vlerave duhej pĂ«rdorur referenca («&[1, 2, 3]») ose «[1, 2, 3].iter()». Implementimet e IntoIterator pĂ«r arrays ishin penguar nga probleme me kompatibilitetin, tĂ« shkaktuara nga transformimi i mĂ«parshĂ«m nĂ« kompilator tĂ« metodĂ«s array.into_iter() nĂ« (&array).into_iter(). Problemet e cekura u zgjidhĂ«n duke ndjekur njĂ« rrugĂ« alternative â kompileri do tĂ« vazhdojĂ« tĂ« konvertojĂ« array.into_iter() nĂ« (&array).into_iter(), sikur tĂ« mos kishte implementim tĂ« tipazhit IntoIterator, por vetĂ«m kur thirret metoda tĂ« pĂ«rdorur me sintaksĂ«n «.into_iter()» dhe pa prekur thirrjet nĂ« formĂ«n «in [1, 2, 3]», «iter.zip([1, 2, 3])», «IntoIterator::into_iter([1, 2, 3])».
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« specifikuar shprehje «|» (operacioni logjik OR) nĂ« çdo pjesĂ« tĂ« shabllonit, pĂ«r shembull, pĂ«rveç «Some(1) | Some(2)» tani mund tĂ« shkruhet «Some(1 | 2)»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- Lejohet pĂ«rdorimi i simboleve qĂ« nuk janĂ« ASCII nĂ« identifikues, duke pĂ«rfshirĂ« çdo simbol kombĂ«tar tĂ« caktuar nĂ« specifikimin Unicode UAX 31, pĂ«rveç simboleve emoji. Kur pĂ«rdoren simbole tĂ« ndryshme, por tĂ« ngjashme nĂ« formĂ«, kompileri do tĂ« japĂ« njĂ« paralajmĂ«rim. const BLĂ HAJ: &str = «đŠÂ»; struct äșș { ćć: String, } let α = 1; let ïœos = 2; warning: identifier pair considered confusable between âïœâ and âsâ
- Një grup i ri i API-ve është kaluar në statusin stabil, përfshirë stabilizimin e:
- array::from_ref
- array::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::retain
- BTreeMap::retain
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- Duration::ZERO
- Duration::MAX
- Duration::is_zero
- Duration::saturating_add
- Duration::saturating_sub
- Duration::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- IntoIterator për array
- {integer}::BITS
- io::Error::Unsupported
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- Option::insert
- Ordering::is_eq
- Ordering::is_ne
- Ordering::is_lt
- Ordering::is_gt
- Ordering::is_le
- Ordering::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- Peekable::peek_mut
- Rc::increment_strong_count
- Rc::decrement_strong_count
- slice::IterMut::as_slice
- AsRef për slice::IterMut
- impl SliceIndex për (Bound, Bound)
- Vec::extend_from_within
- Niveli i tretë i mbështetjes për platformën wasm64-unknown-unknown është implementuar. Niveli i tretë përfshin mbështetje bazike, por pa testim automatizuar, publikim të ndërtimeve zyrtare dhe verifikim të mundësisë për të ndërtuar kodin.
- Menaxheri i paketave Cargo tani për default është konfiguruar të përdorë emrin «main» për degën kryesore të repo Git (HEAD). Për varësitë e vendosura në repo që përdorin emrin main në vend të master, nuk kërkohet më të specifikohet në cilësimet branch = «main».
- Në kompilator, kërkesat për versionin minimal të LLVM janë rritur në LLVM 10.
Gjithashtu, mund tĂ« theksohet financimi i punĂ«s pĂ«r zhvillimin e integrimit tĂ« kernelit Linux me mjete pĂ«r zhvillimin e komponentĂ«ve nĂ« gjuhĂ«n Rust. Puna do tĂ« kryhet brenda projektit Prossimo nĂ«n organizatĂ«n ISRG (Grupi KĂ«rkimor pĂ«r SigurinĂ« nĂ« Internet), i cili Ă«shtĂ« themelues i projektit Letâs Encrypt dhe ndihmon nĂ« promovimin e HTTPS dhe zhvillimin e teknologjive pĂ«r tĂ« rritur sigurinĂ« e internetit. Fondet do tĂ« sigurohen nga Google, e cila do tĂ« paguajĂ« punĂ«n e Miguel Ojeda, autor i projektit Rust-for-Linux. MĂ« parĂ«, ISRG dhe Google financuan krijimin e njĂ« backend alternative HTTP pĂ«r mjetin curl dhe zhvillimin e njĂ« moduli tĂ« ri TLS pĂ«r serverin http Apache.
Sipas kompanive Microsoft dhe Google, rreth 70% e dobësive shkaktohen nga trajtimi i pasigurt i memories. Supozohet se përdorimi i gjuhës Rust për zhvillimin e komponentëve të kernelit, si dhe drejtorët e pajisjeve, do të ndihmojë të zvogëlojë rrezikun e aparacioneve të dobësive shkatuar nga trajtimi i pasigurt i memories dhe do të përjashtojë gabime të tilla si qasja në një zonë memorje pas lirimit të saj dhe daljen përtej buffers.
Funksionaliteti i sigurt i punës me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve dhe llogaritjes së kohëzgjatjes së jetës së objekteve (fusha e dukshmërisë), si dhe përmes vlerësimit të saktësisë së aksesit në memorie gjatë ekzekutimit të kodit. Rust ofron gjithashtu mjete për mbrojtjen nga tejkalimet e numrave të tërë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron një tipizim statik të fortë për të minimizuar gabimet logjike.
Burimi: opennet.ru
