Ăshte publikuar versioni 1.93 i gjuhĂ«s sĂ« programimit Rust, e cila Ă«shtĂ« nisur nga projekti Mozilla, por tani zhvillohet nĂ«n mbikĂ«qyrjen e njĂ« organizate jo fitimprurĂ«se tĂ« pavarur, Rust Foundation. Gjuha fokusohet nĂ« punĂ«n e sigurt me memorien dhe ofron mjete pĂ«r arritjen e njĂ« parallelizmi tĂ« lartĂ« nĂ« ekzekutimin e detyrave, duke shmangur pĂ«rdorimin e mbledhĂ«sit tĂ« plehrave dhe runtime (shĂ«rbimi pĂ«rmblidhet nĂ« inicializimin bazĂ« dhe ruajtjen e bibliotekĂ«s 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:
- Biblioteka standarde C Musl, e përfshirë në paketën Rust, e cila përdoret për kompilim statik për platformat e synuara "*-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 kompilim dinamik është gjithashtu rritur në versionin 1.2.5. Më parë në Rust ishte përdorur versioni Musl 1.2.3, i cili kishte probleme në implementimin e zgjidhësit DNS. Në versionin Musl 1.2.4 u shtua mundësia për dërgimin e një kërkese përmes TCP në rast dështimi të thirrjes përmes UDP, duke zgjidhur problemin me kërkesat për regjistrat e mëdhenj DNS dhe duke rregulluar përputhshmërinë me serverët DNS rekursivë që nuk mbështesin kthimin e pjesëve të rezultatit në përgjigjet e prera UDP. Në versionin Musl 1.2.5, u implementua trajtimi i përgjigjeve me sekuenca të gjata CNAME në zgjidhësin DNS dhe u zgjidh problemi që shkaktonte humbjen e disa përgjigjeve të mëdha të dërguara përmes TCP.
- Biblioteka standarde është rishikuar për të zgjidhur problemet me rienterabilitetin kur përdoret në alokatorët globalë të memories, të shkruara në Rust, makron std::thread_local! dhe funksionin std::thread::current, të cilat shkaktonin rekursivitet të pafund. Për të shmangur situatën ku std::thread_local! dhe std::thread::current, gjatë përpjekjes për të alokuar memorien, thirrnin të njëjtin alokator në të cilin ishin përdorur, tani ata aplikojnë drejtpërdrejt mekanizmin sistemik të alokimit të memories.
- Brenda blloqeve "asm!" me kod assembler është lejuar përdorimi i atributeve "cfg", që do të thotë se mund të menaxhohet aktivizimi i komplekseve 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, \/\/ vetëm përdorur në sse2 );
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- <[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
- Platformi qëllim "riscv64a23-unknown-linux-gnu" është transferuar në nivelin e dytë të mbështetjes, që nënkupton garancinë e ndërtimit, por mungesën e garancive gjatë kalimit të grupeve të testimit.
- Shtesë, mund të përmenden disa projekte të lidhura me Rust:
- Për bërthamën Linux po zhvillohet një kornizë Rex, e cila lejon 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 përdoret verifikuesi, dhe programet kompilohen në kod nativ nga kompajleri Rust.
Në programet Rex lejohet përdorimi i një nështrimi të gjuhës Rust, duke ofruar garanci sigurie. Në formën aktuale mbështeten 5 lloje programesh eBPF: kprobe, perf_event, tracepoint, xdp dhe tc. Ka mundësi të thërrasë funksione ndihmëse eBPF, të interesohet me struktura harta eBPF, të menaxhojë resurset e bërthamës, të trajtojë përjashtime dhe të përdorë mbështetje dhe abstraksione mbi strukturat e bërthamës.
- Disponohet lëshimi 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 logut duke përdorur pemën LSM (Log-Structured-Merge), si në RocksDB, në të cilën ndryshimet shkruhen duke shtuar të dhëna në fund të skedarit. Për aksesin në DB ofrohet një API në stilin BTreeMap. Mbështeten mundësi si hapësirat emërore, kërkimi përpara dhe prapa sipas intervaleve, kompresimi i ndërtuar, transaksionet që mund të serializohen, ruajtja e veçantë e çelësave dhe vlerave të saj shumë të mëdha, dhe mirëmbajtja e vazhdueshme e DB-së.
Në programet Rex, lejohet përdorimi i një nëngrupi të gjuhës Rust, që ofron garanci sigurie. Në formën aktuale, mbështeten 5 tipi programesh eBPF: kprobe, perf_event, tracepoint, xdp dhe tc. Ka mundësi për të thirrur funksione ndihmëse eBPF, për të ndërvepruar me strukturat e maps eBPF, menaxhuar burimet e bërthamës, trajtuar përjashtime dhe përdorur mbështetje dhe abstraksione mbi strukturat e bërthamës.
- ĂshtĂ« nĂ« dispozicion versioni Fjall 3, njĂ« depozim i integruar i 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Ă« logu duke pĂ«rdorur LSM-nyjĂ«n (Log-Structured-Merge), si nĂ« RocksDB, ku ndryshimet regjistrohen nĂ«pĂ«rmjet shtimit tĂ« tĂ« dhĂ«nave nĂ« fund tĂ« skedarit. PĂ«r qasjen nĂ« DB ofrohet njĂ« API nĂ« stilin e BTreeMap. MbĂ«shteten mundĂ«si tĂ« tilla si hapĂ«sira emĂ«rtimi, kĂ«rkimi i drejtpĂ«rdrejtĂ« dhe i kundĂ«rt sipas intervaleve, kompresimi i integruar, transaksionet e serializueshme, ruajtja e ndarĂ« e çelĂ«save dhe vlerave shumĂ« tĂ« mĂ«dha tĂ« lidhura me ta, dhe ruajtja automatike nĂ« prapavijĂ« e DB. Kodi Ă«shtĂ« i hapur nĂ«n licencĂ«n Apache 2.0.
- Projekti Tor publikoi versionin Arti 1.9.0, implementimin e mjetit Tor, të shkruar në gjuhën Rust. Kur kodi i Arti arrin nivelin që mund të zëvendësojë plotësisht variantin në C, zhvilluesit e Tor synojnë t'i japin Arti statusin e implementimit kryesor të Tor dhe gradualisht të ndalojnë mbështetje për implementimin në C. Në versionin e ri vazhdohet realizimi i funksionalitetit për relays dhe serverësh autoritetet e drejtpërdrejta (Directory Authority), është përmirësuar mbështetjeja për punën me portat 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
