Ă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
