Izdaja programskega jezika Rust 1.73

Objavljena je bila izdaja splošnega programskega jezika Rust 1.73, 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:

  • Format sporočil, ki jih izda privzeti program za obravnavo zrušitev (panika), je bil preoblikovan. Besedilo, navedeno v makru "panic!" je zdaj prikazano v ločeni vrstici brez narekovajev, kar olajša branje sporočila in odpravi zmedo, ko so prisotni ugnezdeni narekovaji ali razdeljeni v več vrstic. fn main() { let file = "ferris.txt"; panika!("oh ne! {datoteka:?} ni najdena!"); } Tam je bila nit 'main', ki je bila panična ob 'oh ne! »ferris.txt« ni bilo mogoče najti!', src/main.rs:3:5 Nit 'main' zajela panika na src/main.rs:3:5: oh ne! "ferris.txt" ni bilo mogoče najti!

    Izhod sporočil, prikazanih, ko se sprožita makra »assert_eq« in »assert_ne«, je bil prav tako predelan. fn main() { assert_eq!("🦀", "🐟", "ferris ni riba"); } Tam je bila nit 'main' panična ob 'trditev ni uspela: `(levo == desno)` levo: `"🦀"`, desno: `"🐟"`: ferris ni riba', src/main.rs: 2 :5 Nit 'main' panična na src/main.rs:2:5: trditev `left == right` ni uspela: ferris ni riba levo: “🦀” desno: “🐟”

  • V skladu z RFC 3184 je bila dodana zmožnost neposrednega manipuliranja lokalnih nitnih (thread_local) ključev za shranjevanje LocalKey > in LocalKey > z uporabo metod get(), set(), take() in replace() namesto z uporabo zaprtja "with(|inner| ...)", kar odpravlja potrebo po izvedbi dodatne inicializacijske kode za privzete vrednosti, določene za nove niti pri uporabi makra “thread_local!” nit_lokalna! { statične STVARI: Celica > = Cell::new(Vec::new()); } fn f() { // was THINGS.with(|i| i.set(vec![32, 1, 2])); // postal STVARI.set(vec![3, 1, 2]); // ... // pustimo v = THINGS.with(|i| i.take()); // postal let v: Vec = STVARI.vzemi(); }
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • Nepredznačeno {celo število}::div_ceil
    • Nepredznačeno {celo število}::next_multiple_of
    • Nepredznačeno {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::dobi
    • LocalKey:: >::set
    • LocalKey:: >::vzemi
    • LocalKey:: >::zamenjaj
    • LocalKey:: >::z_izposojo
    • LocalKey:: >::z_izposojo_mut
    • LocalKey:: >::set
    • LocalKey:: >::vzemi
    • LocalKey:: >::zamenjaj
  • Atribut "const", ki določa možnost uporabe v katerem koli kontekstu namesto konstant, se uporablja v funkcijah:
    • rc::Sibek::novo
    • sync::Weak::new
    • NonNull::as_ref
  • Prevajalnik zagotavlja snemanje informacij o različici v razdelku ».comment«, podobno kot GCC in Clang.
  • Tretja raven podpore je implementirana za platforme aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl in x86_64-unknown-linux -ohos. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.
  • Implementirana je bila druga raven podpore za ciljno platformo wasm32-wasi-preview1-threads. Druga raven podpore vključuje garancijo za montažo.

Vir: opennet.ru

Dodaj komentar