Rust 1.66 programmeerimiskeele väljalase

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.66 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Täisarvuliste esitustega loendustes (atribuut "#[repr(Int)]") on diskrimineerija (loenduse variandi number) selge märkimine lubatud, isegi kui loend sisaldab välju. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Lisatud funktsiooni core::hint::black_box, mis lihtsalt tagastab saadud väärtuse. Kuna kompilaator arvab, et see funktsioon teeb midagi, saab funktsiooni black_box abil keelata kompilaatori optimeerimise silmuste jaoks koodi jõudluse testimisel või genereeritud masinkoodi uurimisel (et kompilaator ei loeks koodi kasutamatuks ja eemaldaks seda). Näiteks allolevas näites ei lase must_kast(v.as_ptr()) kompilaatoril arvata, et vektorit v ei kasutata. kasuta std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); must_kast(v.as_ptr()); } }
  • Paketihaldur "cargo" pakub käsku "eemalda", mis võimaldab eemaldada käsurealt sõltuvusi Cargo.tomli manifestist.
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • 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::{esimene, viimane, pop_esimene, pop_viimane}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Lisage WASI kasutamisel stdio-luku tüüpide jaoks AsFd-rakendused.
    • impl TryFrom > jaoks Box<[T; N]>
    • core::hint::black_box
    • Kestus::try_from_secs_{f32,f64}
    • Valik::paki lahti
    • std::os::fd
  • Vahemikud "..X" ja "..=X" on mallides lubatud.
  • Rustc kompilaatori esiotsa ja LLVM-i taustaprogrammi ehitamisel kasutatakse LTO (Link Time Optimization) ja BOLT (Binary Optimization and Layout Tool) optimeerimisrežiime, et suurendada saadud koodi jõudlust ja vähendada mälutarbimist.
  • Rakendatud on 5. taseme tugi armv5te-none-eabi ja thumbvXNUMXte-none-eabi platvormidele. Kolmas tase eeldab põhituge, kuid ilma automaatse testimiseta, ametlike järge avaldamise ja koodi koostamise võime kontrollimiseta.
  • Lisatud on macOS-i üldiste teekide linkimise tugi.

Lisaks võime märkida Rusti keele esiotsa kompilaatori (gccrs) lisamist GCC koodibaasi. Esiosa on lisatud GCC 13 harusse, mis avaldatakse 2023. aasta mais. Alates GCC 13-st saab standardset GCC tööriistakomplekti kasutada Rust-programmide kompileerimiseks, ilma et oleks vaja installida LLVM-i arenduste abil ehitatud rustc-kompilaatorit. Rooste juurutus GCC 13-s on beetaolekus, pole vaikimisi lubatud.

Allikas: opennet.ru

Lisa kommentaar