Izdanje Rust programskog jezika 1.57

Objavljeno je izdanje sistemskog programskog jezika Rust 1.57, utemeljenog na projektu Mozilla, ali sada razvijenog pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća ili vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustovo automatsko upravljanje memorijom uklanja pogreške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što je pristup memorijskoj regiji nakon što je oslobođena, dereferenciranje nultog pokazivača, prekoračenje međuspremnika, itd. Za distribuciju knjižnica, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Glavne inovacije:

  • Stabilizirana je uporaba makronaredbe “panic!”. u kontekstima stvorenim tijekom kompilacije, kao što su "const fn" deklaracije. Osim toga, uz korištenje "panic!" const deklaracije dopuštaju korištenje makronaredbe “assert!”. i neke druge standardne knjižnične API-je. Stabilizacija još ne pokriva cjelokupnu infrastrukturu formatiranja, tako da u sadašnjem obliku makronaredbe “panic!” može se koristiti samo sa statičkim nizovima (panic!(“...")) ili s jednom interpoliranom vrijednošću "&str" prilikom zamjene (panic!("{}", a)), koja bi trebala biti ograničena na zamjenu "{ }" bez specifikacija oblikovanja i drugih vrsta. U budućnosti će se primjenjivost makronaredbi u konstantnim kontekstima proširiti, ali stabilizirane mogućnosti već su dovoljne za izvođenje assert provjere u fazi kompilacije: const _: () = assert!(std::mem::size_of::() == 64 ); const _: () = assert!(std::mem::size_of::() == 8);
  • Upravitelj paketa Cargo dopušta korištenje profila s proizvoljnim nazivima, koji nisu ograničeni na "dev", "release", "test" i "bench". Na primjer, kako biste omogućili optimizaciju u fazi povezivanja (LTO) samo kada se generiraju završni sklopovi proizvoda, možete stvoriti profil "proizvodnje" u Cargo.toml i dodati mu oznaku "lto = true". Međutim, kada definirate vlastite profile, morate navesti postojeći profil kako biste od njega naslijedili zadane postavke. Primjer u nastavku stvara profil "produkcije" koji nadopunjuje profil "izdanja" uključivanjem oznake "lto = true". Sam profil se aktivira pozivom cargo s opcijom “--profile production”, a artefakti sklopa bit će smješteni u direktorij “target/production”. [profile.production] inherits = "release" lto = true
  • Stabilizirana je upotreba try_reserve za tipove Vec, String, HashMap, HashSet i VecDeque, što vam omogućuje da unaprijed rezervirate prostor za određeni broj elemenata određenog tipa kako biste smanjili učestalost operacija dodjele memorije i izbjegli ruši tijekom rada zbog nedostatka memorije.
  • Dopušteno je navesti makronaredbe s vitičastim zagradama u izrazima poput "m!{ .. }.method()" i "m!{ .. }?".
  • Izvršenje funkcija File::read_to_end i read_to_string je optimizirano.
  • Podrška za Unicode specifikaciju ažurirana je na verziju 14.0.
  • Proširen je broj funkcija označenih s "#[must_use]" za izdavanje upozorenja ako se povratna vrijednost zanemari, što pomaže u prepoznavanju pogrešaka uzrokovanih pretpostavkom da će funkcija promijeniti vrijednosti umjesto da vrati novu vrijednost.
  • Dodana eksperimentalna pozadina za generiranje koda pomoću libgccjita.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • [T; N]::as_mut_slice
    • [T; N]::kao_odsječak
    • zbirke::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::probaj_rezerviraj
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Naredba::get_program
    • Naredba::get_args
    • Naredba::get_envs
    • Naredba::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut “const”, koji određuje može li se koristiti u bilo kojem kontekstu umjesto konstanti, koristi se u funkciji hint::unreachable_unchecked.
  • Treća razina podrške implementirana je za armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi i armv7a-kmc- solid_asp3-eabihf platforme. 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.

Izvor: opennet.ru

Dodajte komentar