Izdanje Rust programskog jezika 1.39

Objavljeno izdanje sistemskog programskog jezika Rđa 1.39, osnovan projektom Mozilla. 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.

Rustovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što su pristupi memoriji nakon oslobađanja, dereferencije nultog pokazivača, prekoračenja međuspremnika i slično. Upravitelj paketa se razvija za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima projekta. Naboj, što vam omogućuje da jednim klikom dobijete biblioteke potrebne za program. Repozitorij je podržan za host knjižnica sanduci.io.

Glavni inovacije:

  • Stabilizirano nova sintaksa asinkronog programiranja temeljena na funkciji "async", bloku async move { ... } i operatoru ".await", što olakšava pisanje rukovatelja koji ne blokiraju glavni tok naredbi. U usporedbi s prethodno ponuđenim API-jem za asinkroni I/O, konstrukcije async/.await jednostavne su za razumijevanje, vrlo čitljive i omogućuju implementaciju složenih asinkronih interakcija korištenjem poznatih tehnika kontrole toka temeljenih na petljama, uvjetnim izjavama i iznimkama.

    Sintaksa Async-await omogućuje vam stvaranje funkcija koje mogu pauzirati svoje izvršenje, vratiti kontrolu glavnoj niti i zatim nastaviti s izvršenjem od mjesta gdje su stale. Na primjer, takva je pauza potrebna prilikom obrade I/O, u kojoj se drugi poslovi mogu obaviti dok se čeka da sljedeći podatak stigne. Funkcije i blokovi definirani s "async fn" i "async move" vraćaju osobinu Budućnost, koji definira prikaz odgođenog asinkronog računanja. Možete izravno pokrenuti odgođeni izračun i dobiti rezultat pomoću operatora “.await”. Nikakva radnja se ne izvodi ili unaprijed planira dok se ne pozove .await, što omogućuje stvaranje složenih ugniježđenih konstrukcija bez dodatnih troškova.

    async fn prva_funkcija() -> u32 { .. }
    ...
    neka budućnost = prva_funkcija();
    ...
    neka rezultat: u32 = future.await;

  • Stabilizirano "#![feature(bind_by_move_pattern_guards)]", dopuštajući korištenje varijabli s vrstom vezanja "usputni potez" u predlošcima i koristite reference na ove varijable u odjeljku "if" izraza "utakmica". Na primjer, sada su dopuštene sljedeće konstrukcije:

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

    podudaranje niza {
    brojevi
    if nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => nedostupno!(),
    }
    }

  • Indikacija dopuštena atributi pri definiranju parametara funkcije, zatvaranja i pokazivača na funkciju. Podržani su atributi uvjetne kompilacije (cfg, cfg_attr) koji kontroliraju dijagnostiku putem linta (dopusti, upozori, odbij i zabrani) i pomoćni atributi makro poziva.

    fn len(
    #[cfg(windows)] isječak: &[u16], // upotrijebite parametar u sustavu Windows
    #[cfg(not(windows))] isječak: &[u8], // korištenje u drugom OS-u
    ) -> iskoristi {
    slice.len()
    }

  • Upozorenja o problemima identificiranim prilikom provjere posuđivanja varijabli (borrow checker) pomoću NLL (Non-Lexical Lifetimes) tehnike, prevedeno u kategoriju fatalnih grešaka. Podsjetimo, sustav verifikacije koji se temelji na novom mehanizmu za uzimanje u obzir životnog vijeka posuđenih varijabli omogućio je identificiranje nekih problema koje stari verifikacijski kod nije primijetio. Budući da bi izlaz pogreške za takve provjere mogao utjecati na kompatibilnost s prethodno radnim kodom, u početku su izdana upozorenja umjesto pogrešaka. Upozorenja su sada zamijenjena pogreškama pri pokretanju u načinu rada Rust 2018. U sljedećem izdanju, ispis pogrešaka također će biti implementiran u načinu rada Rust 2015, koji će se konačno riješiti starog alata za provjeru posudbe;
  • Atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se za funkcije Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    trbušnjaci, omotajući_trbušnjaci i prelivajući se_trbušnjaci;

  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući metode koje su stabilizirane
    Pin::into_inner, Instant::checked_duration_since i Instant::saturating_duration_since;

  • Upravitelj paketa tereta sada ima mogućnost korištenja ekstenzije ".toml" za konfiguracijske datoteke. Dodana preliminarna podrška za izgradnju standardne biblioteke izravno iz Carga. Dodana je zastavica "--workspace", zamjenjujući kontroverznu zastavu "--all". Novo polje dodano je metapodacima "objaviti“, koji vam omogućuje objavljivanje ovisnosti navođenjem git oznake i broja verzije. Dodana opcija testiranja "-Ztimings" za generiranje HTML izvješća o vremenu izvršenja različitih faza kompilacije.
  • U rustc prevoditelju, dijagnostičke poruke uključuju skraćivanje repova koda koji ne stane u terminal. Pružena treća razina podrške za ciljne platforme
    i686-unknown-uefi i sparc64-unknown-openbsd. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja i objave službenih verzija.

Izvor: opennet.ru

Dodajte komentar