Rust 1.66 programavimo kalbos leidimas

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.66“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Sąrašuose, kuriuose pateikiami sveikieji skaičiai (atributas „#[repr(Int)]“), leidžiama aiškiai nurodyti diskriminantą (varianto numeris sąraše), net jei sąraše yra laukų. #[repr(u8)] enum Foo { A(u8), # diskriminantas 0 B(i8), # diskriminantas 1 C(bool) = 42, # diskriminantas 42 }
  • Pridėta funkcijos core::hint::black_box, kuri tiesiog grąžina gautą reikšmę. Kadangi kompiliatorius mano, kad ši funkcija kažką daro, funkciją black_box galima naudoti norint išjungti kompiliatoriaus optimizavimą kilpoms atliekant kodo veikimo testavimą arba tiriant sugeneruotą mašinos kodą (kad kompiliatorius nelaikytų kodo nepanaudotu ir jo nepašalintų). Pavyzdžiui, toliau pateiktame pavyzdyje black_box(v.as_ptr()) neleidžia kompiliatoriui galvoti, kad vektorius v nenaudojamas. naudokite std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • „Cargo“ paketo tvarkyklė siūlo komandą „pašalinti“, kuri leidžia iš komandinės eilutės pašalinti priklausomybes iš Cargo.toml manifesto.
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{pirmas, paskutinis, pop_pirmas, pop_paskutinis}
    • BTreeMap::{pirmojo_rakto_vertė, paskutinė_rakto_vertė, pirmasis_įvedimas, paskutinis_įvedimas, pop_pirmas, pop_paskutinis}
    • Naudodami WASI pridėkite AsFd diegimus stdio užrakto tipams.
    • impl TryFrom > Dėžutei <[T; N]>
    • core::hint::black_box
    • Trukmė::try_from_ses_{f32,f64}
    • Parinktis:: išpakuokite
    • std::os::fd
  • Diapazonai „..X“ ir „..=X“ leidžiami šablonuose.
  • Kuriant priekinę rustc kompiliatoriaus dalį ir LLVM backend, naudojami LTO (Link Time Optimization) ir BOLT (Binary Optimization and Layout Tool) optimizavimo režimai, siekiant padidinti gauto kodo našumą ir sumažinti atminties sąnaudas.
  • Įdiegtas 5 lygio palaikymas armv5te-none-eabi ir thumbvXNUMXte-none-eabi platformoms. Trečias lygis reiškia pagrindinį palaikymą, tačiau be automatinio testavimo, oficialių versijų paskelbimo ir kodo kūrimo galimybės tikrinimo.
  • Pridėtas susiejimo su „MacOS“ bendrųjų bibliotekų palaikymas.

Be to, galime atkreipti dėmesį į Rust kalbos kompiliatoriaus (gccrs) priekinės dalies įtraukimą į GCC kodų bazę. Frontend yra įtraukta į GCC 13 filialą, kuris bus išleistas 2023 m. gegužės mėn. Pradedant nuo GCC 13, standartinis GCC įrankių rinkinys gali būti naudojamas Rust programoms kompiliuoti, nereikia įdiegti rustc kompiliatoriaus, sukurto naudojant LLVM plėtrą. „Rust“ diegimas GCC 13 bus beta versijos būsena, neįjungtas pagal numatytuosius nustatymus.

Šaltinis: opennet.ru

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