Izšel Rust 1.53. Google bo financiral dodajanje podpore za Rust jedru Linuxa

Izšla je izdaja sistemskega programskega jezika Rust 1.53, ki ga je utemeljil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralnika smeti ali izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred napakami pri manipulaciji s kazalci in ščiti pred težavami, ki nastanejo zaradi manipulacije s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Glavne novosti:

  • Za matrike je bila implementirana lastnost IntoIterator, ki vam omogoča, da organizirate ponavljanje elementov matrike po vrednostih: for i in [1, 2, 3] { .. }

    Možno je tudi posredovati polja metodam, ki sprejemajo iteratorje, na primer: let set = BTreeSet::from_iter([1, 2, 3]); za (a, b) v some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    Prej je bil IntoIterator implementiran samo za matrične reference, tj. za ponavljanje vrednosti je bila potrebna uporaba referenc (»&[1, 2, 3]«) ali »[1, 2, 3].iter()«. Izvedbo IntoIteratorja za polja so ovirale težave z združljivostjo, ki jih je povzročila prejšnja pretvorba prevajalnika iz array.into_iter() v (&array).into_iter(). Te težave so bile rešene z rešitvijo - prevajalnik bo še naprej pretvarjal array.into_iter() v (&array).into_iter(), kot da ne bi bilo implementacije lastnosti IntoIterator, ampak le pri klicu metode z uporabo ".into_iter( )" sintakso in brez dotikanja klicev v obliki "v [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • Možno je določiti izraze “|” (logična operacija ALI) v katerem koli delu predloge, na primer namesto »Some(1) | Some(2)« zdaj lahko napišete »Some(1 | 2)«: rezultat ujemanja { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • V identifikatorjih je dovoljena uporaba znakov, ki niso ASCII, vključno z vsemi nacionalnimi znaki, opredeljenimi v specifikaciji Unicode UAX 31, vendar brez znakov emoji. Če uporabljate različne, vendar podobne znake, bo prevajalnik izdal opozorilo. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: niz, } naj bo α = 1; letsos = 2; opozorilo: identifikatorski par velja za zamenjave med 's' in 's'
  • Nov del API-jev je bil prenesen v stabilno kategorijo, vključno z naslednjimi stabiliziranimi:
    • polje::od_ref
    • polje::iz_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_po_ključu
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Trajanje::NIČ
    • Trajanje::MAX
    • Trajanje::je_nič
    • Trajanje::saturating_add
    • Duration::saturating_sub
    • Trajanje::saturating_mul
    • f32::je_podnormalno
    • f64::je_podnormalno
    • IntoIterator za polja
    • {celo število}::BITI
    • io::Error::Unpodprto
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Možnost::vstavi
    • Urejanje::is_eq
    • Naročanje::is_ne
    • Naročanje::is_lt
    • Naročanje::is_gt
    • Naročanje::is_le
    • Naročanje::is_ge
    • OsStr::make_ascii_male črke
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_male črke
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • rezina::IterMut::as_rezina
    • AsRef<[T]> za slice::IterMut
    • impl SliceIndex za (vezano , Vezano )
    • Vec::extend_from_within
  • Implementirana je tretja raven podpore za platformo wasm64-unknown-unknown. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.
  • Upravitelj paketov Cargo je bil premaknjen tako, da privzeto uporablja ime "main" za glavno vejo repozitorija Git (HEAD). Odvisnosti, ki gostujejo v repozitorijih, ki uporabljajo ime main namesto master, ne zahtevajo več konfiguracije branch = "main".
  • V prevajalniku so zahteve za minimalno različico LLVM povišane na LLVM 10.

Poleg tega lahko omenimo zagotavljanje sredstev za razvoj integracije v jedro Linuxa orodij za razvoj komponent v jeziku Rust. Delo bo potekalo v okviru projekta Prossimo pod okriljem organizacije ISRG (Internet Security Research Group), ki je ustanoviteljica projekta Let's Encrypt in spodbuja HTTPS ter razvoj tehnologij za povečanje varnosti Internet. Sredstva bo zagotovil Google, ki bo plačal delo Miguela Ojede, avtorja projekta Rust-for-Linux. Pred tem sta ISRG in Google že financirala ustvarjanje alternativnega zaledja HTTP za pripomoček curl in razvoj novega modula TLS za http strežnik Apache.

Po podatkih Microsofta in Googla je približno 70 % ranljivosti posledica nevarnega ravnanja s pomnilnikom. Pričakuje se, da bo uporaba jezika Rust za razvoj komponent jedra, kot so gonilniki naprav, zmanjšala tveganje ranljivosti, ki jih povzroča nevarno ravnanje s pomnilnikom, in odpravila napake, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, in prekoračitev meja medpomnilnika.

Varno ravnanje s pomnilnikom je v Rustu zagotovljeno v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta in življenjske dobe (obsega) objekta ter z vrednotenjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Vir: opennet.ru

Dodaj komentar