Programski jezik Rust 1.34 izdanje

Objavljen je sistemski programski jezik Rust 1.34, koji je razvio Mozilla projekat. 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. Za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija Cargo paket menadžer, koji vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Crates.io spremište je podržano za hostovanje biblioteka.

Glavne 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.

    Da dodate eksterni registar u ~/.cargo/config
    nova opcija “moj-registrator” je data u odjeljku “[registri]”, a dodana je i opcija “other-crate” koja spominje vanjski registar u ovisnostima u Cargo.toml u odjeljku “[zavisnosti]”. 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 doctests, koji vam omogućavaju 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, moguće je koristiti proizvoljne skupove 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)]”;
  • Karakteristike TryFrom i TryInto su stabilizirane, omogućavajući 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šiv kako bi se omogućila transparentna upotreba
    TryFrom za sve postojeće implementacije "From";

  • Zastarjela funkcija CommandExt::before_exec, koja je omogućila izvršavanje rukovatelja prije 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.
    Umjesto before_exec, preporučuje se korištenje nesigurne funkcije CommandExt::pre_exec.

  • Stabilizirani predpisani i neoznačeni atomski cjelobrojni tipovi veličine od 8 do 64 bita (na primjer, AtomicU8), kao i predpisani tipovi NonZeroI[8|16|32|54|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 da se omogući optimizacija u fazi povezivanja specificiranjem opcije gradnje “-C linker-plugin-lto” (rustc kompajlira Rust kod u LLVM bitni kod, što omogućava primjenu LTO optimizacija).

izvor: opennet.ru

Dodajte komentar