Izdanje Rust programskog jezika 1.73

Objavljen je programski jezik opće namjene Rust 1.73, 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:

  • Redizajniran je format poruka koje izdaje zadani rukovatelj rušenjem programa (panika). Tekst naveden u makronaredbi "panic!" sada se prikazuje u zasebnom retku bez navodnika, što olakšava čitanje poruke i eliminira zabunu kada su prisutni ugniježđeni navodnici ili su podijeljeni u više redaka. fn main() { let file = "ferris.txt"; panika!("o ne! {datoteka:?} nije pronađena!"); } Postojala je nit 'main' uspaničena od 'oh ne! "ferris.txt" nije pronađen!', src/main.rs:3:5 Nit 'main' u panici na src/main.rs:3:5: o ne! "ferris.txt" nije pronađen!

    Izlaz poruka prikazan kada se pokreću makronaredbe "assert_eq" i "assert_ne" također je prerađen. fn main() { assert_eq!("🦀", "🐟", "ferris nije riba"); } Bila je nit 'main' uspaničena zbog 'tvrdnja nije uspjela: `(lijevo == desno)` lijevo: `"🦀"`, desno: `"🐟"`: ferris nije riba', src/main.rs: 2 :5 Tema 'main' u panici na src/main.rs:2:5: tvrdnja `left == right` nije uspjela: ferris nije riba lijevo: “🦀” desno: “🐟”

  • U skladu s RFC 3184, dodana je mogućnost izravne manipulacije ključevima LocalKey za pohranu lokalnih niti (thread_local) > i LocalKey > upotrebom metoda get(), set(), take() i replace(), umjesto upotrebe "with(|inner| ...)" zatvaranja, što eliminira potrebu za dodatnim inicijalizacijskim kodom za zadani vrijednosti navedene za nove niti kada se koristi makro "thread_local!" thread_local! { statične STVARI: Ćelija > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // postale STVARI.set(vec![3, 1, 2]); // ... // pušteno je v = STVARI.with(|i| i.take()); // postao je let v: Vec = STVARI.uzeti(); }
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • Nepredpisani {cijeli broj}::div_ceil
    • Nepredpisani {cijeli broj}::sljedeći_više_od
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::dobiti
    • LocalKey:: >::postaviti
    • LocalKey:: >::uzmi
    • LocalKey:: >::zamijeniti
    • LocalKey:: >::s_posuditi
    • LocalKey:: >::s_posuditi_mut
    • LocalKey:: >::postaviti
    • LocalKey:: >::uzmi
    • LocalKey:: >::zamijeniti
  • Atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama:
    • rc::Slab::novo
    • sinkronizacija::Slabo::novo
    • NonNull::as_ref
  • Kompajler omogućuje snimanje informacija o verziji u odjeljku ".comment", slično kao GCC i Clang.
  • Treća razina podrške implementirana je za platforme aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl i x86_64-unknown-linux -ohos. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih međugradnji ili provjere može li se kod izgraditi.
  • Implementirana je druga razina podrške za ciljnu platformu wasm32-wasi-preview1-threads. Druga razina podrške uključuje jamstvo za montažu.

Izvor: opennet.ru

Dodajte komentar