Rust 1.34 programspråk release

tog plats version av systemprogrammeringsspråk Rost 1.34, utvecklad 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:

  • Cargo-pakethanteraren har lagt till verktyg för att arbeta med alternativa paketregister som kan samexistera med det offentliga registret crates.io. Till exempel kan utvecklare av proprietära applikationer nu använda sitt eget privata register, som kan användas vid listning av beroenden i Cargo.toml, och tillämpa en versionsmodell som liknar crates.io för sina produkter, samt hänvisa beroenden till båda lådorna. io och till ditt eget register.

    För att lägga till externa register till .cargo/config (finns i $HOME eller i paketkatalogen)
    försedd avsnittet "[register]", och för att använda ett externt register, har alternativet "register" dykt upp i beskrivningen av varje beroende i Cargo.toml. För att ansluta till ett extra register, placera helt enkelt autentiseringstoken i filen ~/.cargo/credentials och kör kommandot
    "cargo login --registry=my-registry" och för att publicera ett paket -
    "last publicera -registry=mitt-registret";

  • Lade till fullt stöd för att använda "?"-operatören. i tester doktorsprov, så att du kan använda exempelkod från dokumentationen som tester. Tidigare operatör
    "?" kan användas för att hantera fel under testkörning endast i närvaro av "fn main()"-funktionen eller i "#[test]"-funktionerna;

  • I anpassade attribut definierade med procedurmakron säkrad möjligheten att använda godtyckliga uppsättningar av tokens ("#[attr($tokens)]", "#[attr[$tokens]] och #[attr{$tokens}]"). Tidigare kunde element endast specificeras i ett träd/rekursiv form med hjälp av strängliteraler, till exempel “#[foo(bar, baz(quux, foo = “bar”))]”, men nu är det möjligt att använda uppräkningar (' #[range(0. .10)]') och konstruktioner som "#[bound(T: MyTrait)]";
  • Stabiliserade typer (egenskap) Prova från и TryInto, vilket tillåter typkonverteringar med felhantering. Till exempel använder metoder som from_be_bytes med heltalstyper arrayer som indata, men data kommer ofta i en Slice-typ, och konvertering mellan arrays och slices är problematisk att göra manuellt. Med hjälp av nya egenskaper kan den angivna operationen utföras i farten genom ett anrop till .try_into(), till exempel "let num = u32::from_be_bytes(slice.try_into()?)". För konverteringar som alltid lyckas (till exempel från typ u8 till u32) har en feltyp lagts till Ofelbar, vilket möjliggör transparent användning
    TryFrom för alla befintliga implementeringar av "Från";

  • Funktionen har fasats ut CommandExt::before_exec, som gjorde det möjligt för en hanterare att exekveras innan exec kördes, vilket exekverades i sammanhanget av en underordnad process som splittrades efter fork()-anropet. Under sådana förhållanden kan vissa resurser i den överordnade processen, såsom filbeskrivningar och mappade minnesområden, dupliceras, vilket kan leda till odefinierat beteende och felaktig funktion av bibliotek.
    Det rekommenderas att använda en osäker funktion istället för before_exec CommandExt::pre_exec.

  • Stabiliserade signerade och osignerade atomära heltalstyper i storlek från 8 till 64 bitar (till exempel, AtomicU8), samt signerade typer NonNollI[8|16|32|64|128].
  • En ny del av API:t har flyttats till den stabila kategorin, inklusive Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] och SystemTime-metoderna har stabiliserats ::checked_[add|sub]. Iter::from_fn och iter::successors funktionerna har stabiliserats;
  • För alla heltalstyper är metoderna checked_pow, saturating_pow, wrapping_pow och overflowing_pow implementerade;
  • Lade till möjligheten att aktivera optimeringar i länkningsstadiet genom att ange byggalternativet "-C linker-plugin-lto".

Källa: opennet.ru

Lägg en kommentar