ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.82, e cila Ă«shtĂ« zhvilluar fillimisht nga projekti Mozilla, por tani zhvillohet nĂ«n mbikĂ«qyrjen e njĂ« organizate tĂ« pavarur jo-fitimprurĂ«se, Rust Foundation. Gjuha fokusohet nĂ« punĂ«n e sigurt me kujtesĂ«n dhe ofron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« tĂ« ekzekutimit tĂ« detyrave, duke e bĂ«rĂ« kĂ«tĂ« pa pĂ«rdorur mbledhĂ«s plehrash dhe runtime (runtime reduktohet nĂ« inicializimin bazĂ« dhe mirĂ«mbajtjen e bibliotekĂ«s standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.
Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
TĂ« rejat kryesore:
- Në menaxherin e paketave cargo është shtuar komanda "info" për të dhënë informacion mbi paketën në repository.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r sintaksĂ«n "use" nĂ« "impl Trait", e cila definon informacion mbi tipet e fshehura. PĂ«r shembull, "impl Trait + use" tregon se nĂ« tipin e fshehur Ă«shtĂ« lejuar tĂ« pĂ«rdoren vetĂ«m parametrat "x" dhe "T".
- Propozohet një sintaksë e veçantë për krijimin e treguesve raw, e cila zëvendëson makros të mëparshëm: për makron "addr_of!(expr)" është prezantuar operatori "&raw const expr", ndërsa për makron "addr_of_mut!(expr)" është prezantuar operatori "&raw mut expr". struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Mënyra e mëparshme për krijimin e treguesit raw let ptr = std::ptr::addr_of!(p.not_aligned_field); // Mënyra e re për krijimin e treguesit raw let ptr = &raw const p.not_aligned_field; let val = unsafe { ptr.read_unaligned() }; }
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« pĂ«rcaktuar funksione dhe constante tĂ« sigurta (safe) me jetĂ«gjatĂ«si âstaticâ brenda blloqeve extern me shenjĂ«n "unsafe" (mĂ« parĂ« tĂ« gjitha elementet nĂ« "unsafe extern" mund tĂ« kenĂ« vetĂ«m shenjĂ«n "unsafe"): unsafe extern { pub safe static TAU: f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
- Atributet no_mangle, link_section dhe export_name, të cilat mund të shkaktojnë sjellje të pasigurt, tani merren në konsideratë si të pasigurta dhe kërkojnë shënimin e qartë me shenjën "unsafe", për shembull: #[unsafe(no_mangle)] pub fn my_global_function() { }
- Në përputhje me modelin është lejuar kalimi i tipave të zbrazët, si "enum Void {}" ose struktura me një fushë të dukshme të zbrazët. use std::convert::Infallible; pub fn unwrap_without_panic(x: Result) -> T { let Ok(x) = x; // "Err" mund të anashkalohet x }
- Në llojet për numra me presje të lëvizshme (f32 dhe f64) është standardizuar sjellja gjatë trajtimit të vlerave jot numerical NaN (0.0/0.0), si dhe është lejuar përdorimi i operacioneve me presje të lëvizshme në const fn.
- Në përfshirjet assembler ka ardhur mundësia e përdorimit të operandëve me shenjën "const" për përdorimin e menjëhershëm të vlerave të numrave të plotë pa i ruajtur paraprakisht në regjistër. const MSG: &str = "Hello, world!\n"; unsafe { core::arch::asm!( "mov rdx, {LEN} // do të krijohet instrukcja 'mov rdx, 14'", LEN = const MSG.len(), ⊠); }
- ĂshtĂ« lejuar adresimi i shprehjeve me shenjĂ«n "static" nĂ« njĂ« kontekst tĂ« sigurt pa e pĂ«rcaktuar bllokun unsafe (operatorĂ«t "&raw mut" dhe "&raw const" nuk ndikojnĂ« nĂ« vlerĂ«n e operandit dhe thjesht krijojnĂ« njĂ« tregues ndaj tij): static mut STATIC_MUT: Type = Type::new(); extern "C" { static EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndices::offset
- std::option::Option::is_none_or
- [T]::is_sorted
- [T]::is_sorted_by
- [T]::is_sorted_by_key
- Iterator::is_sorted
- Iterator::is_sorted_by
- Iterator::is_sorted_by_key
- std::future::Ready::into_inner
- std::iter::repeat_n
- impl DoubleEndedIterator for Take
Burimi: opennet.ru
