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

ËshtĂ« publikuar lĂ«shimi i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust 1.82, e cila Ă«shtĂ« zhvilluar fillimisht nga projekti Mozilla, por tani po mbĂ«shtetet nga organizata jo fitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« mĂ«nyrĂ«n e sigurt tĂ« punĂ«s me memorie dhe ofron mjete pĂ«r arritjen e paralelizmit tĂ« lartĂ« tĂ« ekzekutimit tĂ« detyrave, duke mos pĂ«rdorur mbledhĂ«sin e plehrave dhe runtime (runtime reduktohet nĂ« inicializimin bazĂ« dhe mbĂ«shtetje tĂ« bibliotekĂ«s standarde).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • NjĂ« komandĂ« e re «info» Ă«shtĂ« shtuar nĂ« menaxherin e paketave cargo pĂ«r tĂ« dhĂ«nĂ« informacion mbi paketĂ«n nĂ« depon.
  • ËshtĂ« shtuar mbĂ«shtetje pĂ«r sintaksĂ«n «use<..>» nĂ« «impl Trait», e cila pĂ«rcakton informacionin mbi tipet e fshehura. PĂ«r shembull, «impl Trait + use<‘x, T>» tregon se nĂ« tipin e fshehur lejohet tĂ« pĂ«rdoren vetĂ«m parametrat «x» dhe «T».
  • ËshtĂ« propozuar njĂ« sintaksĂ« e veçantĂ« pĂ«r krijimin e treguesve raw, e cila zĂ«vendĂ«son makro-tĂ« e pĂ«rdorura mĂ« parĂ«: makros «addr_of!(expr)» Ă«shtĂ« zĂ«vendĂ«suar me operatorin «&raw const expr», dhe makros «addr_of_mut!(expr)» Ă«shtĂ« zĂ«vendĂ«suar me operatorin «&raw mut expr». struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // MĂ«nyra e vjetĂ«r e krijimit tĂ« treguesit raw let ptr = std::ptr::addr_of!(p.not_aligned_field); // MĂ«nyra e re e krijimit tĂ« 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Ă«sinĂ« ‘static’ brenda blloqeve extern me shenjĂ«n «unsafe» (mĂ« parĂ« tĂ« gjithĂ« elementĂ«t nĂ« «unsafe extern» mund tĂ« kishin 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Ă« çojnĂ« nĂ« sjellje tĂ« paqartĂ«, tani konsiderohen tĂ« pasigurta dhe kĂ«rkojnĂ« njĂ« etiketim tĂ« qartĂ« me shenjĂ«n «unsafe», p.sh.: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • GjatĂ« pĂ«rputhjes me modelin, Ă«shtĂ« lejuar tĂ« hiqen tipet e zbrazĂ«ta, siç janĂ« «enum Void {}» ose struktura me njĂ« fushĂ« tĂ« dukshme tĂ« zbrazĂ«t. use std::convert::Infallible; pub fn unwrap_without_panic<T>(x: Result<T, Infallible>) -> T { let Ok(x) = x; // «Err» mund tĂ« hiqet x }
  • NĂ« llojet pĂ«r numra me notacion tĂ« pikĂ«s (f32 dhe f64) Ă«shtĂ« standardizuar sjellja nĂ« pĂ«rpunimin e vlerave jo-numerike NaN (0.0/0.0), si dhe lejohet pĂ«rdorimi i operacioneve me notacion tĂ« pikĂ«s nĂ« const fn.
  • NĂ« shpĂ«rndarjet assembler, Ă«shtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« operandĂ«ve me shenjĂ«n «const» pĂ«r pĂ«rdorim tĂ« drejtpĂ«rdrejtĂ« tĂ« vlerave tĂ« numrave tĂ« plotĂ« pa i ruajtur ato paraprakisht nĂ« regjistĂ«r. const MSG: &str = «Hello, world!\n»; unsafe { core::arch::asm!( «mov rdx, {LEN} // do tĂ« formohet instrukcioni ‘mov rdx, 14â€Č», LEN = const MSG.len(), 
 ); }
  • Lejohet adresimi i shprehjeve me shenjĂ«n «static» nĂ« kontekst tĂ« sigurt pa pĂ«rcaktimin e bllokut unsafe (operatorĂ«t «&raw mut» dhe «&raw const» nuk ndikojnĂ« nĂ« vlerĂ«n e operandit dhe krijojnĂ« vetĂ«m njĂ« tregues pĂ«r tĂ«): 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Ă« grup i ri API u kalua nĂ« kategorinĂ« e stabilizuar, pĂ«rfshirĂ« stabilizimin e metodave dhe implementimeve tĂ« trait-Ă«ve:
    • 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
Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster