Rust 1.39 programmeringssprog udgivelse

offentliggjort frigivelse af systemprogrammeringssprog Rust 1.39, grundlagt af Mozilla-projektet. Sproget fokuserer på hukommelsessikkerhed, giver automatisk hukommelsesstyring og giver et middel til at opnå høj opgaveparallelisme uden at bruge en skraldeopsamler eller runtime.

Rusts automatiske hukommelseshåndtering sparer udvikleren for at manipulere pointere og beskytter mod problemer, der opstår som følge af manipulation af hukommelsen på lavt niveau, såsom adgang til et hukommelsesområde, efter at det er blevet frigivet, dereferencing af nul-pointere, bufferoverskridelser osv. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet en pakkemanager Last, som giver dig mulighed for at få de biblioteker, du skal bruge til programmet, med et enkelt klik. Et lager er understøttet til at være vært for biblioteker kasser.io.

The main innovationer:

  • Stabiliseret en ny asynkron programmeringssyntaks baseret på "async"-funktionen, async move { ... }-blokken og ".await"-operatoren, som gør det lettere at skrive handlere, der ikke blokerer for hovedkommandoflowet. Sammenlignet med den tidligere tilbudte API til asynkron I/O er async/.await-konstruktioner enkle at forstå, meget læsbare og giver dig mulighed for at implementere komplekse asynkrone interaktioner ved hjælp af velkendte flowkontrolteknikker baseret på loops, betingede sætninger og undtagelser.

    Async-await-syntaksen giver dig mulighed for at oprette funktioner, der kan sætte deres udførelse på pause, returnere kontrollen til hovedtråden og derefter genoptage eksekveringen fra det sted, hvor de slap. For eksempel kræves en sådan pause ved behandling af I/O, hvor andet arbejde kan udføres, mens man venter på, at det næste stykke data kommer. Funktioner og blokke defineret med "async fn" og "async move" returnerer et træk Fremtid, som definerer en udskudt asynkron beregningsrepræsentation. Du kan direkte starte en udskudt beregning og opnå resultatet ved at bruge ".await"-operatoren. Ingen handling udføres eller forudplanlægges, før .await kaldes, hvilket tillader komplekse indlejrede konstruktioner at blive oprettet uden yderligere overhead.

    async fn first_function() -> u32 { .. }
    ...
    lad fremtid = første_funktion();
    ...
    lad resultat: u32 = future.await;

  • Stabiliseret "#![feature(bind_by_move_pattern_guards)]", tillader brugen af ​​variabler med bindingstypen "ved at flytte" i skabeloner og brug referencer til disse variable i "hvis"-sektionen af ​​udtrykket "match". For eksempel er følgende konstruktioner nu tilladt:

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

    match array {
    nums
    hvis nums.iter().sum::() == 10

    => {
    drop(tal);
    }
    _ => uopnåelig!(),
    }
    }

  • Angivelse tilladt egenskaber ved definition af funktionsparametre, lukninger og funktionsmarkører. Betingede kompileringsattributter (cfg, cfg_attr), der styrer diagnostik via lint (tillad, advar, afvis og forbyd) og hjælpemakrokaldsattributter er understøttet.

    fn len(
    #[cfg(windows)] udsnit: &[u16], // brug parameteren på Windows
    #[cfg(not(windows))] udsnit: &[u8], // brug i andet OS
    ) -> brug {
    slice.len()
    }

  • Advarsler om problemer identificeret ved kontrol af lån af variabler (lånekontrol) ved hjælp af NLL (Non-Lexical Lifetimes) teknikken, oversat i kategorien fatale fejl. Lad os huske på, at verifikationssystemet baseret på en ny mekanisme til at tage hensyn til levetiden for lånte variabler gjorde det muligt at identificere nogle problemer, der gik ubemærket hen af ​​den gamle verifikationskode. Da fejloutput for sådanne kontroller kunne påvirke kompatibiliteten med tidligere fungerende kode, blev der oprindeligt udsendt advarsler i stedet for fejl. Advarsler er nu blevet erstattet med fejl, når de kører i Rust 2018-tilstand. I den næste udgivelse vil fejloutput også blive implementeret i Rust 2015-tilstand, som endelig vil slippe af med den gamle lånekontrol;
  • "const" attributten, som bestemmer muligheden for at bruge i enhver kontekst i stedet for konstanter, bruges til funktionerne Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs og overflowing_abs;

  • En ny del af API'er er blevet overført til den stabile kategori, inklusive metoder, der er blevet stabiliseret
    Fastgør::into_inner, Instant::checked_duration_since og Instant::saturating_duration_since;

  • Cargo Package Manager har nu mulighed for at bruge ".toml"-udvidelsen til konfigurationsfiler. Tilføjet foreløbig support til opbygning af standardbiblioteket direkte fra Cargo. Tilføjet "--workspace"-flaget, der erstatter det kontroversielle "--all"-flag. Et nyt felt er blevet tilføjet til metadataene "offentliggøre", som giver dig mulighed for at udgive afhængigheder ved at angive et git-tag og versionsnummer. Tilføjet testmulighed "-Ztimings" for at generere en HTML-rapport over udførelsestiderne for forskellige kompileringsstadier.
  • I rustc-kompileren inkluderer diagnostiske meddelelser trimning af kodehalerne, der ikke passer ind i terminalen. Leveret tredje niveau af support til målplatforme
    i686-unknown-uefi og sparc64-unknown-openbsd. Det tredje niveau involverer grundlæggende support, men uden automatiseret test og offentliggørelse af officielle builds.

Kilde: opennet.ru

Tilføj en kommentar