ĂshtĂ« publikuar rilizimi i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust 1.88, e cila Ă«shtĂ« zhvilluar fillimisht nga projekti Mozilla, por tani po zhvillohet nĂ«n mbĂ«shtetje tĂ« njĂ« organizate jo-fitimprurĂ«se tĂ« pavarur, Rust Foundation. Gjuha fokusohet nĂ« sigurimin e punĂ«s me kujtesĂ« dhe ofron mjete pĂ«r arritjen e njĂ« paralelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke kaluar pa pĂ«rdorimin e mbledhĂ«sit tĂ« plehrave dhe runtime-it (runtime Ă«shtĂ« i kufizuar nĂ« inicializimin bazĂ« dhe mbĂ«shtetje pĂ«r bibliotekĂ«n 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:
- ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« specifikuar disa shprehje "let" brenda blloqeve kushtore "if" dhe "while" duke pĂ«rdorur operatorin "&&" (logjike dhe). Shprehjet "let" mund tĂ« kombinohen me shprehje kushtore booleane. Variablat e shpallura nĂ« shprehjet let mund tĂ« pĂ«rdoren nĂ« shprehjet kushtore pasuese, si dhe brenda blloqeve "if" dhe "while". if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r shkruarjen e funksioneve "naked", tĂ« cilat shenjohet me atributin "#[unsafe(naked)]" dhe pĂ«rmbajnĂ« brenda njĂ« thirrje "naked_asm!". Funksionet e krijuara nĂ« kĂ«tĂ« mĂ«nyrĂ« nuk kanĂ« epilog dhe prolog tĂ« gjeneruar nga kompajleri, gjĂ« qĂ« i lejon zhvilluesit tĂ« kontrollojĂ« plotĂ«sisht kodin asamble qĂ« lidhet me funksionin (funksioni "naked" pĂ«rmban vetĂ«m instruksionet asamble tĂ« treguara nga zhvilluesi dhe nuk pĂ«rfshin menaxhues special pĂ«r argumentet dhe vlerat e rikthimit qĂ« shtohen nga kompajleri). Funksionet "naked" konsiderohen si njĂ« alternativĂ« mĂ« tĂ« pĂ«rshtatshme pĂ«r funksionet e pĂ«rcaktuara nĂ« bllokun "global_asm!". #[unsafe(naked)] pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
- Në gjuhën e predikateve, që aplikohet në atributet e kompilimit kushtor "cfg" dhe "cfg_attr" (të cilat lejojnë përfshirjen ose çaktivizimin e pjesëve të kodit në varësi të kushteve të caktuara), është shtuar mbështetje për literalet booleane "true" dhe "false", të cilat janë identifikuar me konfiguracionet që janë gjithmonë aktive ose gjithmonë të çaktivizuara. Këto literale gjithashtu mund të përdoren në makron "cfg!" dhe tabelat "[target]" në manifestet dhe konfigurimet për Cargo. Shprehjet cfg(true) dhe cfg(false) mund të përdoren në vend të cfg(all()) dhe cfg(any()) për një shprehje më të qartë të qëllimeve tuaja.
- Menaxheri i paketave Cargo pĂ«rfshin njĂ« aktivizim automatik tĂ« mbledhĂ«sit tĂ« mbeturinave pĂ«r pastrimin e caches nĂ« katalogun e pĂ«rdoruesit. Paketat qĂ« ruheshin mĂ« parĂ« nĂ« cache me varĂ«si tĂ« shkarkuara nuk pastruan, duke çuar nĂ« njĂ« rritje tĂ« pandĂ«rprerĂ« tĂ« konsumit tĂ« hapĂ«sirĂ«s disku. Mekanizmi i aktivizuar i mbledhjes sĂ« mbeturinave do tĂ« fshijĂ« automatikisht skedarĂ«t crate tĂ« shkarkuar qĂ« nuk janĂ« pĂ«rdorur pĂ«r mĂ« shumĂ« se 3 muaj, si dhe skedarĂ«t crate lokalĂ« qĂ« nuk janĂ« pĂ«rdorur pĂ«r mĂ« shumĂ« se njĂ« muaj. Pastrimi i caches nuk aktivizohet kur pĂ«rdoren opsionet 'âoffline' ose 'âfrozen' nĂ« crage.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- hint::select_unpredictable
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
- ::as_chunks
- ::as_rchunks
- ::as_chunks_unchecked
- ::as_chunks_mut
- ::as_rchunks_mut
- ::as_chunks_unchecked_mut
- Priznaku «const» aplicohet në funksione:
- NonNull::replace
- ::replace
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Cell::as_slice_of_cells
- U ndihmua një nivel të parë të mbështetjes për platformën e synuar i686-pc-windows-gnu.
Gjithashtu, mund të përmenden ngjarjet e lidhura me Rust:
- Projekti Munal OS zhvillon një sistem operativ eksperimental, i shkruar në Rust dhe i bazuar në konceptin unikernel. Në Munal OS nuk përdoret shumëllojshmëri e ndërlikuar, hartimi i faqeve të memories dhe hapësira virtuale adresash (përdoret ndarja e memories nga UEFI). Ngritja dhe aplikacionet ekzekutohen në të njëjtën hapësirë adresash sipas modelit të sigurisë të ndërtuar mbi sandbox-izolimin WASM (pjesë e saj është motori wasmi për ekzekutimin e aplikacioneve në formën e kodit të WebAssembly).
Sistemi operativ është i pajisur me ndërfaqe grafike dhe mbështet menaxhimin përmes tastierës dhe mausit. Për zhvillimin e aplikacioneve grafike përdoret një toolkit i vetë-ndërtuar me një bibliotekë widgetesh. Për ndërveprimin në rrjet ofrohen një stek TCP dhe një drejtues pajisje rrjeti. Midis aplikacioneve të disponueshme për Munal OS: një shfletues web me mbështetje të bazuar për HTML dhe HTTPS, një editor teksti dhe një terminal për ekzekutimin e kodit në Python. Kodi është i hapur nën licencën MIT.

- Lëshimi i kernelit Asterinas 0.15.2, i shkruar në Rust dhe që ofron ABI, i përputhshëm me kernelin Linux. Kernel-i mbështet arkitekturat x86-64 dhe RISC-V, dhe implementon 206 nga 368 thirrjet sistemike të Linux. Në zhvillimin e kernelit kanë marrë pjesë 45 zhvillues, kryesisht nga universitete të ndryshme kineze. Kernel-i është ndërtuar duke përdorur arkitekturën "framekernel", në të cilën komponentët e kernelit vendosen në një hapësirë të përbashkët adresash, dhe siguria arrihet në nivelin e ndarjes logjike të kodit të sigurt dhe kodit, ku nuk përjashtohet ndodhia e problemeve me sigurinë. Të gjitha thirrjet sistemike, sistemet e skedarëve dhe drejtuarësit implementohen në nivelin e Shërbimeve OS dhe nuk mund të përfshijnë blloqe të pasigurta. Kodi shpërndahet nën licencën MPL 2.0.
- Për kernelin Linux është përgatitur një mjet rsched, që lejon analizimin e statistikave për funksionimin e planifikuesit të detyrave. Në praktikë, mjeti lejon vlerësimin e vendimeve të planifikuesit të lidhura me ofrimin e burimeve për proceset, si dhe ndjekjen e vonesave që ndodhin gjatë planifikimit. Për mbledhjen e të dhënave në kernel përdoret nën sistemi BPF, ndërsa mjeti që punon në hapësirën e përdoruesit është shkruar në Rust. Autori i mjetit është Chris Mason, krijuesi dhe arkitekti kryesor i sistemit të skedarëve Btrfs.
- Kompania Collabora njoftoi për zhvillimin e një varianti të mjeteve Coccinelle për gjuhën Rust. Coccinelle fillimisht është destinacion për automatizimin e kërkimit dhe transformimit të kodit në gjuhën C në kernelin Linux. Transformimet formohen në formën e rregullave që ngjajnë me patches të abstrahuara, të pa lidhura me një pozicion të veçantë në kod.
- Zhvilluesit e GNOME prezantuan një bibliotekë për ngarkimin e imazheve glycin, të shkruar në Rust dhe që siguron dekodimin e imazheve duke përdorur izolimin e sandbox-it. Mbështetet dorëzimi i përmbajtjes së dekoduar përmes gdk::Textures dhe nxjerrja e metadata. Ofrohen mbështetje për përdorimin e glycin në GTK4, si dhe një backend për të angazhuar glycin në bibliotekën GdkPixbuf, e cila përdoret në GNOME për ngarkimin e imazheve. Glycin është tashmë i angazhuar në shikuesin e imazheve Loupe, i ofruar në GNOME si defolt. Gjithashtu, backend-i për GdkPixbuf ofron mundësinë për të përdorur glycin në GNOME Shell, gjeneratorët e miniaturave dhe aplikacione të ndryshme GNOME, pa bërë ndryshime në këto programe.
Burimi: opennet.ru

