Objavljen je programski jezik Rust 1.99, koji je osnovao Mozilla projekt, ali se sada razvija pod pokroviteljstvom neovisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža alate za postizanje visokog paralelizma izvršavanja zadataka, a pritom se ne koristi sakupljač smeća i okruženje za izvođenje (izvođenje je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).
Rustove metode upravljanja memorijom osmišljene su kako bi se uklonile pogreške u manipulaciji pokazivačima i zaštitile od problema koji proizlaze iz upravljanja memorijom na niskoj razini, kao što su pristup memoriji nakon što je oslobođena, dereferenciranje nultih pokazivača, prekoračenje međuspremnika i tako dalje. Projekt razvija upravitelj paketa Cargo za distribuciju biblioteka, olakšavanje izgradnje i upravljanje ovisnostima. Repozitorij crates.io održava se za hosting biblioteka.
Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.
Glavne inovacije:
- Rust sada omogućuje stvaranje varijadnih funkcija izvezenih za poziv iz C projekata (C ABI). Posljednji element popisa parametara u takvim funkcijama može biti konstrukcija "...", koja se u Rustu obrađuje pomoću posebnog tipa, VaList, koji radi slično kao va_list u C-u. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; neka b = nesigurno { args.next_arg:: () }; a + b } fn foo() -> i32 { nesigurno { suma(0i32, 2i32) } }
- Funkcije Layout::for_value_raw, mem::size_of_val_raw i mem::align_of_val_raw su stabilizirane kako bi se omogućilo sigurno određivanje veličine i poravnanje sirovih pokazivača, uključujući korištenje dinamički dimenzioniranih tipova kao što su slojevi, bez potrebe za stvaranjem referenci podataka.
- Dokumentacija sada preporučuje izbjegavanje oslobađanja memorije koja je statički referencirana s neograničenim vijekom trajanja (&'static) putem poziva Box::leak (kružno otpuštanje), jer bi ta radnja potencijalno mogla dovesti do problema zbog nekompatibilnosti s budućim optimizacijama kompajlera i mehanizmima dodjele memorije s mogućnošću uključivanja. Umjesto stvaranja statičke reference za privremene prijenose vlasništva, preporučuje se korištenje sirovih pokazivača, na primjer, putem poziva Box::into_non_null.
- Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
- IntoIterator za Box<[T; N]>
- IntoIterator za &Box<[T; N]>
- IntoIterator za &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Kutija::u_ne_null
- Kutija::from_non_null
- Vec::u_dijelove
- Vec::from_parts
- jezgra::mem::veličina_vrijednosti_sirove
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- FusedIterator za StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- Upravitelj cargo paketa sada ima novi ugrađeni profil "debug", sličan profilu "dev" (mogućnosti otklanjanja grešaka i razvoja planiraju se u budućnosti odvojiti). Inkrementalna kompilacija je prema zadanim postavkama onemogućena prilikom izgradnje u CI-ju.
- Ciljna platforma riscv64-unknown-linux-musl premještena je na razinu podrške 2, koja pruža jamstvo izgradnje, ali ne i jamstvo prolaza testnog paketa.
Osim toga, željeli bismo istaknuti nedavno najavljene projekte i događaje vezane uz Rust:
- Microsoft je nadogradio Rust na Tier 1 jezik i pružit će mu punu podršku u svim fazama razvoja unutar tvrtke. Prije je Tier 1 podrška bila pružena za C++, C# i TypeScript. Rust se već koristi u preko 100 Microsoftovih repozitorija. Između ostalog, Rustove komponente već se koriste u proizvodima kao što su Microsoft 365 i Copilot, a za MSVC kompajler razvijen je namjenski backend za Rust, rustc_codegen_utc, temeljen na rustc kompajleru.
Microsoft navodi primarni cilj korištenja Rusta za jačanje sigurnosno kritičnog koda. Prema riječima tehničkog direktora Microsoft Azurea, otprilike 70% svih ranjivosti u Windows uzrokovani su problemima upravljanja memorijom koji se mogu izbjeći korištenjem Rusta.
- Google ga je uklonio iz kernela. Linux Stara implementacija Binder IPC-a, napisana u C-u, zastarjela je u korist novog Binder IPC upravljačkog programa prepisanog u Rustu. Napominje se da je tijekom 15 godina postojanja stari upravljački program nagomilao značajan tehnički dug i brojne komplikacije, što je ometalo otkrivanje grešaka, održavanje i dodavanje novih značajki. Binder IPC upravljački program u Rustu određen je kao glavni upravljački program i više se ne predstavlja kao eksperimentalni razvoj.
- Arti 2.7.0, Rustova implementacija Tor alata, je objavljena. Nakon što Artijeva kodna baza dosegne razinu sposobnu potpuno zamijeniti C implementaciju, Tor programeri namjeravaju učiniti Arti primarnom Tor implementacijom i postupno ukinuti održavanje C implementacije. Nova verzija uključuje razvoj funkcionalnosti za releje i poslužitelji Funkcionalnost ovlaštenja direktorija (DA) povezana s parsiranjem dokumenata, podrškom za zrcaljenje poslužitelja direktorija i obradom DNS prometa. Dodana je RPC implementacija za promjene i provjere konfiguracije. Ispravljeno je nekoliko ranjivosti - administratorima onion servisa savjetuje se hitno ažuriranje sustava.
Izvor: opennet.ru
