Utgivelsen av Rust 1.80 generell programmeringsspråk, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet og gir midler til å oppnå høy jobbparallellisme samtidig som man unngår bruk av en søppeloppsamler og kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).
Rusts minnehåndteringsmetoder sparer utvikleren fra feil ved manipulering av pekere og beskytter mot problemer som oppstår på grunn av minnehåndtering på lavt nivå, for eksempel tilgang til et minneområde etter at det har blitt frigjort, avreferering av null-pekere, bufferoverskridelser, etc. For å distribuere biblioteker, tilby bygg og administrere avhengigheter, utvikler prosjektet Cargo-pakkeansvarlig. Crates.io-depotet støttes for hosting av biblioteker.
Minnesikkerhet er gitt i Rust på kompileringstidspunktet gjennom referansesjekking, holde styr på objekteierskap, holde styr på objektlevetider (scopes), og vurdere riktigheten av minnetilgang under kjøring av kode. Rust gir også beskyttelse mot heltallsoverløp, krever obligatorisk initialisering av variabelverdier før bruk, håndterer feil bedre i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, tilbyr sterk statisk skriving for å minimere logiske feil.
Hovedinnovasjoner:
- Lagt til LazyCell- og LazyLock-strukturer som lar deg utsette datainitialisering til første tilgang (initialiseringsfunksjonen kalles når du forsøker å få tilgang til en verdi). LazyLock skiller seg fra LazyCell ved å støtte synkroniseringsfasiliteter for bruk i flertrådskode. bruk std::sync::LazyLock; bruk std::time::Instant; statisk LAZY_TIME: LazyLock = LazyLock::new(Instant::now); fn main() { let start = Instant::now(); std::thread::scope(|s| { s.spawn(|| { println!("Trådens lattid er {:?}", LAZY_TIME.duration_since(start)); }); println!("Hoved lat tiden er {:?}", LAZY_TIME.duration_since(start)); }
- Rustc-kompilatoren har stabilisert alternativet "--check-cfg", som brukes i pakkebehandlingen for å sjekke alle navn og verdier spesifisert gjennom cfg, inkludert navn fra Cargo.toml. fn main() { println!("Hei, verden!"); #[cfg(feature = "fargestift")] rayon::join( || println!("Hello, Thing One!"), || println!("Hei, Thing Two!"), ); } advarsel: uventet `cfg`-tilstandsverdi: `crayon` —> src/main.rs:4:11 | 4 | #[cfg(funksjon = "fargestift")] | ^^^^^^^^^^——— | | | hjelp: det er en forventet verdi med et lignende navn: "rayon".
- Maler lar områder spesifiseres i formatene "a..b" og "..b", som ligner på bruk av Range- og RangeTo-uttrykk. pub fn size_prefix(n: u32) -> &'static str { const K: u32 = 10u32.pow(3); const M: u32 = 10u32.pow(6); const G: u32 = 10u32.pow(9); match n { ..K => "", K..M => "k", M..G => "M", G.. => "G", } }
- En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
- impl Standard for Rc
- impl Standard for Rc
- impl Standard for Rc<[T]>
- impl Standard for Arc
- impl Standard for Arc
- impl Standard for Arc<[T]>
- impl IntoIterator for Box<[T]>
- impl FromIterator for Box
- impl FromIterator for Box
- LazyCell
- LazyLock
- Duration::div_duration_f32
- Duration::div_duration_f64
- Option::take_if
- Seek::seek_relative
- BinaryHeap::as_slice
- NonNull::offset
- NonNull::byte_offset
- NonNull::legg til
- NonNull::byte_add
- NonNull::sub
- NonNull::byte_sub
- NonNull::offset_from
- NonNull::byte_offset_from
- NonNull::les
- NonNull::read_volatile
- NonNull::read_unaligned
- NonNull::skriv
- NonNull::write_volatile
- NonNull::write_unaligned
- NonNull::write_bytes
- NonNull::copy_to
- NonNull::copy_to_nonoverlapping
- NonNull::copy_from
- NonNull::copy_from_nonoverlapping
- NonNull::erstatt
- NonNull::bytte
- NonNull::drop_in_place
- NonNull::align_offset
- <[T]>::split_at_checked
- <[T]>::split_at_mut_checked
- str::split_at_checked
- str::split_at_mut_checked
- str::trim_ascii
- str::trim_ascii_start
- str::trim_ascii_end
- <[u8]>::trim_ascii
- <[u8]>::trim_ascii_start
- <[u8]>::trim_ascii_end
- IPv4Addr::BITS
- Ipv4Addr::to_bits
- Ipv4Addr::from_bits
- IPv6Addr::BITS
- Ipv6Addr::to_bits
- Ipv6Addr::from_bits
- Vec::<[T; N]>::into_flatened
- <[[ T; N]]>::as_flatet
- <[[ T; N]]>::as_flattened_mut
- "const"-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i funksjonene:
- <[T]>::last_chunk
- BinaryHeap::ny
- Det tredje støttenivået er implementert for x86_64-unknown-linux-none-plattformen. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg, eller sjekk om koden kan bygges.
Kilde: opennet.ru
