Programski jezik Rust 1.57 izdanje

Objavljeno je izdanje sistemskog programskog jezika Rust 1.57, čiji je osnivač Mozilla projekat, a sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije, obezbjeđuje automatsko upravljanje memorijom i obezbjeđuje sredstva za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća ili vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rust-ovo automatsko upravljanje memorijom spašava programere od grešaka prilikom manipulacije pokazivačima i štiti od problema koji nastaju zbog manipulacije memorijom niskog nivoa, kao što je pristup memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Glavne inovacije:

  • Upotreba makroa “panika!” je stabilizovana. u kontekstima kreiranim tokom kompilacije, kao što su "const fn" deklaracije. Dodatno, pored upotrebe "panike!" const deklaracije dozvoljavaju upotrebu makroa “assert!”. i neke druge standardne bibliotečke API-je. Stabilizacija još ne pokriva cjelokupnu infrastrukturu za formatiranje, tako da je u sadašnjem obliku makro “panika!” može se koristiti samo sa statičkim nizovima (panika!(…")) ili sa jednom interpoliranom vrijednošću "&str" prilikom zamjene (panika!("{}", a)), što bi trebalo biti ograničeno na zamjenu "{ }" bez specifikacija formatiranja i drugih tipova. U budućnosti će se proširiti primjenjivost makroa u stalnim kontekstima, ali stabilizirane mogućnosti su već dovoljne za izvođenje provjera assert u fazi kompilacije: const _: () = assert!(std::mem::size_of::() == 64 ); const _: () = assert!(std::mem::size_of::() == 8);
  • Cargo paket menadžer dozvoljava korištenje profila sa proizvoljnim nazivima, ne ograničavajući se na "dev", "release", "test" i "bench". Na primjer, da biste omogućili optimizaciju u fazi povezivanja (LTO) samo kada se generiraju konačni sklopovi proizvoda, možete kreirati "proizvodni" profil u Cargo.toml i dodati mu oznaku "lto = true". Međutim, kada definirate vlastite profile, morate specificirati postojeći profil da biste od njega naslijedili zadane postavke. Primjer u nastavku kreira "proizvodni" profil koji nadopunjuje profil "izdanja" uključivanjem oznake "lto = true". Sam profil se aktivira pozivanjem tereta sa opcijom “--profile production”, a artefakti sklopa će biti smješteni u direktorij “target/production”. [profile.production] nasljeđuje = "release" lto = istina
  • Stabilizirano je korištenje try_reserve za tipove Vec, String, HashMap, HashSet i VecDeque, što vam omogućava da unaprijed rezervirate prostor za određeni broj elemenata datog tipa kako biste smanjili učestalost operacija dodjele memorije i izbjegli ruši tokom rada zbog nedostatka memorije.
  • Dozvoljeno je specificirati makroe sa vitičastim zagradama u izrazima poput "m!{ .. }.method()" i "m!{ .. }?".
  • Optimizirano je izvršavanje funkcija File::read_to_end i read_to_string.
  • Podrška za Unicode specifikaciju je ažurirana na verziju 14.0.
  • Proširen je broj funkcija označenih s "#[must_use]" za izdavanje upozorenja ako se vraćena vrijednost zanemari, što pomaže identificirati greške uzrokovane pretpostavkom da će funkcija promijeniti vrijednosti umjesto da vrati novu vrijednost.
  • Dodan eksperimentalni backend za generiranje koda koristeći libgccjit.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut “const”, koji određuje da li se može koristiti u bilo kojem kontekstu umjesto konstanti, koristi se u funkciji hint::unreachable_unchecked.
  • Treći nivo podrške je implementiran za armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabik i armv7-eabik solid_asp3-eabihf platforme. Treći nivo uključuje osnovnu podršku, ali bez automatskog testiranja, objavljivanja službenih verzija ili provjere da li se kod može izgraditi.

izvor: opennet.ru

Dodajte komentar