Izdaja programskega jezika Rust 1.66

Objavljena je bila izdaja splošnega programskega jezika Rust 1.66, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Pri naštevanjih s celoštevilskimi predstavitvami (atribut "#[repr(Int)]" je dovoljena eksplicitna navedba diskriminante (številka različice v naštevanju), tudi če naštevanje vsebuje polja. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Dodana funkcija core::hint::black_box, ki preprosto vrne prejeto vrednost. Ker prevajalnik misli, da ta funkcija nekaj počne, se lahko s funkcijo black_box onemogoči optimizacije prevajalnika za zanke pri izvajanju testiranja zmogljivosti kode ali pri pregledovanju generirane strojne kode (tako da prevajalnik kode ne šteje za neuporabljeno in je odstrani). Na primer, v spodnjem primeru black_box(v.as_ptr()) prepreči, da bi prevajalnik mislil, da vektor v ni uporabljen. uporabite std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); }}
  • Upravitelj paketov »cargo« ponuja ukaz »remove«, ki omogoča odstranitev odvisnosti iz manifesta Cargo.toml iz ukazne vrstice.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • 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::{prvi, zadnji, pop_first, pop_last}
    • BTreeMap::{prva_ključna_vrednost, zadnja_ključna_vrednost, prvi_vnos, zadnji_vnos, pop_first, pop_last}
    • Dodajte implementacije AsFd za vrste zaklepanja stdio pri uporabi WASI.
    • impl TryFrom > za polje<[T; N]>
    • core::hint::black_box
    • Trajanje::try_from_secs_{f32,f64}
    • Option::razpakiraj
    • std::os::fd
  • V predlogah sta dovoljena obsega "..X" in "..=X".
  • Pri izdelavi sprednjega dela prevajalnika rustc in zaledja LLVM se uporabljata načina optimizacije LTO (Optimizacija časa povezave) in BOLT (Orodje za binarno optimizacijo in postavitev), da se poveča zmogljivost nastale kode in zmanjša poraba pomnilnika.
  • Implementirana podpora 5. stopnje za platformi armv5te-none-eabi in thumbvXNUMXte-none-eabi. Tretja raven pomeni osnovno podporo, vendar brez avtomatiziranega testiranja, objavljanja uradnih gradenj in preverjanja zmožnosti gradnje kode.
  • Dodana podpora za povezovanje z generičnimi knjižnicami macOS.

Poleg tega lahko opazimo vključitev sprednjega prevajalnika jezika Rust (gccrs) v kodno zbirko GCC. Sprednji del je vključen v vejo GCC 13, ki bo izšla maja 2023. Začenši z GCC 13 bo standardni komplet orodij GCC mogoče uporabljati za prevajanje programov Rust brez potrebe po namestitvi prevajalnika rustc, zgrajenega z razvojem LLVM. Implementacija Rust v GCC 13 bo v stanju beta in privzeto ne bo omogočena.

Vir: opennet.ru

Dodaj komentar