Rust 1.34 programavimo kalbos leidimas

Išleista sistemos programavimo kalba Rust 1.34, sukurta Mozilla projekto. Kalba skirta atminties saugai, suteikia automatinį atminties valdymą ir suteikia galimybę pasiekti aukštą užduočių lygiagretumą nenaudojant šiukšlių rinktuvo ar vykdymo laiko.

„Rust“ automatinis atminties valdymas išlaisvina kūrėją nuo manipuliavimo žymekliu ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., laisvos atminties prieigos, nulinių rodyklės nuorodų, buferio viršijimo ir panašiai. Bibliotekoms platinti, surinkimui užtikrinti ir priklausomybėms valdyti projekte kuriama Cargo paketų tvarkyklė, leidžianti vienu paspaudimu gauti programai reikalingas bibliotekas. Crates.io saugykla palaikoma bibliotekų prieglobai.

Pagrindinės naujovės:

  • „Cargo“ paketų tvarkyklė pridėjo įrankių, skirtų darbui su alternatyviais paketų registrais, kurie gali egzistuoti kartu su viešuoju crates.io registru. Pavyzdžiui, patentuotų programų kūrėjai dabar gali naudoti savo privatų registrą, kuris gali būti naudojamas įtraukiant priklausomybes Cargo.toml, ir taikyti savo produktams panašų į crates.io versijų kūrimo modelį, taip pat nurodyti priklausomybes abiem dėžėms. io ir į savo registrą.

    Norėdami pridėti išorinį registrą prie ~/.cargo/config
    skiltyje „[registrai]“ pateikta nauja parinktis „mano registras“, o „[priklausomybių]“ skiltyje įtraukta parinktis „other-crate“, kad būtų galima paminėti išorinį registrą Cargo.toml priklausomybėse. Norėdami prisijungti prie papildomo registro, tiesiog įdėkite autentifikavimo prieigos raktą į failą ~/.cargo/credentials ir paleiskite komandą
    "krovinio prisijungimas --registry=my-registry" ir paskelbti paketą -
    "krovinio paskelbimas -registry=mano registras";

  • Pridėtas visas palaikymas naudojant operatorių "?". doctests, kurie leidžia kaip testus naudoti pavyzdinį kodą iš dokumentacijos. Anksčiau operatorius
    "?" gali būti naudojamas tvarkyti klaidas atliekant bandymą tik esant funkcijai „fn main()“ arba „#[testas]“ funkcijoms;

  • Pasirinktiniuose atributuose, apibrėžtuose naudojant procedūrines makrokomandas, galima naudoti savavališkus prieigos raktų rinkinius („#[attr($tokens)]“, „#[attr[$tokens]] ir #[attr{$tokens}]“). Anksčiau elementus buvo galima nurodyti tik medžio / rekursyvios formos naudojant eilučių literalius, pvz., „#[foo(bar, baz(quux, foo = "bar")]“, tačiau dabar galima naudoti sąrašus (' #[diapazonas(0. .10)]') ir tokios konstrukcijos kaip "#[bound(T: MyTrait)]";
  • „TryFrom“ ir „TryInto“ bruožai buvo stabilizuoti, todėl galima konvertuoti tipus su klaidų apdorojimu. Pavyzdžiui, tokie metodai kaip from_be_bytes su sveikųjų skaičių tipais naudoja masyvus kaip įvestį, tačiau duomenys dažnai pateikiami Slice tipo, o konvertuoti tarp masyvų ir skilčių yra sudėtinga rankiniu būdu. Pasitelkus naujus bruožus, nurodytą operaciją galima atlikti iškviečiant .try_into(), pavyzdžiui, „let num = u32::from_be_bytes(slice.try_into()?)“. Visada sėkmingoms konversijoms (pvz., nuo u8 tipo iki u32) buvo pridėtas klaidos tipas Neklystantis, kad būtų galima skaidriai naudoti
    TryFrom visiems esamiems "Nuo" diegimams;

  • Nebenaudojama funkcija CommandExt::before_exec, kuri leido vykdyti tvarkyklę prieš exec, kuri buvo vykdoma antrinio proceso, susišakojusio po fork() iškvietimo, kontekste. Esant tokioms sąlygoms, kai kurie pirminio proceso ištekliai, pvz., failų deskriptoriai ir susietos atminties sritys, gali būti dubliuojami, o tai gali sukelti neapibrėžtą elgesį ir netinkamą bibliotekų veikimą.
    Vietoje before_exec rekomenduojama naudoti nesaugią funkciją CommandExt::pre_exec.

  • Stabilizuotų ženklų ir nežymių atominių sveikųjų skaičių tipai, kurių dydis svyruoja nuo 8 iki 64 bitų (pavyzdžiui, AtomicU8), taip pat pažymėti tipai NonZeroI[8|16|32|54|128].
  • Nauja API dalis buvo perkelta į stabilią kategoriją, įskaitant Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] ir SystemTime metodai buvo stabilizuoti ::checked_[add|sub]. Funkcijos iter::from_fn ir iter::successors buvo stabilizuotos;
  • Visiems sveikųjų skaičių tipams yra įdiegti checked_pow, saturating_pow, wrapping_pow ir overflowing_pow metodai;
  • Pridėta galimybė įjungti optimizavimą susiejimo etape, nurodant „-C linker-plugin-lto“ kūrimo parinktį (rustc sukompiliuoja Rust kodą į LLVM bitkodą, kuris leidžia pritaikyti LTO optimizavimą).

Šaltinis: opennet.ru

Добавить комментарий