Izdaja Rust 1.93. Projekti Rex, Fjall 3 in Arti 1.9.0

Objavljen je izdanak programskog jezika Rust 1.93, koji je započeo projekt Mozilla, a sada ga razvija neprofitna organizacija Rust Foundation. Jezik se fokusira na sigurnu obradu memorije i pruža alate za postizanje visoke paralelnosti izvršenja zadataka, dok za to ne koristi sakupljač smeća i runtime (runtime se svodi na osnovno inicijaliziranje i podršku standardnoj biblioteci).

Metode upravljanja memorijom u Rust-u oslobađaju developere od grešaka pri manipulaciji pokazivačima i štite od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskim područjima nakon njihova oslobađanja, dereferenciranje null pokazivača, izlazak izvan granica bafera, itd. Za distribuciju biblioteka, omogućavanje gradnje i upravljanje ovisnostima razvija se paket menadžer Cargo. Za hostovanje biblioteka podržava se repozitorij crates.io.

Sigurno upravljanje memorijom u Rust-u osigurano je tokom kompajliranja pomoću provjere referenci, praćenja vlasništva nad objektima, uzimanja u obzir vremena života objekata (vidljivost) i procjene ispravnosti pristupa memoriji tokom izvršavanja koda. Rust takođe pruža sredstva za zaštitu od prelivanja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije korišćenja, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli kao podrazumijevano, te nudi jaku statičku tipizaciju za minimiziranje logičkih grešaka.

Glavne novosti:

  • U isporuci Rust dolazi standardna C biblioteka Musl, koja se koristi za statičko povezivanje za ciljne platforme "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl itd.) na sistemima bez Musl, ažurirana na verziju 1.2.5. Minimalno podržavana verzija Musl za dinamičko povezivanje također je podignuta na izdanje 1.2.5. Ranije je u Rustu korištena verzija Musl 1.2.3, koja je imala problema s implementacijom DNS resolvera. U verziji Musl 1.2.4 dodana je mogućnost slanja zahtjeva putem TCP-a u slučaju neuspješnog poziva putem UDP-a, što je riješilo problem s upitima velikih DNS zapisa i omogućilo kompatibilnost s rekurzivnim DNS serverima koji ne podržavaju vraćanje dijela rezultata u skraćenim UDP odgovorima. Verzija Musl 1.2.5 implementira obradu odgovora s dugim nizovima CNAME u DNS resolveru i rješava problem zbog kojeg su neki veliki odgovori poslani putem TCP-a bili odbijeni.
  • Standardna biblioteka je revidirana kako bi se riješili problemi s reentrantnošću pri korištenju globalnih alokatora memorije pisanih u Rustu, makronaredbe std::thread_local! i funkcije std::thread::current, koje su dovele do beskonačne rekurzije. Da bi se spriječila situacija u kojoj std::thread_local! i std::thread::current prilikom pokušaja alokacije memorije pozivaju isti alokator koji koriste, sada se izravno primjenjuje sistemski mehanizam alokacije memorije.
  • Unutar blokova "asm!" s asemblerovim kodom dopušteno je korištenje atributa "cfg", što, na primjer, omogućava kontrolu angažmana proširenih skupova CPU instrukcija u kontekstu pojedinih izraza unutar asm bloka (prije su se atributi "cfg" mogli postaviti samo za cijeli asm blok). asm!( // ili global_asm! ili naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // koristi se samo na sse2 );
  • У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
    • <[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
  • Ciljna platforma 'riscv64a23-unknown-linux-gnu' prevedena je na drugi nivo podrške, koji podrazumeva garanciju izgradnje, ali bez garancija tokom prolaska kroz testni skup.

Takođe, može se napomenuti nekoliko povezanih projekata u Rustu:

  • Za Linux kernel se razvija Rex framework, koji omogućava kreiranje dodataka za Linux kernel na jeziku Rust. Ovakvi dodaci se mogu koristiti za proširenje funkcionalnosti kernela umesto eBPF. Rex nudi iste garancije bezbednosti kao i eBPF, ali koristi osobine jezika Rust i lagani Runtime za izolaciju i obezbeđenje. Za takve programe se ne primenjuje verifikator, a programi se kompiliraju u nativni kod Rust prevodioca.

    U Rex programima dozvoljeno je korišćenje podskupa jezika Rust koji pruža garancije bezbednosti. Trenutno se podržava 5 tipova eBPF programa: kprobe, perf_event, tracepoint, xdp i tc. Postoji mogućnost pozivanja pomoćnih funkcija eBPF, interakcije s map-strukturama eBPF, upravljanja resursima kernela, obrade izuzetaka i korišćenja omota i apstrakcija nad kernel strukturama.

  • Dostupan je izdanak Fjall 3, ugrađenog skladišta napisanog u Rust-u, koje radi sa podacima u formatu ključ-vrednost. Skladištenje podataka se vrši u obliku loga koristeći LSM stablo (Log-Structured-Merge), kao u RocksDB, pri čemu se promene beleže dodavanjem podataka na kraj datoteke. Za pristup bazi podataka nudi se API u stilu BTreeMap. Podržane su funkcionalnosti kao što su prostori imena, direktno i obrnuto pretraživanje po opsegu, ugrađena kompresija, serijalizovane transakcije, odvojeno skladištenje ključeva i povezanih veoma velikih vrednosti, automatski pozadinski servis baze podataka. Kod je otvoren pod Apache 2.0 licencom.
  • Projekt Tor je objavil izdajo Arti 1.9.0, implementacijo orodja Tor, napisano v jeziku Rust. Ko bo koda Arti dosegla raven, ki bo lahko popolnoma nadomestila različico v C-ju, nameravajo razvijalci Tor Arti podeliti status osnovne implementacije Tor in postopoma prenehati s podporo različici v C-ju. V novi različici je nadaljevana implementacija funkcionalnosti za relays in strežnikov direktorije (Directory Authority), izboljšana podpora za delovanje z dinamično dodeljenimi vrati (proxy.socks_listen = „auto“), dodan eksperimentalni API za upravljanje ključev za onion storitve.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster