Rust 1.34 programmeringssprog udgivelse

Systemprogrammeringssproget Rust 1.34, udviklet af Mozilla-projektet, er blevet frigivet. 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 frigør udvikleren for pointermanipulation og beskytter mod problemer, der opstår fra lavniveau-hukommelsesmanipulation, såsom efterfri hukommelsesadgang, nul-pointer-dereferencer, bufferoverskridelser og lignende. For at distribuere biblioteker, sikre samling og administrere afhængigheder udvikler projektet Cargo package manager, som giver dig mulighed for at få de nødvendige biblioteker til programmet med et enkelt klik. Crates.io-lageret understøttes til hosting af biblioteker.

Vigtigste innovationer:

  • Tilføjede værktøjer til Cargo-pakkehåndteringen til at arbejde med alternative pakkeregistre, der kan eksistere side om side med det offentlige crates.io-register. For eksempel kan private applikationsudviklere nu bruge deres eget private register, der kan bruges, når de noterer afhængigheder i Cargo.toml og bruge en versionsmodel, der ligner crates.io til deres produkter, samt referere til både crates.io og crates.io i afhængigheder til dit eget register.

    For at tilføje et eksternt register til ~/.cargo/config
    en ny mulighed "mit-registrering" er tilvejebragt i "[registre]"-sektionen, og en "andre-kasse"-mulighed er blevet tilføjet for at nævne det eksterne register i afhængigheder i Cargo.toml i "[afhængigheder]"-sektionen. For at oprette forbindelse til et ekstra register skal du blot placere godkendelsestokenet i filen ~/.cargo/credentials og køre kommandoen
    "cargo login --registry=my-registry", og for at udgive pakken -
    "cargo publicer --registry=mit-registrering";

  • Tilføjet fuld understøttelse for at bruge "?"-operatøren. i doctests, som giver dig mulighed for at bruge eksempelkode fra dokumentationen som test. Tidligere operatør
    "?" kunne kun bruges til at håndtere fejl under testudførelse, hvis der var en "fn main()"-funktion eller i "#[test]"-funktionerne;

  • I brugerdefinerede attributter defineret ved hjælp af proceduremæssige makroer er det muligt at bruge vilkårlige sæt af tokens ("#[attr($tokens)]", "#[attr[$tokens]] og #[attr{$tokens}]") . Tidligere kunne elementer kun specificeres i et træ/rekursiv form ved hjælp af strengliteraler, for eksempel "#[foo(bar, baz(quux, foo = "bar"))]", men nu er det muligt at bruge opregninger (' #[range(0. .10)]') og konstruktioner som "#[bound(T: MyTrait)]";
  • TryFrom- og TryInto-egenskaberne er blevet stabiliseret, hvilket muliggør typekonverteringer med fejlhåndtering. For eksempel bruger metoder som from_be_bytes med heltalstyper arrays som input, men dataene kommer ofte i en Slice-type, og konvertering mellem arrays og slices er problematisk at gøre manuelt. Ved hjælp af nye egenskaber kan den angivne operation udføres i farten gennem et kald til .try_into(), for eksempel "let num = u32::from_be_bytes(slice.try_into()?)". For konverteringer, der altid lykkes (f.eks. fra type u8 til u32), er der tilføjet en Ufejlbarlig fejltype for at tillade gennemsigtig brug af
    TryFrom for alle eksisterende "Fra"-implementeringer;

  • Udfasede CommandExt::before_exec-funktionen, som tillod eksekvering af en handler før exec, der blev eksekveret i konteksten af ​​en underordnet proces, der blev gaflet efter fork()-kaldet. Under sådanne forhold kan nogle ressourcer i den overordnede proces, såsom filbeskrivelser og tilknyttede hukommelsesområder, blive duplikeret, hvilket kan føre til udefineret adfærd og forkert drift af biblioteker.
    I stedet for before_exec anbefales det at bruge den usikre funktion CommandExt::pre_exec.

  • Stabiliserede fortegns- og usignerede atomare heltalstyper i størrelse fra 8 til 64 bit (for eksempel AtomicU8), såvel som fortegnstyper NonZeroI[8|16|32|54|128].
  • En ny del af API'et er blevet flyttet til kategorien stabil, inklusive metoderne Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add] |sub] og SystemTime er stabiliseret ::checked_[add|sub]. Iter::from_fn og iter::successors funktionerne er blevet stabiliseret;
  • For alle heltalstyper implementeres metoderne checked_pow, saturating_pow, wrapping_pow og overflowing_pow;
  • Tilføjet muligheden for at aktivere optimeringer på sammenkædningsstadiet ved at specificere "-C linker-plugin-lto" byggemuligheden (rustc kompilerer Rust-kode til LLVM-bitkode, som gør det muligt at anvende LTO-optimeringer).

Kilde: opennet.ru

Tilføj en kommentar