Izdanje Rust programskog jezika 1.66

Objavljen je programski jezik opće namjene Rust 1.66, utemeljen na projektu Mozilla, ali sada razvijen pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe skupljača smeća i vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programere od pogrešaka pri manipuliranju pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskoj razini, kao što je pristup memorijskom području nakon što je ono oslobođeno, dereferenciranje nultih pokazivača, prekoračenje međuspremnika, itd. Za distribuciju biblioteka, pružanje nadogradnji i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Sigurnost memorije osigurana je u Rustu tijekom kompajliranja provjerom referenci, praćenjem vlasništva objekta, praćenjem životnih vijekova objekta (opsega) i procjenom ispravnosti pristupa memoriji tijekom izvođenja koda. Rust također pruža zaštitu od prekoračenja cjelobrojnih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje pogreške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli prema zadanim postavkama, nudi snažno statično tipkanje za smanjenje logičkih pogrešaka.

Glavne inovacije:

  • U nabrajanjima s prikazima cjelobrojnih brojeva (atribut "#[repr(Int)]") dopuštena je eksplicitna indikacija diskriminante (broj varijante u nabrajanju), čak i ako nabrajanje sadrži polja. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
  • Dodana funkcija core::hint::black_box koja jednostavno vraća primljenu vrijednost. Budući da prevodilac misli da ova funkcija nešto radi, funkcija black_box može se koristiti za onemogućavanje optimizacije prevoditelja za petlje prilikom izvođenja testiranja performansi koda ili kada se ispituje generirani strojni kod (tako da prevodilac ne smatra kod neiskorištenim i ukloni ga). Na primjer, u donjem primjeru, black_box(v.as_ptr()) sprječava kompajler da pomisli da se vektor v ne koristi. koristiti std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); crna_kutija(v.as_ptr()); }}
  • Upravitelj paketa "cargo" nudi naredbu "remove", koja vam omogućuje uklanjanje ovisnosti iz manifesta Cargo.toml iz naredbenog retka.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika 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_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Dodajte AsFd implementacije za stdio vrste zaključavanja kada koristite WASI.
    • impl TryFrom > za kutiju<[T; N]>
    • jezgra::hint::black_box
    • Trajanje::try_from_secs_{f32,f64}
    • Opcija :: raspakiraj
    • std::os::fd
  • Rasponi "..X" i "..=X" dopušteni su u predlošcima.
  • Prilikom izgradnje prednjeg kraja rustc prevoditelja i LLVM pozadine, LTO (Link Time Optimization) i BOLT (Binary Optimization and Layout Tool) načini optimizacije koriste se za povećanje performansi rezultirajućeg koda i smanjenje potrošnje memorije.
  • Implementirana podrška razine 5 za platforme armv5te-none-eabi i thumbvXNUMXte-none-eabi. Treća razina podrazumijeva osnovnu podršku, ali bez automatiziranog testiranja, objave službenih buildova i provjere mogućnosti izgradnje koda.
  • Dodana podrška za povezivanje s generičkim bibliotekama macOS-a.

Dodatno, možemo primijetiti uključivanje u GCC kodnu bazu prednjeg prevoditelja jezika Rust (gccrs). Sučelje je uključeno u granu GCC 13 koja će biti objavljena u svibnju 2023. Počevši od GCC 13, standardni GCC komplet alata moći će se koristiti za kompajliranje Rust programa bez potrebe za instaliranjem rustc prevoditelja izgrađenog pomoću LLVM razvoja. Implementacija Rusta u GCC 13 bit će u beta statusu, neće biti omogućena prema zadanim postavkama.

Izvor: opennet.ru

Dodajte komentar