Izdaja programskega jezika Rust 1.34

Izšel je sistemski programski jezik Rust 1.34, ki ga je razvil projekt Mozilla. 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.

Samodejno upravljanje pomnilnika Rust osvobodi razvijalca pred manipulacijo s kazalcem in ščiti pred težavami, ki izhajajo iz manipulacije s pomnilnikom na nizki ravni, kot so dostopi do pomnilnika po sprostitvi, dereferenciranje ničelnega kazalca, prekoračitev medpomnilnika in podobno. Za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo, ki vam omogoča, da knjižnice, potrebne za program, dobite z enim klikom. Repozitorij crates.io je podprt za gostovanje knjižnic.

Glavne novosti:

  • Upravitelju paketov Cargo dodana orodja za delo z alternativnimi registri paketov, ki lahko soobstajajo z javnim registrom crates.io. Na primer, razvijalci zasebnih aplikacij lahko zdaj uporabljajo svoj zasebni register, ki ga je mogoče uporabiti pri navajanju odvisnosti v Cargo.toml in za svoje izdelke uporabljajo model različic, podoben crates.io, ter se sklicujejo na crates.io in crates.io. v odvisnostih v svoj register.

    Če želite dodati zunanji register v ~/.cargo/config
    nova možnost »my-registry« je na voljo v razdelku »[registri]« in dodana je bila možnost »other-crate«, ki omenja zunanji register v odvisnostih v Cargo.toml v razdelku »[odvisnosti]«. Če se želite povezati z dodatnim registrom, preprosto postavite žeton za preverjanje pristnosti v datoteko ~/.cargo/credentials in zaženite ukaz
    "cargo login --registry=my-registry", in za objavo paketa -
    "cargo public --registry=my-registry";

  • Dodana popolna podpora za uporabo operaterja »?«. v doctestih, ki vam omogočajo uporabo vzorčne kode iz dokumentacije kot testov. Prej operater
    "?" se lahko uporablja za obravnavo napak med izvajanjem testa le, če obstaja funkcija "fn main()" ali v funkcijah "#[test]";

  • V atributih po meri, definiranih s proceduralnimi makri, je mogoče uporabiti poljubne nize žetonov (»#[attr($tokens)]«, »#[attr[$tokens]] in #[attr{$tokens}]«). Prej je bilo elemente mogoče podati le v drevesni/rekurzivni obliki z uporabo nizovnih literalov, na primer »#[foo(bar, baz(quux, foo = »bar«))]«, zdaj pa je mogoče uporabiti naštevanja (' #[razpon(0. .10)]') in konstrukcije, kot je »#[vezan(T: Moja lastnost)]«;
  • Lastnosti TryFrom in TryInto sta bili stabilizirani, kar omogoča pretvorbe tipov z obravnavanjem napak. Metode, kot je from_be_bytes s celoštevilskimi vrstami, na primer uporabljajo matrike kot vhod, vendar so podatki pogosto v obliki rezine, ročno pretvorbo med matrikami in rezinami pa je problematično. S pomočjo novih lastnosti je mogoče navedeno operacijo izvajati sproti s klicem .try_into(), na primer »let num = u32::from_be_bytes(slice.try_into()?)«. Za pretvorbe, ki vedno uspejo (na primer iz vrste u8 v u32), je bila dodana vrsta napake Nezmotljivo, da se omogoči pregledna uporaba
    TryFrom za vse obstoječe izvedbe »Od«;

  • Zastarela je funkcija CommandExt::before_exec, ki je dovoljevala izvajanje obdelovalnika pred izvajanjem, ki je bil izveden v kontekstu podrejenega procesa, razcepljenega po klicu fork(). Pod takšnimi pogoji bi se lahko nekateri viri nadrejenega procesa, kot so deskriptorji datotek in preslikana pomnilniška območja, podvojili, kar bi lahko povzročilo nedefinirano vedenje in nepravilno delovanje knjižnic.
    Namesto before_exec je priporočljivo uporabiti nevarno funkcijo CommandExt::pre_exec.

  • Stabilizirani predznačeni in nepredznačeni atomski celi tipi velikosti od 8 do 64 bitov (na primer AtomicU8), kot tudi predznačeni tipi NonZeroI[8|16|32|54|128].
  • Nov del API-ja je bil premaknjen v kategorijo stabilnih, vključno z metodami Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add |sub] in SystemTime sta stabilizirana ::checked_[add|sub]. Funkciji iter::from_fn in iter::successors sta bili stabilizirani;
  • Za vse vrste celih števil so implementirane metode checked_pow, saturating_pow, wrapping_pow in overflowing_pow;
  • Dodana možnost omogočanja optimizacij na stopnji povezovanja z navedbo možnosti gradnje »-C linker-plugin-lto« (rustc prevede kodo Rust v bitno kodo LLVM, kar omogoča uporabo optimizacij LTO).

Vir: opennet.ru

Dodaj komentar