Rust 1.34 programspråk release

Systemprogrammeringsspråket Rust 1.34, utvecklat av Mozilla-projektet, har släppts. Språket fokuserar på minnessäkerhet, tillhandahåller automatisk minneshantering och ger ett sätt att uppnå hög uppgiftsparallellism 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. För att distribuera bibliotek, säkerställa montering och hantera beroenden utvecklar projektet Cargo package manager, som låter dig få de bibliotek som behövs för programmet med ett klick. Crates.io-förvaret stöds för värdbibliotek.

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 ett externt register till ~/.cargo/config
    ett nytt alternativ "mitt register" finns i avsnittet "[register]", och ett alternativ för "annan låda" har lagts till för att nämna det externa registret i beroenden i Cargo.toml i avsnittet "[beroenden]". 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 doctests, som låter dig använda exempelkod från dokumentationen som test. 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 som definieras med procedurmakron är det möjligt 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)]";
  • TryFrom- och TryInto-egenskaperna har stabiliserats, vilket möjliggör 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 Infallible error-typ lagts till för att möjliggöra transparent användning av
    TryFrom för alla befintliga implementeringar av "Från";

  • Utfasade funktionen CommandExt::before_exec, som tillät exekvering av en hanterare före exec som kördes i sammanhanget av en underordnad process som gafflas 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.
    Istället för before_exec rekommenderas att använda den osäkra funktionen CommandExt::pre_exec.

  • Stabiliserade signerade och osignerade atomära heltalstyper som sträcker sig i storlek från 8 till 64 bitar (till exempel AtomicU8), såväl som signerade typer NonZeroI[8|16|32|54|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 vid länkningsstadiet genom att ange byggalternativet "-C linker-plugin-lto" (rustc kompilerar Rustkod till LLVM-bitkod, vilket gör att LTO-optimeringar kan tillämpas).

Källa: opennet.ru

Lägg en kommentar