Izdanje Rust 1.93. Projekti Rex, Fjall 3 i Arti 1.9.0

Objavljen je izlaz programskog jezika Rust 1.93, koji je prvotno razvijen od strane projekta Mozilla, a sada se razvija pod pokroviteljstvom neovisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu upotrebu memorije i pruža sredstva za postizanje visoke razine paralelizma izvršavanja zadataka, pri čemu se ne koristi sakupljač smeća i runtime (runtime se svodi na osnovnu inicijalizaciju i podršku standardne biblioteke).

Metode manipulacije memorijom u Rustu oslobodile su programere od grešaka prilikom rukovanja pokazivačima i štite od problema koji proizlaze iz niskorazredne obrade memorije, poput pristupanja memoriji nakon što je oslobođena, dereferenciranja nul pokazivača, izlaska iz granica bafera itd. Za distribuciju biblioteka, osiguranje izgradnje i upravljanje ovisnostima, projekat se razvija putem upravitelja paketa Cargo. Za pohranu biblioteka podržava se repozitorij crates.io.

Sigurna manipulacija memorijom osigurava se u Rustu tijekom kompilacije provjerom referenci, praćenjem vlasništva nad objektima, uzimanjem u obzir vremena života objekata (opseg vidljivosti) i ocjenom točnosti pristupa memoriji tijekom izvršavanja koda. Rust također pruža sredstva za zaštitu od cjelobrojnih prekoračenja, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabla kao zadano te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.

Glavne novine:

  • Ugrađena standardna C biblioteka Musl, korištena za statičko povezivanje za ciljne platforme „*-linux-musl“ (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl itd.) na sustavima bez Musl, ažurirana je 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 Rastu korištena verzija Musl 1.2.3, koja je imala probleme s implementacijom DNS-resolvera. U verziji Musl 1.2.4 u DNS-resolver je dodana mogućnost slanja zahtjeva putem TCP-a u slučaju neuspješnog poziva putem UDP-a, što je riješilo problem s velikim DNS zapisima i uspostavilo kompatibilnost s rekursivnim DNS poslužiteljima koji ne podržavaju slanje dijela rezultata u skraćenim UDP odgovorima. U verziji Musl 1.2.5 u DNS-resolveru implementirana je obrada odgovora s dugim CNAME nizovima i riješen je problem zbog kojeg su neki veliki odgovori, koji su slani kroz TCP, bili odbijeni.
  • Standardna biblioteka je preradila radi rješavanja problema s reenterabilnošću prilikom korištenja u globalnim alokatorima memorije napisanih na Rastu, makrona std::thread_local! i funkcije std::thread::current, što je dovodilo do beskonačne rekurzije. Kako bi se isključila situacija u kojoj std::thread_local! i std::thread::current prilikom pokušaja alokacije memorije pozivaju isti alokator u kojem se koriste, sada se direktno primjenjuje sistemski mehanizam alokacije memorije.
  • Unutar blokova «asm!» s asembler kodom dopušteno je korištenje atributa «cfg», što, na primjer, omogućava upravljanje aktivacijom proširenih skupova instrukcija CPU u kontekstu pojedinih izraza unutar asm-bloka (ranije 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 );
  • U stabilne verzije prebačen je novi set API-ja, uključujući stabilizirane metode i implementacije tipa:
    • <[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» prebačena je na drugi nivo podrške, što podrazumeva garanciju izgradnje, ali ne i garancije tokom prolaska testnog skupa.

Takođe možemo napomenuti nekoliko povezanih projekata sa Rust-om:

  • Za Linux jezgro se razvija okvir Rex, koji omogućava stvaranje dodataka za jezgro Linux-a na jeziku Rust, koje se mogu koristiti za proširenje funkcionalnosti jezgra umesto eBPF-a. Rex pruža iste bezbednosne garancije kao i eBPF, ali koristi mogućnosti jezika Rust i lagani Runtime za izolaciju i obezbeđivanje bezbednosti. Za ovakve programe se ne primenjuje verifikator, a programi se kompajliraju u nativni kod Rust kompajlerom.

    U Rex programima se može koristiti podskup jezika Rust, koji pruža garancije bezbednosti. U trenutnoj verziji podržano je 5 tipova eBPF programa: kprobe, perf_event, tracepoint, xdp i tc. Postoji mogućnost pozivanja pomoćnih eBPF funkcija, interakcije sa map struktura eBPF, upravljanja resursima jezgra, obrade izuzetaka i korišćenja obradnih i apstrakcija nad strukturnim jezgrima.

  • Dostupan je izlaz Fjall 3, ugrađenog skladišta koje je napisano na Rust-u i radi sa podacima u formatu ključ-vrednost. Skladištenje podataka se vrši u obliku loga koristeći LSM drvo (Log-Structured-Merge), kao u RocksDB-u, gde se promene beleže dodavanjem podataka na kraj datoteke. Za pristup Bazi podataka nudi se API u stilu BTreeMap. Podržane su mogućnosti kao što su prostori imena, direktno i obrnuto pretraživanje po opsegu, ugrađeno kompresovanje, serijalizovane transakcije, odvojeno skladištenje ključeva i povezanih vrlo velikih vrednosti, automatsko pozadinsko održavanje Baze podataka. Kod je otvoren pod Apache 2.0 licencom.
  • Projekt Tor objavio je izdanja Arti 1.9.0, implementaciju alata Tor napisanog na jeziku Rust. Kada kod Arti postigne razinu koja može u potpunosti zamijeniti verziju napisana u C-u, programeri Tor planiraju dodijeliti Arti status glavne implementacije Tora i postupno prestati s podrškom za implementaciju u C-u. U novoj verziji nastavlja se implementacija funkcionalnosti za releje i poslužitelja direktorije (Directory Authority), poboljšana je podrška za rad s dinamički dodijeljenim portovima (proxy.socks_listen = "auto"), dodan je eksperimentalni API za upravljanje ključevima za onion-usluge.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster