Izdaja programskega jezika Rust 1.39

Objavljeno izdaja sistemskega programskega jezika Rja 1.39, ki ga je ustanovil projekt Mozilla. 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.

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred manipulacijo kazalcev in ščiti pred težavami, ki izhajajo iz manipulacije pomnilnika 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 sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo, ki vam omogoča, da z enim klikom pridobite knjižnice, ki jih potrebujete za program. Repozitorij je podprt za gostovanje knjižnic zaboji.io.

Glavni inovacije:

  • Stabilizirano novo sintakso asinhronega programiranja, ki temelji na funkciji "async", bloku async move { ... } in operatorju ".await", ki olajša pisanje rokovalcev, ki ne blokirajo glavnega toka ukazov. V primerjavi s predhodno ponujenim API-jem za asinhroni V/I so konstrukti async/.await preprosti za razumevanje, dobro berljivi in ​​vam omogočajo implementacijo kompleksnih asinhronih interakcij z uporabo znanih tehnik nadzora toka, ki temeljijo na zankah, pogojnih stavkih in izjemah.

    Sintaksa Async-await vam omogoča, da ustvarite funkcije, ki lahko zaustavijo svoje izvajanje, vrnejo nadzor glavni niti in nato nadaljujejo z izvajanjem od tam, kjer so končale. Takšna pavza je na primer potrebna pri obdelavi V/I, v kateri je mogoče opraviti drugo delo med čakanjem na prihod naslednjega podatka. Funkcije in bloki, definirani z "async fn" in "async move", vrnejo lastnost Prihodnost, ki definira odloženo predstavitev asinhronega računanja. Neposredno lahko sprožite odloženi izračun in dobite rezultat z uporabo operatorja “.await”. Nobeno dejanje se ne izvede ali vnaprej načrtuje, dokler se ne pokliče .await, kar omogoča ustvarjanje kompleksnih ugnezdenih konstruktov brez dodatnih stroškov.

    async fn first_function() -> u32 { .. }
    ...
    naj prihodnost = prva_funkcija();
    ...
    let rezultat: u32 = future.await;

  • Stabilizirano "#![feature(bind_by_move_pattern_guards)]", ki omogoča uporabo spremenljivk s tipom vezave "stranski premik" v predlogah in uporabite sklice na te spremenljivke v razdelku "če" izraza "ujemajo". Zdaj so na primer dovoljene naslednje konstrukcije:

    fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    ujemaj niz {
    številke
    if nums.iter().sum::() == 10

    => {
    spusti (številke);
    }
    _ => nedosegljiv!(),
    }
    }

  • Indikacija dovoljena lastnosti pri definiranju funkcijskih parametrov, zaprtij in funkcijskih kazalcev. Podprti so atributi pogojnega prevajanja (cfg, cfg_attr), ki nadzorujejo diagnostiko prek linta (dovoli, opozori, zavrni in prepovedi) in pomožni atributi klicanja makrov.

    fn len(
    #[cfg(windows)] rezina: &[u16], // uporabite parameter v sistemu Windows
    #[cfg(not(windows))] rezina: &[u8], // uporaba v drugih OS
    ) -> uporabi {
    slice.len()
    }

  • Opozorila o težavah, ugotovljenih pri preverjanju izposoje spremenljivk (borrow checker) s tehniko NLL (Non-Lexical Lifetimes), prevedeno v kategorijo usodnih napak. Spomnimo se, da je sistem preverjanja, ki temelji na novem mehanizmu za upoštevanje življenjske dobe izposojenih spremenljivk, omogočil odkrivanje nekaterih težav, ki jih stara koda preverjanja ni opazila. Ker bi izhod napak za takšna preverjanja lahko vplival na združljivost s prej delujočo kodo, so bila sprva namesto napak izdana opozorila. Opozorila so zdaj zamenjana z napakami pri izvajanju v načinu Rust 2018. V naslednji izdaji bo izpis napak implementiran tudi v načinu Rust 2015, s čimer se bo končno znebil starega preverjalnika izposoje;
  • Atribut “const”, ki določa možnost uporabe v poljubnem kontekstu namesto konstant, se uporablja za funkcije Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs in overflowing_abs;

  • Nov del API-jev je bil prenesen v kategorijo stabilnih, vključno z metodami, ki so bile stabilizirane
    Pin::into_inner, Instant::checked_duration_since in Instant::saturating_duration_since;

  • Upravitelj tovornih paketov ima zdaj možnost uporabe pripone ».toml« za konfiguracijske datoteke. Dodana predhodna podpora za gradnjo standardne knjižnice neposredno iz Cargo. Dodana zastavica »--workspace«, ki je nadomestila kontroverzno zastavico »--all«. V metapodatke je bilo dodano novo polje "objavijo«, ki vam omogoča objavo odvisnosti z navedbo oznake git in številke različice. Dodana preizkusna možnost "-Ztimings" za ustvarjanje poročila HTML o časih izvajanja različnih stopenj prevajanja.
  • V prevajalniku rustc diagnostična sporočila vključujejo obrezovanje repov kode, ki se ne prilega terminalu. Zagotovljena tretja raven podpore za ciljne platforme
    i686-unknown-uefi in sparc64-unknown-openbsd. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja in objave uradnih gradenj.

Vir: opennet.ru

Dodaj komentar