Lëshimi i Rust 1.82. Brawzeri i ri i Rust. Përdorimi i Rust në Volvo

Ë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
Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster