Programski jezik Rust 1.34 izdanje

održan izdanje sistemskog programskog jezika Rđa 1.34, razvijen od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća ili vremena izvođenja.

Rust-ovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačem i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što su pristupi memoriji nakon slobodne upotrebe, dereferenciranje nulte pokazivača, prekoračenje bafera i slično. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. teret, što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka crates.io.

Glavni inovacije:

  • Cargo paket menadžer je dodao alate za rad sa alternativnim registrima paketa koji mogu koegzistirati sa javnim registrom crates.io. Na primjer, programeri vlasničkih aplikacija sada mogu koristiti vlastiti privatni registar, koji se može koristiti kada se navode ovisnosti u Cargo.toml, i primjenjuju model upravljanja verzijama sličan crates.io za svoje proizvode, kao i upućivanje zavisnosti na oba sanduka. io i na vaš vlastiti registar.

    Za dodavanje eksternih registara u .cargo/config (koji se nalazi u $HOME ili u direktoriju paketa)
    predviđeno odjeljak “[registri]”, a za korištenje eksternog registra, opcija “registry” pojavila se u opisu svake zavisnosti u Cargo.toml. Da biste se povezali na dodatni registar, jednostavno stavite token za autentifikaciju u ~/.cargo/credentials datoteku i pokrenite naredbu
    "cargo login --registry=my-registry" i za objavljivanje paketa -
    "cargo publish -registry=my-registry";

  • Dodana je puna podrška za korištenje “?” operatora. u testovima doctests, što vam omogućava da koristite primjer koda iz dokumentacije kao testove. Ranije operater
    "?" može se koristiti za rukovanje greškama tokom izvršavanja testa samo u prisustvu funkcije “fn main()” ili u funkcijama “#[test]”;

  • U prilagođenim atributima definiranim korištenjem proceduralnih makroa osiguran mogućnost korištenja proizvoljnih skupova tokena (“#[attr($tokens)]”, “#[attr[$tokens]] i #[attr{$tokens}]”). Ranije su elementi mogli biti specificirani samo u obliku stabla/rekurzivnog oblika koristeći string literale, na primjer “#[foo(bar, baz(quux, foo = “bar”))]”, ali sada je moguće koristiti enumeracije (' #[opseg(0. .10)]') i konstrukcije poput “#[vezan(T: MyTrait)]”;
  • Stabilizirani tipovi (osobina) TryFrom и TryInto, što omogućava konverzije tipova uz rukovanje greškama. Na primjer, metode poput from_be_bytes sa cjelobrojnim tipovima koriste nizove kao ulaz, ali podaci često dolaze u tipu Slice, a pretvaranje između nizova i rezova je problematično za ručno. Uz pomoć novih osobina, navedena operacija se može izvršiti u hodu putem poziva .try_into(), na primjer, „neka broj = u32::from_be_bytes(slice.try_into()?)“. Za konverzije koje uvijek budu uspješne (na primjer, od tipa u8 do u32), dodat je tip greške Nepogrešivo, što omogućava transparentnu upotrebu
    TryFrom za sve postojeće implementacije "From";

  • Funkcija je zastarjela CommandExt::before_exec, što je omogućilo da se rukovalac izvrši prije pokretanja exec-a, koji je bio izvršen u kontekstu podređenog procesa koji se račva nakon poziva fork(). Pod takvim uslovima, neki resursi roditeljskog procesa, kao što su deskriptori datoteka i mapirana memorijska područja, mogu biti duplicirani, što bi moglo dovesti do nedefinisanog ponašanja i nepravilnog rada biblioteka.
    Preporučuje se korištenje nesigurne funkcije umjesto before_exec CommandExt::pre_exec.

  • Stabilizirani predpisani i neoznačeni atomski cjelobrojni tipovi veličine od 8 do 64 bita (na primjer, AtomicU8), kao i potpisani tipovi NonZeroI[8|16|32|64|128].
  • Novi dio API-ja je premješten u stabilnu kategoriju, uključujući Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] i SystemTime metode su stabilizirane ::checked_[add|sub]. Funkcije iter::from_fn i iter::successors su stabilizirane;
  • Za sve tipove cjelobrojnih, implementirane su metode checked_pow, saturating_pow, wrapping_pow i overflowing_pow;
  • Dodata je mogućnost omogućavanja optimizacije u fazi povezivanja specificiranjem opcije gradnje “-C linker-plugin-lto”.

izvor: opennet.ru

Dodajte komentar