Rust 1.39 programspråk release

publiceras version av systemprogrammeringsspråk Rost 1.39, grundat av Mozilla-projektet. Språket fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och tillhandahåller ett sätt att uppnå hög arbetsparallellism utan att använda en sophämtare eller körtid.

Rusts automatiska minneshantering frigör utvecklaren från pekarmanipulation och skyddar mot problem som uppstår från minnesmanipulation på låg nivå, såsom efterfri minnesåtkomst, nollpekaredereferenser, buffertöverskridningar och liknande. En pakethanterare utvecklas för att distribuera bibliotek, säkerställa montering och hantera beroenden av projektet. Laddning, vilket gör att du kan få de bibliotek du behöver för programmet med ett klick. Ett arkiv stöds för värdbibliotek lådor.io.

Den huvudsakliga innovationer:

  • Stabiliserad en ny asynkron programmeringssyntax baserad på funktionen "async", blocket async move { ... } och operatorn ".await", vilket gör det lättare att skriva hanterare som inte blockerar huvudkommandoflödet. Jämfört med det tidigare erbjudna API:et för asynkron I/O är async/.await-konstruktioner enkla att förstå, mycket läsbara och låter dig implementera komplexa asynkrona interaktioner med hjälp av välbekanta flödeskontrolltekniker baserade på loopar, villkorssatser och undantag.

    Syntaxen Async-await låter dig skapa funktioner som kan pausa exekveringen, återställa kontrollen till huvudtråden och sedan återuppta exekveringen där de slutade. Till exempel krävs en sådan paus vid bearbetning av I/O, där annat arbete kan utföras i väntan på att nästa databit ska anlända. Funktioner och block definierade med "async fn" och "async move" returnerar en egenskap Framtida, som definierar en uppskjuten asynkron beräkningsrepresentation. Du kan direkt initiera en uppskjuten beräkning och få resultatet med hjälp av operatorn ".await". Ingen åtgärd utförs eller förplaneras förrän .await anropas, vilket gör att komplexa kapslade konstruktioner kan skapas utan extra overhead.

    async fn first_function() -> u32 { .. }
    .
    let future = first_function();
    .
    låt resultat: u32 = future.await;

  • Stabiliserad "#![feature(bind_by_move_pattern_guards)]", tillåter användning av variabler med bindningstypen "genom att flytta" i mallar och använd referenser till dessa variabler i avsnittet "if" i uttrycket "matcha". Till exempel är följande konstruktioner nu tillåtna:

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

    matcha array {
    nums
    om nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => otillgänglig!(),
    }
    }

  • Indikering tillåten attribut vid definition av funktionsparametrar, stängningar och funktionspekare. Villkorliga kompileringsattribut (cfg, cfg_attr) som styr diagnostik via lint (tillåt, varna, neka och förbjuda) och extra makroanropsattribut stöds.

    fn len(
    #[cfg(windows)] segment: &[u16], // använd parametern på Windows
    #[cfg(not(windows))] segment: &[u8], // använd i andra operativsystem
    ) -> använd {
    slice.len()
    }

  • Varningar om problem som identifierats vid kontroll av lån av variabler (lånekontroll) med NLL-tekniken (Non-Lexical Lifetimes), översatt i kategorin ödesdigra misstag. Låt oss komma ihåg att verifieringssystemet baserat på en ny mekanism för att ta hänsyn till livslängden för lånade variabler gjorde det möjligt att identifiera några problem som gick obemärkt förbi av den gamla verifieringskoden. Eftersom felutdata för sådana kontroller kan påverka kompatibiliteten med tidigare fungerande kod, utfärdades varningar till en början istället för fel. Varningar har nu ersatts med fel vid körning i Rust 2018-läge. I nästa utgåva kommer felutmatning också att implementeras i Rust 2015-läge, vilket äntligen kommer att bli av med den gamla lånekontrollen;
  • Attributet "const", som bestämmer möjligheten att använda i alla sammanhang istället för konstanter, används för funktionerna Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs och overflowing_abs;

  • En ny del av API:er har överförts till den stabila kategorin, inklusive metoder som har stabiliserats
    Pin::into_inner, Instant::checked_duration_since och Instant::saturating_duration_since;

  • Lastpakethanteraren har nu möjlighet att använda tillägget ".toml" för konfigurationsfiler. Lade till preliminärt stöd för att bygga standardbiblioteket direkt från Cargo. Lade till "--workspace"-flaggan, som ersatte den kontroversiella "--all"-flaggan. Ett nytt fält har lagts till i metadata "publicera", som låter dig publicera beroenden genom att ange en git-tagg och versionsnummer. Lade till testalternativ "-Ztimings" för att generera en HTML-rapport över körtiderna för olika kompileringssteg.
  • I rustc-kompilatorn inkluderar diagnostiska meddelanden trimning av kodsvansarna som inte passar in i terminalen. Tillhandahöll tredje nivå av stöd för målplattformar
    i686-unknown-uefi och sparc64-unknown-openbsd. Den tredje nivån innebär grundläggande support, men utan automatiserad testning och publicering av officiella builds.

Källa: opennet.ru

Lägg en kommentar