Lëshimi i gjuhës së programimit Rust 1.95, e cila u zhvillua fillimisht nga projekti Mozilla, por tani po zhvillohet nën mbështetje të një organizate të pavarur, jo-fitimprurëse, Rust Foundation. Gjuha fokusohet në sigurinë e punës me memorie dhe ofron mjete për arritjen e një paralelizmi të lartë të ekzekutimeve, duke mos përdorur menaxher të mbetjeve dhe kohëzgjatjen (runtime e reduktuar në fillimin dhe mbështetje të bibliotekës standarde).
Metodat e punës me memorie në Rust janë të orientuara për të eliminuar gabimet gjatë manipulimit të treguesve dhe për të mbrojtur nga problemet që lindin nga puna me nivel të ulët me memorinë, siç janë akseset në zona memorien pas lirimit të saj, dereferencimi i treguesve null, tejkalimi i kufijve të bufeve etj. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me ndihmën e menaxherit të paketave Cargo. Mbështetet një depo për bibliotekat, 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:
- Është shtuar makrosi „cfg_select!“, i cili mund të përdoret si zëvendësim për paketën „cfg-if“ për të përpunuar kushtet e shumëfishta të kompaktimit në stilin e bllokut „match“, pa definimin e një zinxhiri shprehjesh kushtore me konstrukcionin „#[cfg]“. cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = "32" => { fn foo() { /* jo-unix, 32-bit */ } } _ => { fn foo() { /* jo unix dhe jo 32-bit */ } } }
- Është stabilizuar mundësia e përdorimit të shprehjeve „if let“ brenda blloqeve „match“ për të krijuar përputhje të kushtizuara me modele. Më parë, mbështetje për përcaktimin e shumë shprehjeve „let“ duke përdorur operatorin „&&“ ishte stabilizuar për blloqet „if“ dhe „while“. match value { Some(x) if let Ok(y) = compute(x) => { println!("{}, {}", x, y); } _ => {} }
- Është stabilizuar mbështetje për assembler-in e brendshëm për arkitekturat PowerPC dhe PowerPC64.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- MaybeUninit: From<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit]>
- MaybeUninit: AsMut<[MaybeUninit; N]>
- MaybeUninit: AsMut<[MaybeUninit]>
- [MaybeUninit; N]: From<MaybeUninit
- Cell: AsRef<[Cell; N]>
- Cell: AsRef<[Cell]>
- Cell: AsRef<[Cell]>
- bool: TryFrom
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- ::as_ref_unchecked
- ::as_ref_unchecked
- ::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- Priznaku «const» aplicohet në funksione:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- Në versionet e stabilizuara të instrumenteve është hequr mbështetje për kalimin e specifikimeve të platformave të veta tek kompajleri.
- Platforma të targetuara powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos dhe aarch64-apple-visionos-sim janë kaluar në nivelin e dytë të mbështetjes, i cili nënkupton garantimin e ndërtimit, por pa garanci gjatë kalimit përmes paketës së testeve.
Gjithashtu mund të theksohet projektet dhe ngjarjet e shpallura së fundmi të lidhura me Rust:
- Kompania Canonical prezantoi serverin e shfaqjes Mir 2.26, duke ofruar një grup bibliotekash për krijimin e kompozitave serverësh të bazuara në protokollin Wayland dhe që përfshin funksionalitetin standard të menaxherëve të dritareve dhe serverëve të shfaqjes. Mir është angazhuar në projekte si menaxheri kompozit Miracle, shelli për kiosket e internetit Ubuntu Frame dhe ambienti i përdoruesit Miriway.
Lëshimi i ri është i veçantë përfshirjen e mundësisë për zhvillimin e komponentëve në gjuhën Rust. Një nën-sistem alternativ i menaxhimit të inputit evdev-rs është realizuar në Rust dhe është filluar puna mbi front-endin wayland-rs të shkruar në Rust për Wayland. Nga ndryshimet që nuk lidhen me Rust, në Mir është e dukshme mbështetje për protokollet Wayland ext_image_copy_capture_v1 dhe input-triggers.
- Lëshimi i parë i analizuesit të trafikut ayaFlow, të shkruar në Rust dhe që përdor nën-sistemin e kernelit Linux eBPF për kapjen e paketave rrjet (IPv4/TCP/UDP) dhe kornizave Ethernet me ndikim minimal në performancë është publikuar. Mbështetet inspektimi i thellë i protokolleve të nivelit aplikativ (L7), siç është nxjerrja e TLS SNI dhe kërkesave DNS gjatë analizës së trafikxet të enkriptuara. Sistemi mbështet mbajtjen e një tabele me gjendjen aktuale të lidhjeve në formatin DashMap, ruajtjen e historisë në SQLite dhe ofrimin e statistikave përmes REST API për Prometheus.
- Është realizuar mundësia për krijimin e aplikacioneve me shumë fibra në gjuhën Rust, që përdorin funksionet std::thread dhe ekzekutohen në anën e GPU.
Burimi: opennet.ru
