Izdanje Rust programskog jezika 1.34

Izdan je sistemski programski jezik Rust 1.34 koji je razvio Mozilla projekt. 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.

Rustovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što su pristupi memoriji nakon oslobađanja, dereferencije nultog pokazivača, prekoračenja međuspremnika i slično. Za distribuciju biblioteka, osiguravanje sastavljanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo, koji vam omogućuje da jednim klikom dobijete knjižnice potrebne za program. Repozitorij crates.io podržan je za smještaj knjižnica.

Glavne inovacije:

  • Upravitelj paketa Cargo dodao je alate za rad s alternativnim registrima paketa koji mogu koegzistirati s javnim registrom crates.io. Na primjer, programeri vlasničkih aplikacija sada mogu koristiti vlastiti privatni registar, koji se može koristiti prilikom ispisivanja ovisnosti u Cargo.toml, i primijeniti model izrade verzija sličan crates.io za svoje proizvode, kao i uputiti ovisnosti na oba sanduka. io i u vlastiti registar.

    Za dodavanje vanjskog registra u ~/.cargo/config
    nova opcija "my-registry" dostupna je u odjeljku "[registri]", a dodana je opcija "other-crate" za spominjanje vanjskog registra u ovisnostima u Cargo.toml u odjeljku "[ovisnosti]". Da biste se povezali s dodatnim registrom, jednostavno postavite token za provjeru autentičnosti u datoteku ~/.cargo/credentials i pokrenite naredbu
    "cargo login --registry=my-registry" i objaviti paket -
    "objava tereta -registar=moj-registar";

  • Dodana puna podrška za korištenje operatora “?”. u doctestovima, koji vam omogućuju korištenje primjera koda iz dokumentacije kao testova. Prethodno operater
    "?" može se koristiti za rješavanje pogrešaka tijekom izvođenja testa samo u prisutnosti funkcije "fn main()" ili u funkcijama "#[test]";

  • U prilagođenim atributima definiranim pomoću proceduralnih makronaredbi, moguće je koristiti proizvoljne skupove tokena (“#[attr($tokens)]”, “#[attr[$tokens]] i #[attr{$tokens}]”). Prije su se elementi mogli specificirati samo u obliku stabla/rekurzivnog oblika korištenjem string literala, na primjer “#[foo(bar, baz(quux, foo = “bar”))]”, ali sada je moguće koristiti enumeracije (' #[range(0. .10)]') i konstrukcije poput “#[bound(T: MyTrait)]”;
  • Značajke TryFrom i TryInto su stabilizirane, dopuštajući pretvorbe tipa s rukovanjem pogreškama. Na primjer, metode poput from_be_bytes s tipovima cjelobrojnih brojeva koriste nizove kao ulaz, ali podaci često dolaze u vrsti odsječaka, a pretvaranje između nizova i odsječaka problematično je izvršiti ručno. Uz pomoć novih značajki, navedena se operacija može izvesti u hodu putem poziva .try_into(), na primjer, “let num = u32::from_be_bytes(slice.try_into()?)”. Za pretvorbe koje su uvijek uspješne (na primjer, iz tipa u8 u u32), dodan je nepogrešivi tip pogreške kako bi se omogućila transparentna upotreba
    TryFrom za sve postojeće implementacije "From";

  • Zastarjela je funkcija CommandExt::before_exec, koja je dopuštala izvršavanje rukovatelja prije exec-a koji je izvršen u kontekstu podređenog procesa račvanog nakon poziva fork(). Pod takvim uvjetima, neki resursi nadređenog procesa, kao što su deskriptori datoteka i mapirana memorijska područja, mogu se duplicirati, što može dovesti do nedefiniranog ponašanja i neispravnog rada biblioteka.
    Umjesto before_exec, preporuča se koristiti nesigurnu funkciju CommandExt::pre_exec.

  • Stabilizirani atomski cijeli brojevi s predznakom i bez predznaka veličine od 8 do 64 bita (na primjer, AtomicU8), kao i tipovi s predznakom NonZeroI[8|16|32|54|128].
  • Novi dio API-ja premješten je 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 cjelobrojne tipove implementirane su metode checked_pow, saturating_pow, wrapping_pow i overflowing_pow;
  • Dodana je mogućnost omogućavanja optimizacija u fazi povezivanja navođenjem opcije izgradnje “-C linker-plugin-lto” (rustc kompajlira Rust kod u LLVM bitcode, što omogućuje primjenu LTO optimizacija).

Izvor: opennet.ru

Dodajte komentar