Programski jezik Rust 1.99, koji je osnovao Mozilla projekat, ali se sada razvija pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation, je objavljen. Jezik se fokusira na sigurnost memorije i pruža alate za postizanje visokog paralelizma izvršavanja zadataka, bez upotrebe sakupljača smeća i okruženja za izvršavanje (izvršavanje je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).
Rustove metode upravljanja memorijom su dizajnirane da eliminišu greške u manipulaciji pokazivačima i zaštite od problema koji proizlaze iz upravljanja memorijom na niskom nivou, kao što su pristup memoriji nakon što je oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera i tako dalje. Projekat razvija Cargo upravitelj paketa za distribuciju biblioteka, olakšavanje izgradnje i upravljanje zavisnostima. Repozitorij crates.io se održava za hostovanje biblioteka.
Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.
Glavne inovacije:
- Rust sada omogućava kreiranje varijadnih funkcija izvezenih za poziv iz C projekata (C ABI). Posljednji element liste parametara u takvim funkcijama može biti konstrukcija "...", koja se u Rustu obrađuje korištenjem 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 i korištenje dinamički dimenzioniranih tipova kao što su sliceovi, bez potrebe za kreiranjem 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 odustajanje), jer bi ova radnja potencijalno mogla dovesti do problema zbog nekompatibilnosti s budućim optimizacijama kompajlera i mehanizmima alokacije memorije koji se mogu uključiti. Umjesto kreiranja statičke reference za privremeni prijenos vlasništva, preporučuje se korištenje sirovih pokazivača, na primjer, putem poziva Box::into_non_null.
- Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina 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
- jezgro::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" (planirano je da se mogućnosti debugiranja i razvoja u budućnosti odvoje). Inkrementalna kompilacija je podrazumevano onemogućena prilikom izgradnje u CI.
- Ciljna platforma riscv64-unknown-linux-musl je premještena na nivo podrške 2, koji pruža garanciju izgradnje, ali ne i garanciju prolaznosti testnog paketa.
Osim toga, željeli bismo istaknuti nedavno najavljene projekte i događaje vezane za Rust:
- Microsoft je unaprijedio Rust na Tier 1 jezik i pružit će mu punu podršku u svim fazama razvoja unutar kompanije. Ranije je Tier 1 podrška bila pružena za C++, C# i TypeScript. Rust se već koristi u preko 100 Microsoft repozitorija. Između ostalog, Rust komponente se već koriste u proizvodima kao što su Microsoft 365 i Copilot, a za MSVC kompajler je razvijen namjenski backend za Rust, rustc_codegen_utc, zasnovan 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, je zastarjela u korist novog Binder IPC drajvera prepisanog u Rustu. Napominje se da je tokom 15 godina svog postojanja, stari drajver akumulirao značajan tehnički dug i brojne komplikacije, što je ometalo otkrivanje grešaka, održavanje i dodavanje novih funkcija. Binder IPC drajver u Rustu je određen kao glavni drajver i više se ne predstavlja kao eksperimentalni razvoj.
- Arti 2.7.0, Rust implementacija Tor alata, je objavljena. Kada Artijeva kodna baza dostigne nivo sposoban da u potpunosti zamijeni C implementaciju, Tor programeri namjeravaju da Arti učine primarnom Tor implementacijom i postepeno ukinu održavanje C implementacije. Nova verzija uključuje razvoj funkcionalnosti za releje i serveri Funkcionalnost ovlaštenja direktorija (DA) vezana za parsiranje dokumenata, podršku za zrcaljenje direktorijskog servera i obradu DNS prometa. Dodana je RPC implementacija za promjene i provjere konfiguracije. Ispravljeno je nekoliko ranjivosti - administratorima onion servisa se savjetuje da hitno ažuriraju svoje sisteme.
izvor: opennet.ru
