Objavljena je verzija Rust 1.86. Priprema službene specifikacije jezika Rust.

Objavljen je izdanak jezika opće namjene Rust 1.86, koji je prvotno razvijen u sklopu projekta Mozilla, a sada ga vodi neovisna neprofitna organizacija Rust Foundation. Jezik se fokusira na sigurnu manipulaciju memorijom i pruža alate za postizanje visokog paralelizma izvršenja zadataka, bez korištenja sakupljača smeća i runtime-a (runtime se svodi na osnovnu inicijalizaciju i podršku standardnoj biblioteci).

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:

  • Dodana je podrška za upcast tipova u osnovni supertip, tj. sada je moguće izravno pretvoriti referencu na objekt tipa u referencu na objekt supertipa bez potrebe za stvaranjem posebne metode unutar tipa koja bi vraćala referencu na supertip. Sličnu operaciju moguće je izvesti i s drugim vrstama pametnih pokazivača, primjerice, "Arc<dyn Trait> -> Arc<dyn Supertrait>" i "*const dyn Trait -> *const dyn Supertrait". trait Trait: Supertrait {} trait Supertrait {} fn upcast(x: &dyn Trait) -> &dyn Supertrait { x }
  • U HashMap i listama (slice) dodana je metoda get_disjoint_mut() za istovremeno dobivanje više izmjenjivih referenci na elemente. Prije, borrow checker nije dopuštao istovremeno korištenje referenci dobivenih pomoću metode get_mut(). let v = &mut [1, 2, 3]; if let Ok([a, b]) = v.get_disjoint_mut([0, 2]) { *a = 413; *b = 612; } assert_eq!(v, &[413, 2, 612]); if let Ok([a, b]) = v.get_disjoint_mut([0..1, 1..3]) { a[0] = 8; b[0] = 88; b[1] = 888; } assert_eq!(v, &[8, 88, 888]);
  • Dopušteno je označavati safe-funkcije pomoću atributa "#[target_feature]", koji označava da funkcija koristi određene mogućnosti CPU-a. Safe-funkciju označenu atributom "#[target_feature]" druga safe-funkcija može sigurno pozvati samo ako je i sama označena "#[target_feature]" (inače se takve funkcije trebaju pozivati unutar unsafe-blokova). Osim toga, ne mogu se proslijediti funkcijama koje primaju generičke (generic) parametre ograničene tipovima Fn*. Prije, atribut "#[target_feature]" mogao se koristiti samo za funkcije označene kao "unsafe". #[target_feature(enable = "avx2")] fn requires_avx2() { \/\/ … } #[target_feature(enable = "avx2")] fn safe_callsite() { requires_avx2(); } fn unsafe_callsite() { if is_x86_feature_detected!("avx2") { unsafe { requires_avx2() }; } }
  • U Rust kompajleru uključena je zamjena za provjere prilikom debagiranja (debug-assert), koja osigurava da pokazivač ne sadrži NULL prilikom čitanja i pisanja nenultih veličina, kao i prilikom ponovnog pozajmljivanja (reborrow) pokazivača u referencu. Na primjer, s uključenim provjerama za ispravno funkcioniranje, sljedeći kod će sada dovesti do stanja „panic”: let _x = *std::ptr::null::(); let _x = &*std::ptr::null::();
  • Prema zadanim postavkama, uključena je lint provjera „missing_abi”, koja generira upozorenje ako nakon ključne riječi extern nije naveden ABI. Ranije se smatralo da se koristi ABI „C” ako nakon extern nije naveden ABI. Sada se preporučuje da se izričito navede ABI „C”, na primjer, ‘extern „C” {}’ i ‘extern „C” fn’
  • U stabilne verzije prebačen je novi set API-ja, uključujući stabilizirane metode i implementacije tipa:
    • {float}::next_down
    • {float}::next_up
    • ::get_disjoint_mut
    • ::get_disjoint_unchecked_mut
    • slice::GetDisjointMutError
    • HashMap::get_disjoint_mut
    • HashMap::get_disjoint_unchecked_mut
    • NonZero::count_ones
    • Vec::pop_if
    • sync::Once::wait
    • sync::Once::wait_force
    • sync::OnceLock::wait
  • Znak "const" primijenjen je u funkcijama:
    • hint::black_box
    • io::Cursor::get_mut
    • io::Cursor::set_position
    • str::is_char_boundary
    • str::split_at
    • str::split_at_checked
    • str::split_at_mut
    • str::split_at_mut_checked
  • Implementirana je treća razina podrške za platforme {aarch64-unknown,x86_64-pc}-nto-qnx710_iosock, {aarch64-unknown,x86_64-pc}-nto-qnx800, {x86_64,i686}-win7-windows-gnu, amdgcn-amd-amdhsa, x86_64-pc-cygwin, {mips,mipsel}-mti-none-elf, m68k-unknown-none-elf, armv7a-nuttx-{eabi,eabihf}, aarch64-unknown-nuttx i thumbv7a-nuttx-{eabi,eabihf}. Treća razina podrazumijeva osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih izdanja i provjere mogućnosti kompilacije koda.
  • Dodano je upozorenje o prestanku druge razine podrške za ciljnu platformu i586-pc-windows-msvc u sljedećem izdanju (1.87). Preporuča se korištenje platforme i686-pc-windows-msvc, koja podupire SSE2 instrukcije. Platforma i586-pc-windows-msvc više nema smisla, jer Windows 10 zahtijeva podršku za SSE2, a ranija izdanja Windowsa u Rustu više nisu podržana.

Dodatno se može napomenuti da je tvrtka Ferrocene predala zajednici specifikaciju jezika Rust (FLS — Ferrocene Language Specification), koju su izradili tijekom razvoja svog Rust kompajlera za kritične sustave i povremeno sinkroniziraju s aktualnim stanjem glavnog Rust kompajlera. Specifikacija FLS uključuje strukturirano i detaljno vodič o sintaksi, semantici i ponašanju Rusta, prikladno za verifikaciju, procjenu kompatibilnosti i standardizaciju.

Materijali koji se dostavljaju bit će korišteni za izradu referentne specifikacije za programski jezik Rust, koja će se moći koristiti prilikom razvoja alternativnih kompajlera i za testiranje kompajlera u područjima koja su kritično važna za sigurnost.

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