Publikimi i Rust 1.93. Projektet Rex, Fjall 3 dhe Arti 1.9.0

ë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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster