Programski jezik Rust 1.66 izdanje

Objavljeno je izdanje Rust 1.66 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • U enumeracijama sa celobrojnim prikazima (atribut “#[repr(Int)]”), eksplicitno navođenje diskriminanta (broja opcije u enumeraciji) je dozvoljeno, čak i ako nabrajanje sadrži polja. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Dodata funkcija core::hint::black_box, koja jednostavno vraća primljenu vrijednost. Budući da prevodilac vjeruje da data funkcija radi određenu stvar, funkcija black_box se može koristiti da onemogući kompajlerovu optimizaciju petlji prilikom izvođenja testiranja performansi koda ili prilikom ispitivanja generiranog strojnog koda (tako da prevodilac ne smatra kod neupotrebljivim i uklanja to). Na primjer, u primjeru ispod, specificiranje black_box(v.as_ptr()) sprječava kompajler da pretpostavi da vektor v nije u upotrebi. koristite std::hint::black_box; fn push_cap(v: &mut Vec) { za i u 0..4 { v.push(i); crna_kutija(v.as_ptr()); } }
  • Upravitelj paketa "cargo" nudi naredbu "remove", koja vam omogućava da uklonite ovisnosti iz manifesta Cargo.toml iz komandne linije.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • 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_prvi, pop_posljednji}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Dodajte implementacije AsFd za tipove stdio zaključavanja kada koristite WASI.
    • impl TryFrom > za kutiju<[T; N]>
    • core::hint::black_box
    • Trajanje::try_from_secs_{f32,f64}
    • Opcija::unzip
    • std::os::fd
  • Upotreba opsega “..X” i “..=X” je dozvoljena u predlošcima.
  • Prilikom sastavljanja frontenda rustc kompajlera i pozadine LLVM-a, koriste se optimizacioni modovi LTO (Link Time Optimization) i BOLT (Binary Optimization and Layout Tool), koji omogućavaju povećanje performansi rezultujućeg koda i smanjenje potrošnje memorije.
  • Treći nivo podrške implementiran je za platforme armv5te-none-eabi i thumbv5te-none-eabi. Treći nivo uključuje osnovnu podršku, ali bez automatskog testiranja, objavljivanja službenih verzija ili provjere da li se kod može izgraditi.
  • Dodata podrška za povezivanje sa macOS univerzalnim bibliotekama.

Dodatno, možemo primijetiti uključivanje prednjeg dijela kompajlera Rust jezika (gccrs) u bazu GCC koda. Frontend je uključen u granu GCC 13, koja će biti objavljena u maju 2023. Počevši od GCC 13, izvorni GCC alati se mogu koristiti za kompajliranje programa u Rust jeziku bez potrebe za instaliranjem rustc kompajlera, napravljenog pomoću LLVM razvoja. GCC 13 implementacija Rusta će biti beta verzija, koja nije omogućena po defaultu.

izvor: opennet.ru

Dodajte komentar