Rust 1.57 programavimo kalbos leidimas

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar nepriklausomos ne pelno organizacijos „Rust Foundation“ globojamos sistemos programavimo kalbos „Rust 1.57“ leidimas. Kalba orientuota į atminties saugą, suteikia automatinį atminties valdymą ir suteikia priemones pasiekti aukštą užduočių lygiagretumą nenaudojant šiukšlių rinktuvo ar vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ automatinis atminties valdymas pašalina klaidas manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties manipuliavimo, pvz., prieigos prie atminties srities, kai ji buvo išlaisvinta, nulinių rodyklės nuorodų, buferio viršijimo ir kt. Bibliotekoms platinti, surinkimui užtikrinti ir priklausomybėms valdyti projekte kuriama Krovinių paketų tvarkyklė. Crates.io saugykla palaikoma bibliotekų prieglobai.

Pagrindinės naujovės:

  • „Panika!“ makrokomandos naudojimas buvo stabilizuotas. kompiliavimo metu sukurtuose kontekstuose, pvz., „const fn“ deklaracijose. Be to, be "panikos!" const deklaracijos leidžia naudoti makrokomandą „assert!“. ir kai kurios kitos standartinės bibliotekos API. Stabilizacija dar neapima visos formatavimo infrastruktūros, todėl savo dabartine forma „panikos!“ makrokomandą galima naudoti tik su statinėmis eilutėmis (panic!(...")) arba su viena interpoliuota reikšme "&str", kai keičiama (panic!("{}", a)), kuri turėtų apsiriboti "{" }" be formatavimo specifikacijų ir kitų tipų. Ateityje makrokomandų pritaikymas pastoviuose kontekstuose bus išplėstas, tačiau stabilizuotų galimybių jau pakanka, kad būtų galima atlikti tvirtinimo patikras kompiliavimo etape: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = tvirtinti!(std::mem::size_of:: () == 8);
  • „Cargo“ paketų tvarkyklė leidžia naudoti profilius su savavališkais pavadinimais, neapsiribojant „dev“, „release“, „test“ ir „bench“. Pavyzdžiui, norėdami įgalinti optimizavimą susiejimo etape (LTO) tik tada, kai sugeneruojami galutiniai gaminių rinkiniai, galite sukurti „gamybos“ profilį „Cargo.toml“ ir pridėti prie jo žymą „lto = true“. Tačiau nustatydami savo profilius turite nurodyti esamą profilį, kad paveldėtumėte iš jo numatytuosius nustatymus. Toliau pateiktame pavyzdyje sukuriamas „gamybos“ profilis, kuris papildo „išleidimo“ profilį įtraukdamas žymą „lto = true“. Pats profilis aktyvuojamas iškviečiant krovinį su parinktimi „--profile production“, o surinkimo artefaktai bus patalpinti kataloge „target/production“. [profile.production] inherits = "išleidimas" lto = tiesa
  • Try_reserve naudojimas Vec, String, HashMap, HashSet ir VecDeque tipams buvo stabilizuotas, o tai leidžia iš anksto rezervuoti vietą tam tikram skaičiui tam tikro tipo elementų, siekiant sumažinti atminties paskirstymo operacijų dažnumą ir išvengti sugenda veikimo metu dėl atminties trūkumo.
  • Leidžiama nurodyti makrokomandas su riestiniais skliaustais tokiose išraiškose kaip "m!{ .. }.method()" ir "m!{ .. }?".
  • Funkcijų File::read_to_end ir read_to_string vykdymas buvo optimizuotas.
  • Unicode specifikacijos palaikymas atnaujintas iki 14.0 versijos.
  • Išplėstas funkcijų, pažymėtų „#[must_use]“, skaičius, kad būtų pateiktas įspėjimas, jei grąžinama reikšmė nepaisoma, o tai padeda nustatyti klaidas, atsiradusias dėl to, kad funkcija pakeis reikšmes, o ne grąžins naują reikšmę.
  • Pridėta eksperimentinė kodo generavimo programa naudojant libgccjit.
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kolekcijos::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Eilutė::try_reserve
    • String::try_rezervuoti_tiksliai
    • Vec::try_rezervuoti
    • Sen::pabandyti_rezervuoti_tiksliai
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iteratorius::map_while
    • iter::MapWhile
    • proc_macro::yra_available
    • Komanda::get_program
    • Komanda::get_args
    • Komanda::get_envs
    • Komanda::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atributas „const“, kuris nustato galimybę jį naudoti bet kuriame kontekste, o ne konstantose, naudojamas funkcijoje hint::unreachable_unchecked.
  • Trečiasis paramos lygis buvo įdiegtas armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ir armv7a- solid_asp3-eabihf platformos. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo, oficialių versijų paskelbimo ar patikrinimo, ar kodą galima sukurti.

Šaltinis: opennet.ru

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