Izdaja programskega jezika Rust 1.34

potekala izdaja sistemskega programskega jezika Rja 1.34razvil projekt Mozilla. Jezik se osredotoča na varno upravljanje pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja.

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred manipulacijo kazalcev in ščiti pred težavami, ki izhajajo iz manipulacije pomnilnika na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo, ki vam omogoča, da z enim klikom pridobite knjižnice, ki jih potrebujete za program. Repozitorij je podprt za gostovanje knjižnic zaboji.io.

Glavni inovacije:

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

    Za dodajanje zunanjih registrov v .cargo/config (ki se nahaja v $HOME ali imeniku paketov)
    pod pogojem »[registri]« in za uporabo zunanjega registra se je v opisu vsake odvisnosti v Cargo.toml pojavila možnost »register«. Če se želite povezati z dodatnim registrom, samo 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 "?" v testih doctests, ki vam omogoča uporabo kode primerov 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 zavarovano možnost uporabe poljubnih nizov žetonov ("#[attr($tokens)]", "#[attr[$tokens]] in #[attr{$tokens}]"). Prej je bilo elemente mogoče podati le v drevesni/rekurzivni obliki z uporabo nizovnih literalov, kot je "#[foo(bar, baz(quux, foo = "bar"))]", zdaj pa je mogoče uporabiti enume ('# [range(0. .10)]') in konstrukcije, kot je "#[bound(T: MyTrait)]";
  • Stabilizirane lastnosti (lastnost) PoskusiOd и poskusiti, ki vam omogočajo izvajanje pretvorb tipov z obravnavanjem napak. Metode, kot je from_be_bytes s celoštevilskimi vrstami, na primer uporabljajo nize kot vhod, vendar so podatki pogosto tipa Slice, pretvorbo med nizi in rezinami pa je ročno težko izvesti. Z novimi lastnostmi je to operacijo mogoče izvesti sproti s klicem .try_into(), na primer, "let num = u32::from_be_bytes(slice.try_into()?)". Vrsta napake je dodana za konverzije, ki so vedno uspešne (npr. iz vrste u8 v u32) Nezmogljiv, ki vam omogoča pregledno uporabo
    TryFrom za vse obstoječe izvedbe »Od«;

  • Funkcija zastarela CommandExt::before_exec, ki je dovolil, da se izvajalec izvaja pred exec, ki je bil izveden v kontekstu podrejenega procesa, razcepljenega po klicu fork(). V takšnih pogojih se lahko nekateri viri nadrejenega procesa, kot so deskriptorji datotek in preslikana pomnilniška območja, podvojijo, kar lahko povzroči nedefinirano vedenje in nepravilno delovanje knjižnic.
    Priporočljivo je, da uporabite unsafe funkcijo namesto before_exec CommandExt::pre_exec.

  • Predznačeni in nepredznačeni atomski celi tipi od 8 do 64 bitov so stabilizirani (npr. AtomicU8), kot tudi predpisane vrste NonZeroI[8|16|32|64|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«.

Vir: opennet.ru

Dodaj komentar