Išleista programavimo kalba Rust 1.75 ir unikernel Hermit 0.6.7

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.75“ 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:

  • Pridėta galimybė privačiuose bruožuose naudoti „async fn“ ir „-> iml Trait“ žymėjimą. Pavyzdžiui, naudodami „->impl Trait“ galite parašyti požymio metodą, kuris grąžina iteratorių: trait Container { fn items(&self) -> impl Iterator; } impl konteineris, skirtas MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }

    Taip pat galite kurti bruožus naudodami „async fn“: bruožas HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // bus išplėsta į: // fn fetch(&self, url: Url) -> impl Future; }

  • Pridėta API baitų poslinkiams, palyginti su rodyklėmis, apskaičiuoti. Dirbant su plikomis rodyklėmis („*const T“ ir „*mut T“), gali prireikti atlikti veiksmus, kad būtų galima pridėti žymeklio poslinkį. Anksčiau tam buvo galima naudoti tokią konstrukciją kaip „::add(1)“, pridedant baitų skaičių, atitinkantį „size_of::()“ dydį. Naujoji API supaprastina šią operaciją ir leidžia manipuliuoti baitų poslinkiais prieš tai neperduodant tipų į „*const u8“ arba „*mut u8“.
    • rodyklė::byte_add
    • rodyklė::byte_offset
    • rodyklė::byte_offset_from
    • rodyklė::byte_sub
    • rodyklė::wrapping_byte_add
    • rodyklė::wrapping_byte_offset
    • rodyklė::wrapping_byte_sub
  • Tęsiamas darbas siekiant padidinti „rustc“ kompiliatoriaus našumą. Pridėta BOLT optimizavimo priemonė, kuri veikia po nuorodos ir naudoja informaciją iš iš anksto paruošto vykdymo profilio. Naudojant BOLT galima paspartinti kompiliatoriaus vykdymą maždaug 2 % pakeitus bibliotekos kodo išdėstymą librustc_driver.so, kad būtų efektyviau naudojama procesoriaus talpykla.

    Įtrauktas rustc kompiliatoriaus kūrimas su "-Ccodegen-units=1" parinktimi, siekiant pagerinti LLVM optimizavimo kokybę. Atlikti testai rodo, kad „-Ccodegen-units=1“ konstrukcijos našumas padidėjo maždaug 1.5%. Papildomi optimizavimai pagal numatytuosius nustatymus įjungti tik x86_64-unknown-linux-gnu platformai.

    Anksčiau minėtus optimizavimus išbandė Google, siekdama sutrumpinti Rust kalba parašytų Android platformos komponentų kūrimo laiką. „-C codegen-units=1“ naudojimas kuriant „Android“ leido sumažinti įrankių rinkinio dydį 5.5% ir padidinti jo našumą 1.8%, o paties įrankių rinkinio kūrimo laikas beveik padvigubėjo.

    Įjungus nuorodos laiko šiukšlių rinkimą („--gc-sections“) našumas padidėjo iki 1.9%, įgalinant nuorodos laiko optimizavimą (LTO) iki 7.7%, o profiliu pagrįstą optimizavimą (PGO) - iki 19.8%. Finale optimizavimas buvo pritaikytas naudojant BOLT programą, kuri leido padidinti kūrimo greitį iki 24.7%, tačiau įrankių rinkinio dydis padidėjo 10.9%.

    Išleista programavimo kalba Rust 1.75 ir unikernel Hermit 0.6.7

  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
    • Atominis*::from_ptr
    • FileTimes
    • FileTimesExt
    • Failas::set_modified
    • Failas::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Parinktis::as_slice
    • Parinktis::as_mut_slice
    • rodyklė::byte_add
    • rodyklė::byte_offset
    • rodyklė::byte_offset_from
    • rodyklė::byte_sub
    • rodyklė::wrapping_byte_add
    • rodyklė::wrapping_byte_offset
    • rodyklė::wrapping_byte_sub
  • Atributas "const", kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijose:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::sume_init_read
    • MaybeUninit::nulis
    • mem::diskriminantas
    • mem::nulis
  • Trečiasis paramos lygis įdiegtas platformoms csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ir mipsel-unknown-netbsd. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo, oficialių versijų paskelbimo ar patikrinimo, ar kodą galima sukurti.

Be to, galime atkreipti dėmesį į naują projekto Hermit versiją, kuri kuria specializuotą branduolį (unikernel), parašytą Rust kalba, suteikiantį įrankius savarankiškoms programoms, kurios gali veikti ant hipervizoriaus arba be papildomų sluoksnių, kurti. ir be operacinės sistemos. Sukurta programa yra statiškai susieta su biblioteka, kuri savarankiškai įgyvendina visas būtinas funkcijas, nesusieta su OS branduoliu ir sistemos bibliotekomis. Projekto kodas platinamas pagal Apache 2.0 ir MIT licencijas. Surinkimas palaikomas savarankiškam programų, parašytų Rust, Go, Fortran, C ir C++, vykdymui. Projektas taip pat kuria savo įkrovos įkroviklį, leidžiantį paleisti Hermit naudojant QEMU ir KVM.

Šaltinis: opennet.ru

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