ĂshtĂ« publikuar versioni i gjuhĂ«s sĂ« programimit Rust 1.95, i zhvilluar fillimisht nga projekti Mozilla, por tani nĂ« zhvillim e sipĂ«r nĂ«n mbĂ«shtetje tĂ« OrganizatĂ«s jo-fitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e menaxhimit tĂ« memorjes dhe ofron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, pa pĂ«rdorur mbledhĂ«s mbetjeve dhe runtime (runtime reduktohet nĂ« inicializimin bazik dhe mbĂ«shtetje tĂ« bibliotekĂ«s standarde).
Metodat e punës me memorien në Rust kanë si objektiv të ekskludojnë gabimet gjatë manipulimit të treguesve dhe të mbrojnë nga problemet që lindin për shkak të punës me memorien në nivel të ulët, siç janë qasja në hapësirën e memories pas çlirimit të saj, dereferencimi i treguesve zero, dalja jashtë kufijve të tamponit, etj. Për shpërndarjen e librarive, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të librarive, mbahet repozitori 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:
- ĂshtĂ« shtuar makroja «cfg_select!», e cila mund tĂ« pĂ«rdoret si njĂ« zĂ«vendĂ«sim pĂ«r paketĂ«n «cfg-if» pĂ«r trajtimin e disa kushteve tĂ« kompilimit nĂ« stilin e bllokut «match», pa pĂ«rcaktuar njĂ« zinxhir tĂ« shprehjeve kushtore me konstruktionen «#[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 kushtore sipas modelit. MĂ« parĂ« ishte stabilizuar mbĂ«shtetje pĂ«r pĂ«rcaktimin e disa shprehjeve «let» duke pĂ«rdorur operatorin «&&» pĂ«r blloqet «if» dhe «while». match value { Some(x) if let Ok(y) = compute(x) => { println!(«{}, {}», x, y); } _ => {} }
- ĂshtĂ« stabilizuar mbĂ«shtetja pĂ«r asamble inline pĂ«r arkitat PowerPC dhe PowerPC64.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- MaybeUninit<[T; N]>: From<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>]>
- MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>; N]>
- MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>]>
- [MaybeUninit<T>; N]: From<MaybeUninit<[T; N]>
- Cell<[T; N]>: AsRef<[Cell<T>; N]>
- Cell<[T; N]>: AsRef<[Cell<T>]>
- Cell<[T]>: AsRef<[Cell<T>]>
- bool: TryFrom<{integer}>
- 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
- <*const T>::as_ref_unchecked
- <*mut T>::as_ref_unchecked
- <*mut T>::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
- T symboli «const» është aplikuar në funksionet:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- Në versionet e stabilizuara të mjetit është hequr mbështetja për dërgimin e specifikimeve të platformave të synuara te kompajleri.
- Platformat e synuara 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 përfshin garancinë për ndërtimin, por pa garanci gjatë kalimit të paketës së testeve.
Gjithashtu, mund të theksojmë projektet dhe ngjarjet e sapo shpallura që lidhen me Rust:
- Kompania Canonical ka prezantuar serverin e shfaqjes Mir 2.26, që ofron një grup bibliotekash për krijimin e kompozitëve servera në bazë të protokollit Wayland dhe përfshin funksionalitetin standard të menaxherëve të dritareve dhe serverëve të shfaqjes. Mir përdoret në projekte të tilla si menaxheri kompozit Miracle, ndërfaqja për kioskat e internetit Ubuntu Frame dhe ambienti i përdoruesit Miriway.
Kjo lëshim është e veçantë për shtimin e mundësisë për zhvillimin e komponenteve në gjuhën Rust. Një nën-sistem alternativ i menaxhimit të hyrjes evdev-rs është realizuar në Rust dhe është nisur puna për front-end-in e shkruar në Rust wayland-rs për Wayland. Nga ndryshimet e papër lidhura me Rust në Mir, është vënë në dukje mbështetje për protokollet Wayland ext_image_copy_capture_v1 dhe input-triggers.
- ĂshtĂ« publikuar lĂ«shimi i parĂ« i analizatorit tĂ« trafikut ayaFlow, i shkruar nĂ« Rust dhe qĂ« pĂ«rdor nĂ«n-sistemin e kernelit Linux eBPF pĂ«r kapjen e paketave tĂ« rrjetit (IPv4/TCP/UDP) dhe ĐșаЎrove Ethernet me ndikim minimal nĂ« performancĂ«. MbĂ«shtetet inspektimi i thellĂ« i protokolleve tĂ« nivelit tĂ« aplikacionit (L7), pĂ«r shembull, nxjerrja e TLS SNI dhe kĂ«rkesave DNS gjatĂ« analizĂ«s sĂ« trafikut tĂ« koduar. 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 e krijimit tĂ« aplikacioneve me shumĂ« tela nĂ« gjuhĂ«n Rust, qĂ« pĂ«rdorin funksionet std::thread dhe ekzekutohen nĂ« anĂ«n e GPU.
Burimi: opennet.ru
