Izdan je Rust 1.53. Google će financirati dodavanje podrške za Rust u Linux jezgru

Objavljen je izdanak programskog jezika Rust 1.53, koji je razvijen od strane projekta Mozilla, a sada se razvija pod pokroviteljstvom neovisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnu manipulaciju memorijom, osigurava automatsko upravljanje memorijom i pruža alate za postizanje visoke paralelnosti izvršenja zadataka, pritom se oslanjajući na bazno inicijaliziranje i održavanje standardne biblioteke, bez korištenja sakupljača smeća i runtime okruženja.

Automatsko upravljanje memorijom u Rustu oslobađa programere od grešaka prilikom manipulacije pokazivačima i štiti ih od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristup području memorije nakon što je oslobođeno, dereferenciranje nultih pokazivača, izlazak iz granica bafera itd. Za distribuciju biblioteka, osiguranje izgradnje i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Za hostanje biblioteka podržava se repozitorij crates.io.

Glavne novine:

  • Za nizove je implementiran trait IntoIterator, koji omogućava iteraciju preko elemenata niza po vrijednostima: for i in [1, 2, 3] { .. }

    Također je dodana mogućnost prosljeđivanja nizova u metode koje primaju iteratore, primjerice: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Ranije je IntoIterator bio implementiran samo za reference na nizove, tj. za iteraciju po vrijednostima bilo je potrebno koristiti reference („&[1, 2, 3]”) ili „[1, 2, 3].iter()”. Implementacije IntoIterator za nizove ometali su problemi s kompatibilnošću uzrokovani ranije dodanom pretvorbom u prevoditelju metoda array.into_iter() u (&array).into_iter(). Ovi problemi su riješeni alternativnim pristupom — prevoditelj će nastaviti pretvorbu array.into_iter() u (&array).into_iter(), kao da implementacija traita IntoIterator ne postoji, ali samo kada se metoda poziva koristeći sintaksu „.into_iter()”, a ne u pozivima u obliku „in [1, 2, 3]”, „iter.zip([1, 2, 3])”, „IntoIterator::into_iter([1, 2, 3])”.

  • Omogućena je upotreba izraza «|» (logička operacija OR) u bilo kojem dijelu predloška, na primjer, umjesto «Some(1) | Some(2)» sada se može pisati «Some(1 | 2)»: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Dopuštena je upotreba ne-ASCII znakova u identifikatorima, uključujući bilo koje nacionalne znakove definirane u Unicode specifikaciji UAX 31, osim emoji znakova. Kada se koriste različiti, ali slični znakovi, prevodilac će izbaciti upozorenje. const BLÅHAJ: &str = «🦈»; struct 人 { 名字: String, } let α = 1; let sos = 2; warning: identifier pair considered confusable between ‘s’ and ‘s’
  • Nova serija API-ja prešla je u stabilnu fazu, uključujući stabilizirane:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duration::ZERO
    • Duration::MAX
    • Duration::is_zero
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator za nizove
    • {integer}::BITS
    • io::Error::Unsupported
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Option::insert
    • Ordering::is_eq
    • Ordering::is_ne
    • Ordering::is_lt
    • Ordering::is_gt
    • Ordering::is_le
    • Ordering::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef za slice::IterMut
    • impl SliceIndex za (Bound, Bound)
    • Vec::extend_from_within
  • Implementirana je treća razina podrške za platformu wasm64-unknown-unknown. Treća razina podrazumijeva osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih verzija i provjere mogućnosti gradnje koda.
  • Upravitelj paketa Cargo prema zadanim postavkama prebačen je na korištenje imena «main» za glavnu granu Git repozitorija (HEAD). Za ovisnosti smještene u repozitorijima koji koriste naziv main umjesto master, više nije potrebno navoditi u postavkama branch = «main».
  • U prevodiocu su zahtjevi za minimalnu verziju LLVM podignuti na LLVM 10.

Dodatno se može istaknuti pružanje financiranja za razvoj integracije alata za razvoj komponenti na jeziku Rust u Linux jezgru. Rad će se odvijati unutar projekta Prossimo pod okriljem organizacije ISRG (Internet Security Research Group), koja je osnivač projekta Let's Encrypt i potiče promociju HTTPS-a te razvoj tehnologija za povećanje sigurnosti interneta. Sredstva će osigurati tvrtka Google, koja će platiti rad Miguela Ohede (Miguel Ojeda), autora projekta Rust-for-Linux. Ranije su ISRG i Google već financirali izradu alternativnog HTTP backend-a za alat curl i razvoj novog TLS modula za http-server Apache.

Prema podacima tvrtki Microsoft i Google, oko 70% ranjivosti uzrokovano je nesigurnim radom s memorijom. Pretpostavlja se da će korištenje jezika Rust za razvoj komponenti jezgre, poput upravljačkih programa, smanjiti rizik od ranjivosti uzrokovanih nesigurnim radom s memorijom i isključiti mogućnost pojave grešaka poput pristupa memoriji nakon njenog oslobađanja i izlaska iz granica bafera.

Siguran rad s memorijom osigurava se u Rust-u tijekom kompajlacije putem provjere referenci, praćenja vlasništva nad objektima i uzimanja u obzir vremena života objekata (opseg vidljivosti), kao i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža alate za zaštitu od prelivanja cijelih brojeva, zahtijeva obveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli prema zadanim postavkama te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.

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