Rust 1.42 programspråk release

publiceras version av systemprogrammeringsspråk Rost 1.42grundades av Mozilla-projektet. Språket fokuserar på säker minneshantering, ger automatisk minneshantering och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en sophämtare och runtime.

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:

  • Lagt till stöd för mallar för att matcha delar av skivor (dynamiska arrayer, skiva). Tidigare var exakta matchningar tillåtna, men nu är det möjligt att använda konstruktioner märkta ".." för att täcka de återstående elementen i arrayen. Till exempel:

    fn foo(ord: &[&str]) {
    matcha ord {

    // kontrollerar startelementen i arrayen och ignorerar
    element som följer dem
    ["Hej", "Världen", "!", ..] => println!("Hej världen!"),

    // kontrollerar de två första elementen "Foo" och "Bar", och resten är inte viktigt
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignorera allt, men det sista elementet måste vara "!".
    [.., “!”] => println!(“!!!”),

    // i startsegmentet inkluderar vi allt utom det sista elementet, som ska vara "z"
    [start @ .., "z"] => println!("börjar med: {:?}", start),

    // i slutskivan lägger vi allt utom det första elementet, som ska vara "a".
    ["a", slut @ ..] => println!("slutar med: {:?}", slut),

    vila => println!("{:?}", vila),
    }
    }

  • Lade till ett nytt makro "matchar!", som tar ett uttryck och ett mönster som indata, och returnerar "true" om mönstret matchar uttrycket. Mallen kan använda "|"-operationer och om".

    match self.partial_cmp(other) {
    Vissa (Mindre) => sant,
    _ => falskt,
    }

    matchar!(self.partial_cmp(other), Some(Less))

    låt foo = 'f';
    hävda!(matchar!(foo, 'A'..='Z' | 'a'..='z'));

    låt bar = Some(4);
    hävda!(matchar!(stapel, Vissa(x) om x > 2));

  • I panikmeddelanden visas när de används felaktigt
    typerna Option och Result, visar nu radnummer med en länk till koden som gjorde det problematiska anropet, snarare än länkar till koden som implementerar anropet i libcore. Till exempel påverkar ändringen anrop att packa upp och förvänta sig över Option::Ingen, eller kraschar när unwrap_err, expect, expect_err och liknande metoder används på resultattypen.

  • Lastpakethanteraren tillhandahåller automatisk ersättning av "proc_macro crate" i det "extern" blocket för paket med procedurmakron. Denna ändring gör att "use"-direktivet kan tillämpas på procedurmakron utan att behöva specificera "extern crate proc_macro;" i koden. Till exempel, om programmet använder raden "use proc_macro::TokenStream;", kommer koden nu att fortsätta att fungera om "extern crate proc_macro;" tas bort från den.
  • Möjligheterna i standardbiblioteket har utökats. In iter::Empty Lagt till Skicka och synkronisera stöd för alla T-värden.
    Call Pin::{map_unchecked, map_unchecked_mut} levereras från att behöva returnera ett typvärde för implementeringen "Sized".
    In io::Cursor genomförs PartialEq och Eq. "const"-attributet bestämmer möjligheten att använda i alla sammanhang istället för konstanter, applicerad för metoden Layout::new.

  • En ny del av API:et har överförts till den stabila kategorin, inklusive den stabiliserade CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    Släpp manuellt::take,
    ptr::slice_from_raw_parts_mut och ptr::slice_from_raw_parts.

  • Metoden Error::description har fasats ut.
  • Tillhandahöll stöd på andra nivån för armv7a-none-eabi och riscv64gc-unknown-linux-gnu-plattformarna. Stöd för standardbiblioteket för plattformen riscv64gc-unknown-linux-gnu har tillhandahållits.
    Apple 32-bitars plattformar degraderas upp till den tredje nivån av stöd, vilket innebär grundläggande stöd, men utan automatiserad testning och publicering av officiella builds. Nedgraderingen av stödet beror på att Apple inte längre stöder 32-bitars plattformar.

Källa: opennet.ru

Lägg en kommentar