Ă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
