është publikuar një version i ri i gjuhës së programimit Rust 1.93, e cila ka filluar nga projekti Mozilla, por tani po zhvillohet nën kujdesin e një organizate të pavarur jo-fitimprurëse, Rust Foundation. Gjuha fokusohet në sigurinë e menaxhimit të memories dhe ofron burime për arritjen e një paralelizmi të lartë gjatë ekzekutimit, pa përdorur një mbledhës plehrash dhe runtime (runtime reduktohet në inicializimin bazë dhe përkrahjen e 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:
- Biblioteka standarde e përfshirë në Rust, e cila është një bibliotekë C, Musl, e përdorur për kompozimin statik për platformat e targetuara "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl, etj.) në sisteme pa Musl, është përditësuar në versionin 1.2.5. Versioni minimal i mbështetur i Musl për kompozimin dinamik është gjithashtu ngritur në versionin 1.2.5. Më parë në Rust ishte përdorur versioni Musl 1.2.3, i cili kishte probleme me realizimin e DNS-resolver. Në versionin Musl 1.2.4, DNS-resolver-i është zgjeruar me mundësinë e dërgimit të kërkesës përmes TCP në rast të dështimit të kërkesës përmes UDP, që zgjidhi problemin me kërkesat për DNS-rekorde të mëdha dhe rregulloi pajtueshmërinë me serverat DNS rekurzivë, të cilët nuk mbështesin përcjelljen e pjesëve të rezultateve në përgjigjet e prerë UDP. Në versionin Musl 1.2.5, DNS-resolver-i implementon përpunimin e përgjigjeve me sekuenca të gjata CNAME dhe zgjidh problemin që bënte që disa përgjigje të mëdha të hidhen qoftë përmes TCP.
- Biblioteka standarde është rishikuar për të zgjidhur problemet me re-entrantën e përdorimit në allocator globalë të memories, të shkruara në Rust, makron std::thread_local! dhe funksionin std::thread::current, që çonin në rekursivitet të pafund. Për të shmangur situatën kur std::thread_local! dhe std::thread::current në përpjekjen për alokimin e memories thërrisnin allocator-in në të cilin ishin duke u përdorur, tani ato aplikojnë direkt mekanizmin e sistemit të alokimit të memories.
- Brenda blloqeve "asm!" me kod assembler, është e lejuar përdorimi i atributeve "cfg", që, për shembull, lejon menaxhimin e aktivizimit të grupeve të zgjeruara të komandave CPU në kontekstin e shprehjeve të veçanta brenda bllokut asm (më parë, atributet "cfg" mund të përcaktoheshin vetëm për tërë bllokun asm). asm!( // ose global_asm! ose naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // ... #[cfg(target_feature = "sse2")] a = const 123, // përdoret vetëm në sse2 );
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- <[MaybeUninit]>::assume_init_drop
- <[MaybeUninit]>::assume_init_ref
- <[MaybeUninit]>::assume_init_mut
- <[MaybeUninit]>::write_copy_of_slice
- <[MaybeUninit]>::write_clone_of_slice
- String::into_raw_parts
- Vec::into_raw_parts
- ::unchecked_neg
- ::unchecked_shl
- ::unchecked_shr
- ::unchecked_shl
- ::unchecked_shr
- ::as_array
- ::as_array_mut
- ::as_array
- ::as_mut_array
- VecDeque::pop_front_if
- VecDeque::pop_back_if
- Duration::from_nanos_u128
- char::MAX_LEN_UTF8
- char::MAX_LEN_UTF16
- std::fmt::from_fn
- std::fmt::FromFn
- Platforma e targetuar "riscv64a23-unknown-linux-gnu" është kaluar në nivelin e dytë të mbështetjes, i cili nënkupton garancinë e ndërtimit, por pa garanci gjatë kalimit të setit të testit.
Gjithashtu mund të theksojmë disa projekte të lidhura me Rust:
- Për bërthamën Linux, po zhvillohet një framework Rex, që lehtëson krijimin e shtesave për bërthamën Linux në gjuhën Rust, të cilat mund të përdoren për të zgjeruar funksionalitetin e bërthamës në vend të eBPF. Rex ofron të njëjtat garanci sigurie si eBPF, por përdor mundësitë e gjuhës Rust dhe një Runtime të lehtë për izolim dhe siguri. Për këto programe, nuk aplikohet verifikuesi, dhe programet kompilohen në kod të natyrshëm me kompilatorin Rust.
Në programet Rex është e lejuar përdorimi i një nëndegë të gjuhës Rust, që ofron garanci sigurie. Në formën aktuale, mbështeten 5 lloje programesh eBPF: kprobe, perf_event, tracepoint, xdp dhe tc. Ka mundësi për të thirrur funksione ndihmëse eBPF, për të bashkëpunuar me strukturat e map-it eBPF, për të menaxhuar burimet e bërthamës, për të trajtuar përjashtime dhe për të përdorur lidhjet dhe abstraksionet mbi strukturat e bërthamës.
- Njihet lëshimi i Fjall 3, një depo e integruar e shkruar në Rust, që punon me të dhëna në formatin çelës-vlerë. Ruajtja e të dhënave bëhet në formën e një log-u duke përdorur një LSM-tree (Log-Structured-Merge), si në RocksDB, ku ndryshimet regjistrohen duke shtuar të dhëna në fund të skedarit. Për t'u qasur në DB, ofrohet një API në stilin BTreeMap. Mundësitë si hapësirat emërore, kërkimi direkt dhe përmbys, kërkimi brenda intervaleve, kompresimi i integruar, transaksionet e serializueshme, ruajtja e ndarë e çelësave dhe vlerave të lidhura shumë të mëdha, si dhe shërbimi automatik i sfondit të DB janë të mbështetura. Kodi është i hapur nën licensën Apache 2.0.
- Projekti Tor publikoi versionin Arti 1.9.0, një implementim të mjetit Tor, i shkruar në gjuhën Rust. Kur kodi Arti të arrijë një nivel në të cilin mund të zëvendësojë plotësisht variantin në C, zhvilluesit e Tor kanë për qëllim t'i japin Arti statusin e implementimit kryesor të Tor dhe gradualisht të ndalin mbështetje për implementimin në C. Në këtë version vazhdoi realizimi i funksionaliteteve për relesha dhe serverëve drejtori (Directory Authority), është përmirësuar mbështetje për punën me porte që caktohen dinamikisht (proxy.socks_listen = "auto"), është shtuar një API eksperimental për menaxhimin e çelësave për shërbimet onion.
Burimi: opennet.ru
