Izlaz Rust 1.99.0. Microsoft je preveo Rust u primarne jezike

Objavljen je izdanak programskog jezika Rust 1.99, koji je prvotno razvijen od strane projekta Mozilla, a danas se razvija pod pokroviteljstvom neovisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu obradu memorije i nudi sredstva za postizanje visokog paralelizma izvršavanja zadataka, pri čemu ne koristi prikupljač smeća i runtime (runtime je sveden na osnovnu inicijalizaciju i upravljanje standardnom bibliotekom).

Metode upravljanja memorijom u Rust-u usmjerene su na isključivanje grešaka prilikom manipulacije pokazivačima i zaštitu od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, izlazak iz okvira bafera itd. Za distribuciju biblioteka, osiguranje gradnje i upravljanje ovisnostima, projekt se razvija preko upravitelja paketa Cargo. Za hosting 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:

  • Omogućena je izrada funkcija u jeziku Rust s varijabilnim brojem argumenata (variadic), koje se izvoze za pozivanje iz projekata na jeziku C (C ABI). Kao posljednji element popisa parametara u takvim funkcijama može se navesti konstrukcija „…”, koja se u Rustu obrađuje uz pomoć posebnog tipa VaList, koji funkcioniše slično kao va_list u C. unsafe extern „C” fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Stabilizirane su funkcije Layout::for_value_raw, mem::size_of_val_raw i mem::align_of_val_raw, koje omogućuju sigurnu definiciju veličine i poravnanja prema sirovim pokazivačima (raw pointer), uključujući korištenje tipova s dinamičkom veličinom, poput rezova, bez potrebe za stvaranjem referenci na podatke.
  • U dokumentaciju je dodana preporuka da se izbegava oslobađanje memorije na koju je dobivena statička referenca s neograničenim vremenom trajanja (&’static) pozivom Box::leak (round-trip unleaking), jer takva akcija potencijalno može dovesti do problema zbog nespojivosti s budućim optimizacijama kompajlera i uključenim mehanizmima alokacije memorije. Umesto stvaranja statičke reference za privremeno preneseno vlasništvo, preporučuje se korišćenje sirovih pokazivača, na primer, pozivom Box::into_non_null.
  • U stabilne verzije prebačen je novi set API-ja, uključujući stabilizirane metode i implementacije tipa:
    • IntoIterator for Box
    • IntoIterator for &Box
    • IntoIterator for &mut Box
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator for StepBy
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • U alatu za upravljanje paketima cargo uveden je novi ugrađeni profil „debug“, sličan profilu „dev“ (u budućnosti se planiraju odvojiti mogućnosti za debagiranje i razvoj). Tijekom izrade u CI, inkrementalno sastavljanje je prema zadanim postavkama isključeno.
  • Ciljana platforma riscv64-unknown-linux-musl prebačena je na drugi nivo podrške, koji podrazumijeva garanciju izrade, ali bez garancija tijekom prolaska testnog skupa.

Dodatno se mogu istaknuti nedavno najavljeni projekti i događaji vezani za Rust:

  • Tvrtka Microsoft prebacila je Rust među jezike prvog nivoa i osigurati će njegovu punu podršku u svim fazama razvoja unutar tvrtke. Prije toga, prvi nivo podrške unutar tvrtke bio je osiguran za jezike C++, C# i TypeScript. Napominje se da se Rust već koristi u više od 100 repozitorija Microsofta. između ostalog, komponente napisane u Rustu već se koriste u proizvodima poput Microsoft 365 i Copilota, a za MSVC kompajler pripremljen je poseban backend rustc_codegen_utc za Rust, temeljen na kompilatoru rustc.

    Kao glavna svrha primjene Rusta u Microsoftu navodi se jačanje sigurnosti koda, koji je kritičan s aspekta sigurnosti. Prema riječima tehničkog direktora Microsoft Azure, oko 70% svih ranjivosti u Windows-u uzrokovano je problemima s memorijom, koje se može izbjeći korištenjem Rusta.

  • Tvrtka Google uklonila je iz jezgre Linuxa staru implementaciju mehanizma međuprocesne komunikacije Binder, napisanu na jeziku C, u korist novog drajvera Binder IPC, ponovno napisanog u Rustu. Napominje se da je za 15 godina postojanja starog drajvera u njemu akumuliran značajan tehnički dug i obilje kompleksnosti, što je otežavalo pronalazak grešaka, održavanje i dodavanje novih mogućnosti. Drajver Binder IPC na Rustu proglašen je glavnim i više se ne smatra eksperimentalnom razvijenom.
  • Objavljen je izdanak Arti 2.7.0, implementacije alata Tor, napisanog na jeziku Rust. Kada kod Arti dostigne razinu sposobnu potpuno zamijeniti verziju na C-u, programeri Tora planiraju dati Arti status glavne implementacije Tora i postupno prekinuti održavanje verzije na C-u. U novoj verziji razvijene su funkcionalnosti za relejeve i poslužitelja direktorij (Directory Authority), povezan s parsiranjem dokumenata, podrškom za zrcaljenje poslužitelja direktorija i obradom DNS prometa. Implementirana je RPC funkcionalnost za promjenu i provjeru konfiguracije. Uklonjene su neke ranjivosti — administratorima onion usluga preporučuje se hitno ažuriranje njihovih sustava.

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