Izdaja programskega jezika Rust 1.57

Izšla je izdaja sistemskega programskega jezika Rust 1.57, ki ga je utemeljil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralnika smeti ali izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred napakami pri manipulaciji s kazalci in ščiti pred težavami, ki nastanejo zaradi manipulacije 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.

Glavne novosti:

  • Uporaba makra »panic!« je bila stabilizirana. v kontekstih, ustvarjenih med prevajanjem, kot so deklaracije "const fn". Dodatno, poleg uporabe "panike!" deklaracije const omogočajo uporabo makra “assert!”. in nekatere druge standardne knjižnične API-je. Stabilizacija še ne pokriva celotne infrastrukture oblikovanja, zato je v trenutni obliki makro »panika!«. se lahko uporablja le s statičnimi nizi (panic!("...")) ali z eno samo interpolirano vrednostjo "&str" pri zamenjavi (panic!("{}", a)), ki mora biti omejena na zamenjavo "{ }" brez specifikatorjev oblikovanja in drugih vrst. V prihodnosti bo uporabnost makrov v stalnih kontekstih razširjena, vendar stabilizirane zmožnosti že zadoščajo za izvajanje preverjanj trditev v fazi prevajanja: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = trdi!(std::mem::size_of:: () == 8);
  • Upravitelj paketov Cargo omogoča uporabo profilov s poljubnimi imeni, ki niso omejeni na "dev", "release", "test" in "bench". Če želite na primer omogočiti optimizacijo na stopnji povezovanja (LTO) šele, ko so ustvarjeni končni sestavi izdelka, lahko v Cargo.toml ustvarite profil »produkcije« in mu dodate zastavico »lto = true«. Ko definirate lastne profile, morate določiti obstoječi profil, da od njega podedujete privzete nastavitve. Spodnji primer ustvari profil »produkcije«, ki dopolnjuje profil »izdaje« z vključitvijo zastavice »lto = true«. Sam profil se aktivira s klicem cargo z možnostjo “--profile production” in artefakti montaže bodo postavljeni v imenik “target/production”. [profile.production] inherits = "release" lto = true
  • Uporaba try_reserve za tipe Vec, String, HashMap, HashSet in VecDeque je bila stabilizirana, kar vam omogoča, da vnaprej rezervirate prostor za določeno število elementov danega tipa, da zmanjšate pogostost operacij dodeljevanja pomnilnika in preprečite se med delovanjem zruši zaradi pomanjkanja pomnilnika.
  • Dovoljeno je določiti makre z zavitimi oklepaji v izrazih, kot sta "m!{ .. }.method()" in "m!{ .. }?".
  • Izvajanje funkcij File::read_to_end in read_to_string je bilo optimizirano.
  • Podpora za specifikacijo Unicode je bila posodobljena na različico 14.0.
  • Razširjeno je število funkcij, označenih z »#[must_use]« za izdajo opozorila, če je vrnjena vrednost prezrta, kar pomaga prepoznati napake, ki nastanejo zaradi domneve, da bo funkcija spremenila vrednosti, namesto da bi vrnila novo vrednost.
  • Dodano eksperimentalno zaledje za ustvarjanje kode z uporabo libgccjit.
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
    • [T; N]::as_mut_slice
    • [T; N]::kot_rezina
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::poskusi_rezerviraj
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Ukaz::get_program
    • Ukaz::get_args
    • Ukaz::get_envs
    • Ukaz::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut »const«, ki določa, ali ga je mogoče uporabiti v katerem koli kontekstu namesto konstant, se uporablja v funkciji hint::unreachable_unchecked.
  • Tretja raven podpore je bila implementirana za armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi in armv7a-kmc- solid_asp3-eabihf platforme. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.

Vir: opennet.ru

Dodaj komentar