Është botuar lëshimi i gjuhës së programimit Rust 1.89, e cila është zhvilluar fillimisht nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e një organizate të pavarur dhe jo fitimprurëse, Rust Foundation. Gjuha fokusohet në punimin e sigurt me kujtesën dhe ofron mjete për të arritur një paralelizm të lartë në kryerjen e detyrave, pa përdorur mbledhësin e plehrave dhe kohën e ekzekutimit (koha e ekzekutimit 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 të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja 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ë ofruar mundësia e përdorimit të simbolit «_» si argument i parametrave të përgjithshëm me emërtimin «const» për përllogaritjen e vlerave të këtyre parametrave në bazë të kontekstit përkatës. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
- Është shtuar një paralajmërim të ri lint-i «mismatched_lifetime_syntaxes» për zgjidhjen e problemit të përcaktimit të jashtëzakonshëm të jetës në nënshkrimet e funksioneve kur përdoret mekanizmi i «lifetime elision» (identifikon automatikisht jetën e referenceve, duke lejuar që të shmanget përcaktimi i saj manual). Paralajmërimi kontrollon që parametrat hyrës dhe dalës të funksionit t'i përkasin të njëjtit grup të tipeve. Grupi formohet në bazë të mbështetjes për përcaktimin e qartë të jetës dhe mundësisë për përllogaritjen automatike të saj nga kompajleri (p.sh., në tipet «&’a T» dhe «ContainsLifetime<‘a>» mund të jetë e pranishme një jetë e qartë, por kompajleri nuk mund ta përllogarisë atë automatikisht, ndërsa në tipet «&T», «&’_ T» dhe «ContainsLifetime<‘_>» lejohet si përcaktim i qartë ashtu edhe përcaktim automatik).
- Në atributin «target_feature» për sistemet x86 është implementuar mundësia e verifikimit të mbështetjes për grupe të avancuara instruksionesh sha512, sm3, sm4, kl dhe widekl, si dhe funksione të veçanta avx512. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Është siguruar ekzekutimi i doctest (teste të integruara në dokumentacion) jo vetëm për platformën aktuale më të njohur, por edhe për platforma të tjera që janë përcaktuar gjatë fillimit të menaxherit të paketave «cargo» («cargo test —doc —target other_target»).
- Për funksionet ‘extern «C»‘ gjatë ndërtimit për platformën e caktuar «wasm32-unknown-unknown» është implementuar standardi C ABI për WebAssembly.
- Me disa përjashtime, në lidhje me kompatibilitetin e tipeve, është lejuar përdorimi i tipeve i128 dhe u128 në funksionet e jashtme C (extern «C»), për të cilat më parë ishte paraqitur paralajmërimi lint «improper_ctypes_definitions».
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Shumë funksione të integruara në kompajler (Intrinsics) për procesorët x86, duke përfshirë funksionet për AVX512, SHA512, SM3 dhe SM4.
- NonZero<char>
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
T symboli «const» është aplikuar në funksionet:
- <[T; N]>::as_mut_slice
- <[u8]>::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Ka filluar procesi i kalimit të platformës së synuar «x86_64-apple-darwin» nga niveli i parë i mbështetjes në të dytin (Apple planifikon të ndalë mbështetje për arkitekturën x86_64). Niveli i parë i mbështetjes përfshin formimin e grumbujve binarë, kryerjen e testeve të hollësishme dhe ofrimin e garantimit më të lartë të mbështetjes për platformën — çdo ndryshim në kompajler kontrollohet përmes ekzekutimit të një kompleti të plotë të testeve. Niveli i dytë i mbështetjes përfshin garantimin e ndërtimit, por pa garantim në kalimin e testit.
- Është realizuar niveli i tretë i mbështetjes për platformat «loongarch32-unknown-none» dhe «loongarch32-unknown-none-softfloat». Niveli i tretë përfshin mbështetje bazë, por pa testim automatizuar, publikim të grumbujve të zyrtarizuar dhe verifikimin e mundësisë për ndërtimin e kodit.
Përveç kësaj, mund të theksohen ngjarjet dhe projektet e lidhura me Rust:
- Është botuar një raport mbi gjendjen e paketave në gjuhën Rust në Debian. Vërehet se në degën Debian Unstable (Sid) rreth 8% e paketimeve src në depozitin kryesor janë të lidhura me varësi ndërtimi me të paktën një paketë «librust-*». Në Debian 12, paketa të tilla përbënin 4.5%. Gjithashtu është vënë re se më shumë se 3,000 paketa përfshijnë kod në gjuhën Rust, i ndarë në paketat librust-..-dev, dhe 150 paketat src ofrojnë skedarë ekzekutivë ose biblioteka Rust të kompiluar.
Nga paketat interesante për Debian janë përmendur sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d dhe fish. Mbështetje opsionale për Rust është realizuar në APT, QEMU (virtiofsd), bërthamën Linux dhe Mesa, si dhe pritet në LibreOffice. Për transformimin e paketave crate në paketa src të Debian është implementuar një mjet debcargo.
- Është prezantuar projekti tmux-rs, i cili zhvillon një klon të shumëzuesit të terminalit tmux (menaxher dritareje të konsolës), i riparuar nga C në Rust.
- Zhvilluesi i drejtorit Tyr nga kompania Collabora, publikoi një artikull mbi pajisjet që punojnë në nivele të drejtorëve të kernelit dhe parimet e zhvillimit të tillë të drejtorëve në gjuhën Rust.
- Është demonstruar një aplikacion universale në gjuhën Rust, i cili mund të ekzekutohet si në CPU ashtu edhe në platforma të ndryshme GPU: CUDA për NVIDIA, SPIR-V për GPU me mbështetje Vulkan, Metal për Apple, DirectX 12 për Windows, WebGPU për shfletuesit.
Burimi: opennet.ru
