Izašao Rust 1.53. Google će financirati dodavanje podrške za Rust Linux kernelu

Objavljeno je izdanje sistemskog programskog jezika Rust 1.53, utemeljenog na projektu Mozilla, ali sada razvijenog pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća ili vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustovo automatsko upravljanje memorijom uklanja pogreške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što je pristup memorijskoj regiji nakon što je oslobođena, dereferenciranje nultog pokazivača, prekoračenje međuspremnika, itd. Za distribuciju knjižnica, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Glavne inovacije:

  • Za nizove je implementirana značajka IntoIterator koja vam omogućuje da organizirate ponavljanje elemenata niza prema vrijednostima: for i u [1, 2, 3] { .. }

    Također je moguće proslijediti nizove metodama koje prihvaćaju iteratore, na primjer: let set = BTreeSet::from_iter([1, 2, 3]); za (a, b) u some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Prethodno je IntoIterator bio implementiran samo za reference polja, tj. za iteraciju preko vrijednosti zahtijevala je upotrebu referenci (“&[1, 2, 3]”) ili “[1, 2, 3].iter()”. Implementaciju IntoIteratora za nizove ometali su problemi s kompatibilnošću uzrokovani ranijom konverzijom prevoditelja iz array.into_iter() u (&array).into_iter(). Ovi su problemi riješeni zaobilaznim rješenjem - kompajler će nastaviti pretvarati array.into_iter() u (&array).into_iter() kao da ne postoji implementacija značajke IntoIterator, ali samo kada poziva metodu koristeći ".into_iter( )" sintaksu i bez diranja poziva u obliku "u [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Moguće je specificirati izraze “|” (logička operacija ILI) u bilo kojem dijelu predloška, ​​na primjer, umjesto “Neki(1) | Some(2)" sada možete napisati "Some(1 | 2)": rezultat podudaranja { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • Dopuštena je upotreba znakova koji nisu ASCII u identifikatorima, uključujući sve nacionalne znakove definirane u specifikaciji Unicode UAX 31, ali isključujući znakove emoji. Ako koristite različite ali slične znakove, prevodilac će izdati upozorenje. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } neka je α = 1; neka je = 2; upozorenje: par identifikatora koji se može zamijeniti između 's' i 's'
  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući sljedeće stabilizirane:
    • niz::od_ref
    • niz::od_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::zadrži
    • BTreeMap::zadrži
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_po_ključu
    • cmp::max_by
    • cmp::max_po_ključu
    • DebugStruct::finish_non_exhaustive
    • Trajanje::NULA
    • Trajanje::MAX
    • Trajanje::je_nula
    • Duration::saturating_add
    • Duration::saturating_sub
    • Trajanje::saturating_mul
    • f32::is_subnormalno
    • f64::is_subnormalno
    • IntoIterator za nizove
    • {cijeli broj}::BITOVI
    • io::Error::Unpodržano
    • Ne-nula*::vodeće_nule
    • NonZero*::zadnje_nule
    • Opcija::ubaci
    • Redoslijed::is_eq
    • Redoslijed::is_ne
    • Redoslijed::is_lt
    • Redoslijed::is_gt
    • Redoslijed::is_le
    • Redoslijed::is_ge
    • OsStr::make_ascii_mala slova
    • OsStr::make_ascii_uppercase
    • OsStr::u_ascii_mala slova
    • OsStr::to_ascii_velika slova
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> za slice::IterMut
    • impl SliceIndex za (vezano , Vezano )
    • Vec::extend_from_within
  • Implementirana je treća razina podrške za platformu wasm64-unknown-unknown. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih međugradnji ili provjere može li se kod izgraditi.
  • Upravitelj paketa Cargo premješten je tako da prema zadanim postavkama koristi naziv "main" za glavnu granu Git repozitorija (HEAD). Zavisnosti smještene u spremištima koja koriste naziv main umjesto master više ne zahtijevaju konfiguraciju branch = "main".
  • U kompajleru su zahtjevi za minimalnu verziju LLVM podignuti na LLVM 10.

Dodatno, možemo istaknuti osiguranje financiranja za razvoj integracije u Linux kernel alata za razvoj komponenti na jeziku Rust. Radovi će se odvijati u okviru projekta Prossimo pod pokroviteljstvom organizacije ISRG (Internet Security Research Group), koja je osnivač projekta Let's Encrypt te promovira HTTPS i razvoj tehnologija za povećanje sigurnosti Internet. Sredstva će osigurati Google koji će platiti rad Miguela Ojede, autora projekta Rust-for-Linux. Prethodno su ISRG i Google već financirali stvaranje alternativne HTTP pozadine za uslužni program curl i razvoj novog TLS modula za Apache http poslužitelj.

Prema Microsoftu i Googleu, oko 70% ranjivosti uzrokovano je nesigurnim rukovanjem memorijom. Očekuje se da će korištenje jezika Rust za razvoj komponenti jezgre kao što su upravljački programi uređaja smanjiti rizik od ranjivosti uzrokovanih nesigurnim rukovanjem memorijom i eliminirati pogreške kao što je pristup memorijskoj regiji nakon što je oslobođena i prekoračenje granica međuspremnika.

Rukovanje sigurnim za memoriju omogućeno je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta i životnog vijeka objekta (opseg), kao 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.

Izvor: opennet.ru

Dodajte komentar